Балансировка нагрузки (load balancing) — это распределение входящего трафика между несколькими серверами. Это повышает отказоустойчивость, увеличивает пропускную способность и снижает нагрузку на отдельные узлы. В этой статье разберём основные алгоритмы и современные инструменты.
Зачем нужна балансировка
При росте нагрузки один сервер может не справиться с числом запросов. Балансировка решает три главные задачи:
- Отказоустойчивость — при падении одного сервера трафик переключается на живые узлы.
- Масштабируемость — можно добавлять серверы горизонтально без остановки сервиса.
- Оптимизация — запросы направляются на наименее загруженные узлы.
💡 Ключевая идея: Клиент работает с одним IP или доменом, даже если за ним стоит десятки серверов.
Популярные алгоритмы
Round Robin (Циклический)
Самый простой алгоритм. Запросы распределяются по очереди: первый — на сервер A, второй — на B, третий — на C, затем снова на A. Подходит для случаев, когда все серверы одинаковой мощности.
Least Connections (Наименьшее число подключений)
Балансировщик направляет запрос на сервер с минимальным количеством активных соединений. Хорошо работает с длительными сессиями (например, загрузка файлов, WebRTC, стриминг).
IP Hash
Хэш от IP-адреса клиента определяет, на какой сервер уйдёт запрос. Гарантирует, что пользователь всегда попадает на один и тот же сервер (нужно для сессий или корзин интернет-магазинов).
Инструменты для балансировки
Nginx
Один из самых популярных инструментов. Nginx может работать как обратный прокси, балансировщик и кэширующий сервер. Поддерживает все основные алгоритмы и активные проверки здоровья (health checks).
upstream backend {
least_conn;
server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.2:8080;
server 10.0.0.3:8080 backup;
}
HAProxy
Профессиональный балансировщик для высоконагруженных систем. Поддерживает L4 (TCP) и L7 (HTTP) балансировку, детальную статистику и гибкие алгоритмы.
Envoy Proxy
Современный прокси от Lyft, активно используется в сервис-мешах (например, Istio). Обладает богатыми возможностями мониторинга и настройки.
Health Checks — проверка здоровья серверов
Балансировщик должен знать, какие серверы живы и готовы принимать трафик. Пассивные проверки используют данные реальных запросов (ошибки 5xx). Активные проверки периодически стучатся на сервер (например, /health) и при ошибке исключают его из пула.
# Пример ответа health check в JSON
{
"status": "ok",
"timestamp": "2026-05-20T10:00:00Z"
}
Рекомендации по настройке
- Всегда используйте проверки здоровья (health checks).
- Для WebSocket и WebRTC трафика выбирайте least connections.
- Если серверы находятся в разных дата-центрах — учитывайте задержки.
- Включайте логирование и мониторинг (Prometheus + Grafana).
- Используйте failover-серверы (резервные узлы).
⚡ Практический совет: Для проектов с переменной нагрузкой хорошо работают гибридные алгоритмы (например, weighted least connections), где можно задать вес каждого сервера.