Вопрос с собеседования · System design

Почему для горизонтального масштабирования сервис делают stateless?

MiddleМасштабирование
Ещё спрашивают так:
  • Что значит stateless-сервис?
  • Где хранить сессии при нескольких экземплярах?
Коротко

Stateless — состояние не в памяти экземпляра, а в базе, кэше, брокере или токене. Экземпляры взаимозаменяемы: запрос можно отправить в любой.

  • Это даёт автомасштабирование, выкатку без простоя и спокойную потерю узла
  • Нарушители: сессии в памяти, файлы на локальном диске, локальный кэш изменяемых данных, фоновые задачи без координации
  • Sticky sessions лечат симптом ценой неравномерной нагрузки и потерь при выкатке

А ещё Локальный кэш допустим как необязательное ускорение с коротким TTL

Подробно

Stateless не означает отсутствия состояния вообще — оно есть, но живёт в базе, кэше или брокере, а не в памяти конкретного экземпляра. Это и делает возможными автоскейл, выкатку без простоя и безболезненную потерю узла. Локальное состояние ломает всё перечисленное: пользователь привязывается к экземпляру, перезапуск теряет сессию, а нагрузка распределяется неравномерно. Типичные нарушители, которые стоит назвать: сессии в памяти, локальные кэши с изменяемыми данными, файлы, записанные на диск экземпляра, и планировщики, запускающие задачу на каждом инстансе. Если состояние по своей природе локально, его выносят во внешнее хранилище или изолируют в отдельный сервис.

Что хотят услышать

  • Определение: состояние вынесено наружу, а не отсутствует.
  • Что это даёт для масштабирования и выкаток.
  • Типичные нарушители и куда их выносить.

Частые ошибки

  • Считать локальный кэш безобидным — он расходится между экземплярами.
  • Полагаться на липкие сессии как на решение вместо внешнего хранилища.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Stateless-сервисы работают быстрее за счёт отсутствия переменных
  • ✓Любой экземпляр обслужит любой запрос, и инстансы свободно добавляются и снимаются
  • ✗Stateless означает, что сервис не обращается к базе данных и поэтому не ждёт её ответов
  • ✗Только stateless-сервисы можно размещать в контейнерах

Что спросят дальше

  • Как быть с задачами по расписанию при нескольких экземплярах?
  • Чем плохи липкие сессии при частых выкатках?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования