Выбор ответа Junior Масштабирование спрашивают часто обновлено

Сессии за балансировщиком

Вопрос

Приложение хранит сессии в памяти процесса. После добавления второго экземпляра за round-robin балансировщиком пользователей случайно разлогинивает. В чём причина и лучшее исправление?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Запрос попадает туда, где сессии нет: вынести сессии в Redis. Каждый экземпляр видит только свои сессии в памяти, а round robin отправляет запросы по очереди на разные узлы.

Варианты ответа

  1. Балансировщик теряет cookie, нужно сменить алгоритм на least connections
  2. Слишком короткий TTL сессии, его нужно увеличить до суток
  3. Запрос попадает туда, где сессии нет: вынести сессии в Redisправильный ответ
  4. Нужно включить HTTP/2, чтобы запросы шли по одному соединению

Разбор

Каждый экземпляр видит только свои сессии в памяти, а round robin отправляет запросы по очереди на разные узлы. Правильное решение: сделать сервис stateless, вынеся сессии в Redis или используя самодостаточные токены. Sticky sessions помогут частично, но при падении узла сессии всё равно пропадут. Least connections не решает проблему, TTL и HTTP/2 тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.