Современные подходы к балансировке серверов

Балансировка нагрузки (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"
}

Рекомендации по настройке

Практический совет: Для проектов с переменной нагрузкой хорошо работают гибридные алгоритмы (например, weighted least connections), где можно задать вес каждого сервера.

© 2026 · Технический блог · Статья подготовлена инженерами отдела инфраструктуры

🔗 boobsadmin.redheadguy.ru