Какие микросервиса можно масштабировать горизонтально
Горизонтально масштабировать можно микросервисы, у которых нет критичного локального состояния на конкретном экземпляре или это состояние вынесено во внешнее хранилище. Состояние может храниться в БД, кэше или очереди, а при росте нагрузки такие хранилища могут масштабироваться отдельно, например через шардинг. Типичные примеры — API-сервисы, воркеры обработки задач, сервисы чтения данных и сервисы, работающие через очередь сообщений.
Горизонтальное масштабирование — это увеличение пропускной способности сервиса за счет добавления новых экземпляров, обычно за балансировщиком нагрузки. Для этого важно, чтобы экземпляр сервиса не был жестко привязан к данным, которые существуют только в памяти или на диске конкретного сервера.
Часто говорят, что сервис должен быть stateless, но точнее сказать так: сервис не должен хранить критичное состояние локально внутри конкретного инстанса. Состояние может быть во внешней БД, кэше, объектном хранилище или очереди. Если данных становится много, вместе с сервисом масштабируют и слой хранения: используют репликацию, партиционирование или шардинг.
Хорошо масштабируются горизонтально сервисы, которые обрабатывают независимые запросы или задачи: API-сервисы, сервисы авторизации с внешним хранилищем сессий, воркеры фоновой обработки, сервисы отправки уведомлений, сервисы чтения данных, обработчики событий из очередей.
Сложнее масштабировать сервисы, где много локального состояния, долгоживущих соединений, in-memory-сессий, локальных файлов или сильная зависимость от одного узкого места в базе данных. В таких случаях обычно выносят состояние наружу, добавляют sticky sessions только как временное решение или проектируют партиционирование данных так, чтобы разные экземпляры могли обслуживать разные шарды.
Отметьте свой прогресс