Почему для горизонтального масштабирования сервис делают stateless?
- Что значит stateless-сервис?
- Где хранить сессии при нескольких экземплярах?
Stateless — состояние не в памяти экземпляра, а в базе, кэше, брокере или токене. Экземпляры взаимозаменяемы: запрос можно отправить в любой.
- Это даёт автомасштабирование, выкатку без простоя и спокойную потерю узла
- Нарушители: сессии в памяти, файлы на локальном диске, локальный кэш изменяемых данных, фоновые задачи без координации
- Sticky sessions лечат симптом ценой неравномерной нагрузки и потерь при выкатке
А ещё Локальный кэш допустим как необязательное ускорение с коротким TTL
Подробно
Stateless не означает отсутствия состояния вообще — оно есть, но живёт в базе, кэше или брокере, а не в памяти конкретного экземпляра. Это и делает возможными автоскейл, выкатку без простоя и безболезненную потерю узла. Локальное состояние ломает всё перечисленное: пользователь привязывается к экземпляру, перезапуск теряет сессию, а нагрузка распределяется неравномерно. Типичные нарушители, которые стоит назвать: сессии в памяти, локальные кэши с изменяемыми данными, файлы, записанные на диск экземпляра, и планировщики, запускающие задачу на каждом инстансе. Если состояние по своей природе локально, его выносят во внешнее хранилище или изолируют в отдельный сервис.
Что хотят услышать
- Определение: состояние вынесено наружу, а не отсутствует.
- Что это даёт для масштабирования и выкаток.
- Типичные нарушители и куда их выносить.
Частые ошибки
- Считать локальный кэш безобидным — он расходится между экземплярами.
- Полагаться на липкие сессии как на решение вместо внешнего хранилища.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Stateless-сервисы работают быстрее за счёт отсутствия переменных
- ✓Любой экземпляр обслужит любой запрос, и инстансы свободно добавляются и снимаются
- ✗Stateless означает, что сервис не обращается к базе данных и поэтому не ждёт её ответов
- ✗Только stateless-сервисы можно размещать в контейнерах
Что спросят дальше
- Как быть с задачами по расписанию при нескольких экземплярах?
- Чем плохи липкие сессии при частых выкатках?
Разбор темы
- Масштабирование
Что именно упирается, вертикальный и горизонтальный рост, stateless и балансировка, шардинг и consistent hashing, реплики на чтение и лаг, автоскейл и поиск настоящего узкого места.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.