Когда миллионы запросов летят на ваш сервис балансировщик нагрузки решает куда их направить . Но не все балансировщики одинаковы. Главный выбор: L4 или L7.
L4 работает на транспортном уровне: TCP/UDP.
L7 работает на уровне приложений: HTTP/HTTPS.
Это фундаментальное различие определяет всё остальное.
L4 — быстро, слепо, надёжно
L4-балансировщик видит только IP-адреса и порты, но не понимает, что находится внутри пакетов. Он пересылает TCP/UDP-соединения напрямую на бэкенд-серверы, не заглядывая в содержимое.
Что из этого следует:
— Минимальная задержка — решения принимаются менее чем за 100 микросекунд
— Работает с любым протоколом: MySQL, Redis, кастомные TCP-протоколы
— Не умеет роутить по URL, заголовкам или кукам
— Не делает SSL-терминацию
Хорошая аналогия: L4-балансировщик — как инспектор ДПС, который направляет машины по номерным знакам, не зная, что внутри.
L7 — умно, гибко, дороже
L7-балансировщик работает на уровне приложений: завершает входящее соединение, при необходимости расшифровывает трафик, инспектирует сообщения, принимает решение о роутинге на основе содержимого, открывает новое TCP-соединение к нужному бэкенду и отправляет туда запрос.
Что он умеет:
— Роутинг по URL:
/api — одни серверы, /static — другие— Манипуляция заголовками, SSL-терминация
— Sticky sessions (привязка сессии к конкретному серверу)
— Rate limiting, аутентификация, логирование
— Защита от XSS и SQL-инъекций — некоторые L7-балансировщики работают как WAF
Цена: типичная задержка L7 около 10 миллисекунд против микросекунд у L4. Плюс CPU на парсинг каждого запроса.
Когда что использовать
Выбирайте L4, если:
— Протокол не HTTP (DNS, базы данных, кастомный TCP)
— Нужна максимальная скорость и минимальный оверхед
— Простое распределение без контентного роутинга
Выбирайте L7, если:
— Работаете с HTTP/HTTPS/gRPC
— Нужен роутинг по путям, заголовкам, кукам
— Хотите SSL-терминацию в одном месте
— Важна наблюдаемость и безопасность
Как это выглядит в продакшне
Netflix комбинирует L4-балансировщики на региональном уровне с L7-шлюзами (Zuul/Envoy) для разделения логики. AWS предлагает Classic ELB (L4) и ALB (L7), большинство современных архитектур выбирают ALB.
Практическое правило: начинайте с L7 для HTTP-нагрузок. Переходите к L4 только когда упираетесь в производительность или нужен протоколо-агностичный роутинг.
Балансировщик это первый рубеж вашей архитектуры. Каждое его решение влияет на пользователя ещё до того, как запрос добрался до вашего кода.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера
