Так как в текущей системе очень много крутится вокруг данных, то давай попробуем начать с них:
- Если по мониторингам загруз
CPU > 80%, то можно использовать аналог load shedding — выбирать только ограниченное кол-во заведений из Elastic (условные ТОП-20). Если нагрузка в PG, то выбирать только core поля, чтобы снизить нагрузку на БД - Если MinIO начинает проседать по скорости, то media-service может осуществить fallback и отдавать только заглушки
Далее применим bulkhead паттерн:
- Для поиска заведений выделяем отдельный thread pool с 85% ресурсов
- Для админов оставляем 10%
- Казалось бы, загруз с админов гораздо меньше. Но не забывай, что выше CPU нагрузка из-за добавления/изменения
- Для разных инфра моментов (снять логи, метрики и тд) — 5%
Или же, если мы не хотим возиться с bulkhead, то мы можем создать отдельный сервис для загрузки geo данных из админки, а отдельный для запроса geo данных клиентами.