Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем