Цель: убедиться, что приложение stateless и корректно работает в нескольких экземплярах за балансировщиком — фундамент для реального масштабирования.
Зависимость: OPS-2.
Что сделать
- Поднять в
docker-compose.yml 2 инстанса app (через deploy.replicas или два именованных сервиса) и nginx перед ними с round-robin upstream:
upstream wh { server app1:8080; server app2:8080; }
server { listen 80; location / { proxy_pass http://wh; } }
- Прогнать смоук: логин на одном инстансе → запрос с тем же JWT попадает на другой и работает (значит, нет server-side сессий).
- Найти и починить stateful-баги: локальные in-memory счётчики/кэши,
@Scheduled без блокировки (дубль выполнения на каждой реплике — связать с OPS-2), любые данные в памяти процесса.
- Стретч: явно перечислить общее состояние (БД, Redis, Kafka offset) и показать, что оно вынесено из процесса. НЕ настраивать sticky sessions — цель именно statelessness.
Acceptance criteria
Цель: убедиться, что приложение stateless и корректно работает в нескольких экземплярах за балансировщиком — фундамент для реального масштабирования.
Зависимость: OPS-2.
Что сделать
docker-compose.yml2 инстансаapp(черезdeploy.replicasили два именованных сервиса) иnginxперед ними с round-robin upstream:@Scheduledбез блокировки (дубль выполнения на каждой реплике — связать с OPS-2), любые данные в памяти процесса.Acceptance criteria
docker compose upподнимает 2 инстанса app и nginx, запросы распределяются round-robin (видно по логам/hostname).