Балансировка нагрузки
Балансировщик нагрузки — посредник между клиентами и серверами, который распределяет входящие запросы между несколькими экземплярами приложения. Без балансировщика горизонтальное масштабирование (см. тему «Масштабирование») бессмысленно — клиенты не знают, на какой из серверов идти.
Алгоритмы распределения:
- 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 на логин без изменения кода приложения.
• разницу L4 и L7 балансировки и зачем health checks (если дошёл до 2-го слоя).