Балансировка нагрузки — распределение входящего трафика между несколькими серверами для высокой доступности, масштабируемости и производительности. Без неё один сервер становится узким местом.
Типы балансировки
1. Клиентская балансировка
Клиент сам выбирает сервер из списка доступных (например, по IP), используя свой алгоритм (случайный выбор или правило).
- Плюсы: минимальная задержка, нет промежуточного звена.
- Минусы: клиент должен знать о серверах и обновлять список при изменениях, сложнее поддерживать в больших системах.
Когда использовать: небольшие системы или сценарии, где критична минимальная задержка.
2. Серверная балансировка
Специальный компонент (балансировщик) принимает запросы и распределяет их по серверам.
- Алгоритмы: Random, Round Robin, Weighted Round Robin, Least Connections, Hash-based (для sticky sessions).
- Sticky Sessions: запросы от одного клиента всегда идут на один сервер (по хешу IP или ID сессии). Нужны для stateful-систем; минус — возможна неравномерная нагрузка.
- Плюсы: клиенту достаточно одного адреса, легко добавлять серверы в пул.
- Минусы: балансировщик — потенциальная точка отказа, небольшая дополнительная задержка.
Когда использовать: большинство современных высоконагруженных систем (NGINX, HAProxy, AWS ELB).
3. L4 и L7
- L4 (транспортный уровень): работа с TCP/UDP, перенаправление соединения целиком без разбора содержимого. Быстрее и проще, но нельзя маршрутизировать по URL или заголовкам.
- L7 (прикладной уровень): разбор HTTP (заголовки, URL, cookies), маршрутизация по контенту, sticky sessions. Гибче, но медленнее и нагружает балансировщик сильнее.
Когда использовать: L4 — простые сценарии и низкая задержка; L7 — сложные приложения с маршрутизацией по содержимому.
4. DNS-балансировка
DNS возвращает разные IP для одного домена, распределяя клиентов по серверам или дата-центрам.
- GeoDNS: учёт геолокации клиента и направление на ближайший дата-центр (снижение latency).
- Плюсы: нет единого балансировщика как точки отказа, подходит для распределённых систем.
- Минусы: ограниченный контроль, кэширование DNS на клиенте может давать неравномерную нагрузку.
Когда использовать: глобальные системы с несколькими дата-центрами или для устранения SPOF балансировщика.
Проблема единой точки отказа
Если балансировщик падает, система становится недоступной. Решения: несколько балансировщиков с DNS-балансировкой, активный/резервный режим (active-passive), GeoDNS между дата-центрами. В крупных системах на входе — несколько L4-балансировщиков, внутри дата-центра — L7 (например, NGINX) между серверами.