Что такое load balancer и зачем он нужен?

Что такое load balancer и зачем он нужен

Load balancer (балансировщик нагрузки) — это компонент, который распределяет входящий сетевой трафик между несколькими бэкенд-инстансами (серверы, контейнеры, процессы), чтобы повысить пропускную способность, отказоустойчивость и обеспечить равномерную загрузку. По сути, это «распределитель» запросов, стоящий перед группой сервисов.

Задачи и преимущества

  • Горизонтальное масштабирование — распределяет нагрузку между множеством экземпляров, позволяет добавить/удалить инстансы без простоя.

  • Отказоустойчивость — при падении одного экземпляра трафик перенаправляется на рабочие узлы.

  • Абстракция адреса — клиенты обращаются к единому виртуальному IP/домену, не зная о внутренней инфраструктуре.

  • Умная маршрутизация — L7-балансеры могут маршрутизировать по пути, хосту, заголовкам или содержимому.

  • Оптимизация и безопасность — TLS-терминация, WAF, rate-limiting, connection draining и пр.

Типы балансировщиков

  • Layer 4 (TCP/UDP) — оперируют на транспортном уровне; быстрые и простые: балансируют по IP/порт/парам протоколов.

  • Layer 7 (HTTP/HTTPS / L7) — понимают HTTP: маршрутизация по пути, хосту, кукам; могут модифицировать заголовки, делать content-based routing.

  • DNS-based — Round-Robin DNS или гео-DNS распределяют на уровне резолвинга; просты, но слабы в детекции сбоев и скором переключении.

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

  • Round Robin — по очереди; хорошо для одинаковых инстансов.

  • Least Connections — направляет к наименее загруженному инстансу; полезно при долгих соединениях.

  • Weighted — каждому бэкенду назначается вес.

  • IP Hash / Consistent Hashing — соединения от одного клиента попадают на один и тот же бэкенд (используется для affinity / кэшей).

  • Health-aware — учитывает результаты health checks и исключает нездоровые узлы.

Ключевые функции

  • Health checks — активные проверки работоспособности бэкендов (HTTP/TCP/command).

  • Session affinity (sticky sessions) — «прилипание» клиента к конкретному бэкенду (cookie, IP hash); имеет недостатки при масштабировании.

  • TLS termination / SNI — дешифровка трафика на балансировщике; возможно re-encryption к бэкендам.

  • Connection draining / graceful shutdown — при удалении инстанса новые соединения не направляются, старые обслуживаются.

  • Rate limiting, circuit breaking, WAF — защита от перегрузки и атак.

Реализации и примеры

  • Софт-решения / reverse proxies: Nginx, HAProxy, Envoy, Traefik.

  • Аппаратные / виртуальные: F5, Citrix ADC.

  • Облачные managed: AWS ELB/ALB/NLB, GCP Load Balancer, Azure Load Balancer.

  • Edge / CDN-балансировка: Cloudflare, Fastly (доп. защита и кеширование).

Докучливые моменты и лучшие практики

  • избегать зависимости от sticky sessions — лучше хранить сессии отдельно (Redis, JWT);

  • настраивать корректные таймауты и keepalive, чтобы не держать ресурсы зря;

  • health checks должны проверять реальный «путь» (эндпоинт), а не просто открытие порта;

  • использовать connection draining и непрерывные деплои (rolling updates, canary);

  • шифрование end-to-end, если внутри сети нельзя полностью доверять;

  • мониторить: request rate, error rate (4xx/5xx), latency, open connections, backend health.

Балансировщик — центральный элемент для масштабируемых, доступных и управляемых сервисов: он упрощает эксплуатацию, скрывает сложность инфраструктуры и даёт контроль над распределением и защитой входящего трафика.