Карта / Проектирование систем / Балансировка нагрузки

Балансировка нагрузки

Балансировщик нагрузки — посредник между клиентами и серверами, который распределяет входящие запросы между несколькими экземплярами приложения. Без балансировщика горизонтальное масштабирование (см. тему «Масштабирование») бессмысленно — клиенты не знают, на какой из серверов идти.

Клиенты Load Balancer Nginx / AWS ALB App Server 1 App Server 2 App Server 3

Алгоритмы распределения:

  • Round Robin — по очереди: запрос 1 → сервер A, запрос 2 → сервер B, запрос 3 → сервер C, запрос 4 → сервер A…
  • Least Connections — к серверу с наименьшим числом активных соединений (умнее для долгих запросов)
  • IP Hash — один клиент всегда попадает на один сервер (полезно для сессий)

Уровни балансировки:

  • L4 (Transport) — балансирует по IP/TCP-порту, не смотрит в содержимое. Быстро.
  • L7 (Application) — балансирует по содержимому HTTP: по URL, заголовкам, куки. Можно отправить /api/* на один кластер, /admin/* на другой.

Примеры: Nginx, HAProxy, AWS ALB/NLB, Kubernetes Service (встроенный балансировщик — см. тему «Service»).

Копнуть глубже

Health checks — балансировщик знает, кто живой. Балансировщик периодически стучится на каждый сервер (GET /health — тот самый Actuator endpoint, см. тему «Actuator»). Если сервер не отвечает — перестаёт слать ему запросы. Новые запросы идут только к живым экземплярам. Это делает систему устойчивой к сбоям отдельных серверов без вмешательства человека.

Sticky Sessions vs Stateless. IP Hash и cookie-based sticky sessions решают проблему: «мою сессию хранит конкретный сервер, не теряй меня». Но это антипаттерн — сервер стал не взаимозаменяемым. Правильное решение — хранить сессии не в памяти сервера, а во внешнем хранилище (Redis), тогда любой сервер может обслужить любой запрос.

Global Load Balancing (GeoDNS) — балансировка на уровне DNS: пользователь из Европы резолвит домен в IP европейского дата-центра, из Азии — в азиатский. Снижает latency, обеспечивает disaster recovery (если один регион упал — DNS переключается на другой).

Rate Limiting на балансировщике. Nginx и cloud балансировщики умеют ограничивать количество запросов с одного IP за период времени — базовая защита от DoS и brute force на логин без изменения кода приложения.

🎤 Закрыл тему, если можешь объяснить:
• зачем нужен балансировщик нагрузки и как работает Round Robin;
• разницу L4 и L7 балансировки и зачем health checks (если дошёл до 2-го слоя).