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

Приложение с серверными сессиями масштабируют на несколько инстансов. Какое решение предпочтительнее?

MiddleHTTP, cookies и сессииSpring BootRedis
Ещё спрашивают так:
  • Как хранить сессии при нескольких экземплярах?
Коротко

Общее внешнее хранилище сессий (Spring Session + Redis или JDBC): экземпляры становятся stateless и свободно добавляются, снимаются и перезапускаются.

  • Sticky sessions — неравномерная нагрузка и потеря сессий при выкатке
  • Репликация сессий между экземплярами (Tomcat) плохо масштабируется
  • Альтернатива — токены без серверной сессии

А ещё Spring Session подключается заменой HttpSession прозрачно для кода

Подробно

Sticky sessions выглядят проще всего, но привязывают пользователя к конкретному инстансу: при его перезапуске или выкатке сессия теряется, нагрузка распределяется неравномерно, а автоскейл работает плохо, потому что новые поды получают только новых пользователей. Репликация сессий между узлами даёт трафик, растущий квадратично, и плохо масштабируется. Внешнее хранилище решает всё это: Spring Session прозрачно подменяет реализацию HttpSession, и код приложения не меняется. Альтернативный путь — вообще отказаться от серверного состояния и перейти на токены, но тогда всплывает проблема отзыва, которую решают коротким сроком жизни и refresh-токеном.

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

  • Предпочтительное решение и почему.
  • Минусы sticky sessions.

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

  • Полагаться на sticky sessions при частых выкатках.
  • Хранить в сессии крупные объекты — во внешнем хранилище это станет заметно.

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

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

Показать варианты и ответ
  • ✓Вынести сессии во внешнее хранилище, например Spring Session с Redis
  • ✗Включить sticky sessions на балансировщике и оставить сессии в памяти инстансов
  • ✗Реплицировать сессии между всеми инстансами по сети при каждом изменении
  • ✗Увеличить время жизни сессии, чтобы снизить нагрузку на балансировщик

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

  • Какие минусы у перехода на stateless-токены?
  • Почему репликация сессий плохо масштабируется?

Разбор темы

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

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

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

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

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