Обзор
Чтобы гарантировать, что запросы пользователя всегда попадают на один и тот же инстанс после настройки Elastic Load Balancer (ELB), нужно использовать sticky sessions.
Что такое sticky sessions?
Sticky sessions, или session affinity — это фишка, которая привязывает сессию пользователя к конкретному бэкенд-инстансу. Как только пользователь подключится к инстансу, все его последующие запросы будут маршрутизироваться на тот же инстанс на протяжении всей сессии.
Как работают sticky sessions
- Load balancer генерирует куку, которая идентифицирует целевой инстанс
- Эта кука отправляется клиенту и включается во все последующие запросы
- Load balancer читает куку и маршрутизирует запрос на исходный инстанс
- Сессия сохраняется в течение настраиваемого периода времени
Реализация
Включить sticky sessions в AWS ELB можно через:
- AWS Management Console: перейди в настройки своего load balancer'а и включи "Enable Load Balancer Generated Cookie Stickiness"
- Настройка длительности: задай время жизни sticky sessions (обычно от 1 секунды до 1 недели)
Важные моменты
- Компромиссы: хотя sticky sessions позволяют сохранять состояние, они могут нарушить равномерное распределение нагрузки и снизить масштабируемость
- Управление состоянием сессии: подумай, действительно ли твоему приложению нужны sticky sessions, или лучше использовать распределённое хранилище сессий (например, ElastiCache или DynamoDB)
- Архитектура приложения: в идеале современные приложения должны быть stateless — это оптимально для облачной архитектуры
- Риск отказа: если закреплённый инстанс упадёт, сессия пользователя потеряется
Лучшая практика
Используй sticky sessions только когда без них не обойтись. Для лучшей надёжности и масштабируемости лучше реализовать распределённое управление сессиями.