Чем балансировщик L4 отличается от L7?
- Что такое обратный прокси?
- Где терминировать TLS?
- Как устроена балансировка от DNS до сервиса?
L4 видит только IP и порты и распределяет соединения: быстро, дёшево, не понимает содержимого. L7 разбирает HTTP и распределяет запросы: маршрутизация по пути и заголовкам, TLS, повторы, кэш — но дороже.
- L4: IPVS, LVS, Maglev, сетевые балансировщики облаков — миллионы соединений
- L7: nginx, HAProxy, Envoy, ingress в Kubernetes, API-шлюзы
- Долгое соединение (HTTP/2, gRPC, WebSocket) на L4 приклеивается к одному бэкенду
А ещё Типичный стек: DNS/Anycast → L4 → L7 → сервисы
Подробно
L4 (транспортный уровень). Балансировщик выбирает бэкенд при установке TCP-соединения (или для UDP-потока) по адресам и портам и дальше пересылает пакеты, не заглядывая внутрь. Варианты: NAT (меняет адрес назначения), DSR — direct server return (ответ идёт от сервера напрямую клиенту, минуя балансировщик), ECMP на маршрутизаторах и консистентное хеширование для одинакового выбора на всех узлах (Maglev). Плюсы — производительность, работа с любым протоколом, мало состояния. Минусы — не видит HTTP: не может маршрутизировать по пути, повторить запрос, учесть статус ответа.
L7 (прикладной уровень). Это обратный прокси: принимает соединение от клиента, разбирает HTTP и открывает (или берёт из пула) соединение к бэкенду. Возможности:
- маршрутизация по хосту, пути, заголовкам, cookie (
/api→ один сервис,/static→ другой; канареечный релиз по заголовку); - терминация TLS — сертификаты в одном месте, бэкенды разгружены;
- балансировка каждого запроса, а не соединения — важно для HTTP/2 и gRPC, где одно соединение несёт тысячи запросов;
- повторы, таймауты, circuit breaker, ограничение частоты, кэш, сжатие, аутентификация на входе;
- наблюдаемость: метрики и логи по каждому запросу.
Цена — больше CPU и памяти на запрос, дополнительная задержка, прокси сам становится сложной точкой отказа.
Ловушка долгих соединений. gRPC через L4: клиент открыл одно соединение, и все запросы идут на один бэкенд, а новые экземпляры не получают трафика. Решения — L7-прокси (Envoy), клиентская балансировка или периодическое переподключение.
Где TLS. Терминация на L7 даёт видимость и маршрутизацию; внутри сети — либо открытый HTTP в доверенном сегменте, либо повторное шифрование (mTLS в service mesh). L4 с TLS passthrough — когда ключи не должны покидать бэкенд.
Многоуровневая схема крупного сервиса: GeoDNS или Anycast выбирают ближайший дата-центр → L4-балансировщики на границе держат объём соединений → парк L7-прокси терминирует TLS и маршрутизирует → внутри — сервисная балансировка (service mesh или клиентская).
Сам балансировщик тоже резервируют: пара в active-passive с общим виртуальным IP (keepalived, VRRP) или active-active за ECMP/Anycast.
Пример
upstream api { least_conn; server 10.0.1.11:8080; server 10.0.1.12:8080; keepalive 64; }
server {
listen 443 ssl http2; # TLS терминируется здесь (L7)
location /api/ { proxy_pass http://api; proxy_next_upstream error timeout; }
location /static/ { root /srv/static; expires 7d; }
}Что хотят услышать
- Разница уровней: соединения против запросов, что видит каждый.
- Возможности L7: маршрутизация, TLS, повторы, наблюдаемость — и цена.
- Проблема долгих соединений и gRPC на L4.
- Многоуровневая схема и резервирование балансировщика.
Частые ошибки
- Ставить gRPC за L4 и удивляться неравномерной нагрузке.
- Забывать, что балансировщик — тоже точка отказа.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗L4 маршрутизирует по пути URL и заголовкам, L7 — только по IP
- ✗L7 дешевле L4 по ресурсам, потому что не разбирает пакеты
- ✓L4 — соединения по IP и портам, L7 — HTTP-запросы
- ✗L4 и L7 отличаются только поддержкой TLS, остальное одинаково
Что спросят дальше
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.