Приложение с серверными сессиями масштабируют на несколько инстансов. Какое решение предпочтительнее?
- Как хранить сессии при нескольких экземплярах?
Общее внешнее хранилище сессий (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-токены?
- Почему репликация сессий плохо масштабируется?
Разбор темы
- HTTP, cookies и сессии
Семантика HTTP-методов и кэширование, cookies и их флаги безопасности, stateful против stateless сессий, HTTPS и граница authn/authz.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.