Открыть сервис

Network Load Balancer

Network Load Balancer — это тип программного или аппаратного балансировщика нагрузки, работающий на четвёртом уровне модели OSI (транспортном уровне) и распределяющий входящий сетевой трафик между несколькими серверами (целевыми группами) на основе информации из заголовков TCP/UDP-пакетов, без анализа содержимого прикладного уровня.

Принцип работы

Network Load Balancer (NLB) принимает входящие соединения от клиентов и перенаправляет их на один из серверов в пуле, используя заданный алгоритм балансировки. В отличие от балансировщиков прикладного уровня (L7), NLB не интерпретирует данные HTTP, HTTPS, SMTP или других протоколов; он оперирует только IP-адресами, портами и номерами протоколов (TCP, UDP, SCTP). Это обеспечивает минимальную задержку и высокую пропускную способность, так как обработка пакетов происходит на уровне ядра операционной системы или специализированного сетевого оборудования.

Основные этапы обработки запроса

  1. Клиент отправляет пакет на виртуальный IP-адрес (VIP) балансировщика.
  2. NLB принимает пакет, анализирует его заголовок (IP-адрес назначения, порт, протокол).
  3. В соответствии с алгоритмом балансировки (например, Round Robin, Least Connections или хэширование по IP-адресу источника) выбирается целевой сервер.
  4. Пакет перенаправляется на выбранный сервер. В зависимости от режима работы (прямая маршрутизация, NAT, туннелирование) исходный IP-адрес клиента может быть сохранён или заменён.
  5. Сервер обрабатывает запрос и отправляет ответ обратно клиенту — либо напрямую (при прямой маршрутизации), либо через балансировщик.

Отличия от балансировщиков прикладного уровня (L7)

Основное различие между NLB (L4) и балансировщиками уровня L7 (например, Application Load Balancer, ALB) заключается в глубине анализа трафика:

  • Уровень обработки: NLB работает только с транспортным уровнем; L7 — с прикладным (HTTP/2, gRPC, WebSocket).
  • Содержимое пакета: NLB не видит данные запроса (URL, заголовки, куки, тело); L7 может маршрутизировать трафик на основе этих параметров (например, /api/v1 на один пул, /static на другой).
  • Протоколы: NLB поддерживает любые TCP/UDP-приложения; L7 — только HTTP/HTTPS и некоторые другие протоколы прикладного уровня.
  • Задержка: NLB вносит минимальную задержку (часто менее 1 мс); L7 — более высокую из-за необходимости разбора прикладного протокола.
  • Сохранение сессии: NLB может сохранять сессию по IP-адресу источника (source IP affinity); L7 — по кукам или другим признакам.

Режимы работы

Прямая маршрутизация (Direct Server Return, DSR)

При DSR балансировщик только перенаправляет входящие пакеты на сервер, а сервер отправляет ответ клиенту напрямую, минуя балансировщик. Это снижает нагрузку на NLB и уменьшает задержку, но требует, чтобы сервер имел доступ к VIP-адресу (обычно через loopback-интерфейс). Режим широко применяется в высоконагруженных системах, например, в кластерах веб-серверов.

Сетевой адресный перевод (NAT)

Балансировщик изменяет IP-адрес назначения в пакете на IP-адрес выбранного сервера, а при обратном ответе — IP-адрес источника на VIP. Весь трафик проходит через NLB, что упрощает конфигурацию серверов (они не «видят» VIP), но создаёт узкое место на обратном пути.

Туннелирование (IP-IP, GRE)

Пакет инкапсулируется в другой IP-пакет и отправляется серверу, который декапсулирует его и обрабатывает. Этот метод используется в распределённых средах, когда серверы находятся в разных сетях (например, в разных дата-центрах).

Алгоритмы балансировки

  • Round Robin (по кругу): запросы последовательно распределяются между серверами в пуле. Простой и предсказуемый, но не учитывает текущую нагрузку.
  • Least Connections (наименьшее количество соединений): запрос направляется на сервер с минимальным числом активных соединений. Эффективен при неравномерной длительности обработки запросов.
  • Source IP Hash (хэширование по IP-адресу источника): IP-адрес клиента хэшируется, и на основе хэша выбирается сервер. Обеспечивает «липкость» сессии (sticky session) — все запросы от одного клиента попадают на один и тот же сервер.
  • Weighted Round Robin / Weighted Least Connections: серверам назначаются веса (например, более мощный сервер получает вес 3, менее мощный — 1), и распределение пропорционально весам.

Применение

Network Load Balancer используется в сценариях, где критичны производительность, низкая задержка и поддержка широкого спектра протоколов:

  • Балансировка TCP-трафика: веб-серверы (HTTP/HTTPS), почтовые серверы (SMTP, IMAP), серверы баз данных (MySQL, PostgreSQL), системы реального времени (WebSocket, VoIP).
  • Балансировка UDP-трафика: DNS-серверы, серверы потокового видео/аудио (RTP/RTSP), игровые серверы, VPN-серверы (OpenVPN, WireGuard).
  • Высоконагруженные веб-приложения: NLB часто используется как «входная точка» перед балансировщиками L7 (например, сначала NLB распределяет трафик по нескольким экземплярам ALB, а те уже — по серверам приложений).
  • Кластеры высокой доступности (HA): NLB обеспечивает отказоустойчивость — при выходе из строя сервера трафик автоматически перенаправляется на другие серверы в пуле.
  • Микросервисная архитектура: NLB используется для балансировки трафика между экземплярами микросервисов, работающих на различных протоколах (gRPC, Thrift, AMQP).

Примеры реализаций

  • Аппаратные балансировщики: F5 BIG-IP LTM, Citrix ADC (NetScaler), A10 Networks Thunder. Обеспечивают максимальную производительность, но имеют высокую стоимость и сложность настройки.
  • Программные (Open Source): HAProxy (поддерживает L4 и L7), NGINX (в режиме stream), Linux Virtual Server (LVS), IPVS (встроен в ядро Linux). Работают на стандартных серверах, гибки в настройке.
  • Облачные сервисы: AWS Network Load Balancer, Google Cloud External Network Load Balancer, Azure Load Balancer (L4), Яндекс.Облако Network Load Balancer. Предоставляются как управляемые сервисы, интегрированы с облачной инфраструктурой.

Преимущества и недостатки

Преимущества

  • Высокая производительность и низкая задержка: обработка на уровне ядра или специализированного чипа.
  • Поддержка любых TCP/UDP-приложений: не зависит от протокола прикладного уровня.
  • Простота: не требует настройки правил маршрутизации на основе содержимого.
  • Масштабируемость: может обрабатывать миллионы одновременных соединений.

Недостатки

  • Отсутствие интеллектуальной маршрутизации: нельзя распределять трафик по URL, заголовкам или другим данным прикладного уровня.
  • Ограниченные возможности мониторинга: NLB видит только количество соединений и пакетов, но не состояние приложения (например, не может проверить, отвечает ли веб-сервер 200 OK).
  • Сложность с «липкостью» сессий: при использовании Round Robin без хэширования IP сессия может «перескакивать» между серверами, если не настроен механизм сохранения сессии.

Интересные факты

  • Первые программные балансировщики L4 появились в середине 1990-х годов (например, LVS, созданный Вацлавом Кржеминским в 1998 году).
  • В крупных дата-центрах NLB часто реализуется на программируемых сетевых коммутаторах (P4, FPGA), что позволяет достичь пропускной способности в десятки и сотни гигабит в секунду.
  • В распределённых системах (например, Kafka, Cassandra) NLB может использоваться не только для входящего, но и для внутреннего трафика между узлами кластера.

Источники

  • Стивен С. Ли, «Архитектура сетей TCP/IP и их реализация в Linux», 2016.
  • Документация HAProxy: «Layer 4 vs Layer 7 load balancing».
  • RFC 792 (ICMP), RFC 793 (TCP), RFC 768 (UDP) — определения протоколов транспортного уровня.
  • «Load Balancing in the Cloud: A Comprehensive Guide», AWS Whitepaper, 2023.
  • Материалы курса «Сетевые технологии» (МФТИ, 2021).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →