Network Load Balancer
Network Load Balancer — это тип программного или аппаратного балансировщика нагрузки, работающий на четвёртом уровне модели OSI (транспортном уровне) и распределяющий входящий сетевой трафик между несколькими серверами (целевыми группами) на основе информации из заголовков TCP/UDP-пакетов, без анализа содержимого прикладного уровня.
Принцип работы
Network Load Balancer (NLB) принимает входящие соединения от клиентов и перенаправляет их на один из серверов в пуле, используя заданный алгоритм балансировки. В отличие от балансировщиков прикладного уровня (L7), NLB не интерпретирует данные HTTP, HTTPS, SMTP или других протоколов; он оперирует только IP-адресами, портами и номерами протоколов (TCP, UDP, SCTP). Это обеспечивает минимальную задержку и высокую пропускную способность, так как обработка пакетов происходит на уровне ядра операционной системы или специализированного сетевого оборудования.
Основные этапы обработки запроса
- Клиент отправляет пакет на виртуальный IP-адрес (VIP) балансировщика.
- NLB принимает пакет, анализирует его заголовок (IP-адрес назначения, порт, протокол).
- В соответствии с алгоритмом балансировки (например, Round Robin, Least Connections или хэширование по IP-адресу источника) выбирается целевой сервер.
- Пакет перенаправляется на выбранный сервер. В зависимости от режима работы (прямая маршрутизация, NAT, туннелирование) исходный IP-адрес клиента может быть сохранён или заменён.
- Сервер обрабатывает запрос и отправляет ответ обратно клиенту — либо напрямую (при прямой маршрутизации), либо через балансировщик.
Отличия от балансировщиков прикладного уровня (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 →