Skip to content

OPS-6: Горизонтальное масштабирование: 2 реплики за nginx #99

Description

@ii-reviewer

Цель: убедиться, что приложение 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

  • docker compose up поднимает 2 инстанса app и nginx, запросы распределяются round-robin (видно по логам/hostname).
  • JWT, выданный одним инстансом, валиден на другом.
  • Нет дублирования фоновых джоб на репликах (через OPS-2).
  • Не осталось состояния в памяти процесса, влияющего на корректность (счётчики/кэши вынесены или допустимо локальны).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions