Короткий ответ
L4-балансировщик работает с TCP/UDP-соединениями, маршрутизируя трафик по IP и порту без анализа содержимого запроса; L7-балансировщик понимает протокол приложения (обычно HTTP/HTTPS) и может маршрутизировать по пути URL, заголовкам, cookie, а также терминировать TLS.
Как это работает подробнее
L4 просто пробрасывает пакеты/соединения на backend на основе сетевых данных, что даёт минимальную задержку; L7 терминирует HTTP-соединение, разбирает запрос и может принимать решения на основе его содержимого.
Пример кода
example.txt
L4 (Network Load Balancer): TCP:5432 -> db-proxy instances
L7 (Application Load Balancer):
/api/* -> target-group-api
/static/* -> target-group-staticЧто использовать на практике
- Рекомендация. L7 выбирают для веб-приложений и API, где нужна маршрутизация по пути/домену; L4 — для нагрузок, где важна минимальная задержка или используется не-HTTP протокол.
- Проверка. запрос на
/api/usersмаршрутизируется в api-группу, запрос на/static/logo.png— в static-группу, что видно в access-логах балансировщика по полю target group.
Подводные камни
- Риск. пытаться делать маршрутизацию по URL на L4-балансировщике, который не видит содержимое HTTP
- Риск. использовать L7 там, где протокол не HTTP
- Риск. не учитывать, что L7 добавляет дополнительную задержку обработки.