Ответ
L7 балансировщик (балансировщик прикладного уровня) работает на уровне приложений (например, HTTP/HTTPS). Он распределяет трафик на основе детального анализа содержимого запросов, что позволяет принимать более "умные" решения о маршрутизации.
Преимущества и возможности:
- Маршрутизация на основе содержимого: Распределение запросов по URL-пути (
/api
,/static
), заголовкам HTTP, методам (GET/POST) или параметрам запроса. - Sticky-сессии (Session Affinity): Направление запросов от одного пользователя всегда на один и тот же сервер, что важно для приложений, хранящих состояние на сервере (хотя это и не лучшая практика).
- A/B тестирование и канареечные релизы: Возможность направлять часть трафика на новую версию приложения для тестирования.
- SSL/TLS терминация: Расшифровка HTTPS-трафика на балансировщике, что снижает нагрузку на бэкенд-серверы и упрощает управление сертификатами.
- Кэширование: Кэширование статического контента для ускорения отдачи.
- Web Application Firewall (WAF): Защита от распространенных веб-атак.
- Сжатие (Gzip) и оптимизация: Сжатие ответов для уменьшения объема передаваемых данных.
Примеры L7 балансировщиков: Nginx, HAProxy, Envoy, AWS Application Load Balancer (ALB), Google Cloud HTTP(S) Load Balancer.
Пример конфига Nginx для L7 балансировки (маршрутизация по пути):
upstream backend_api {
server app1:8080;
server app2:8080;
}
upstream backend_static {
server static1:80;
server static2:80;
}
server {
listen 80;
location /api {
proxy_pass http://backend_api;
}
location /static {
proxy_pass http://backend_static;
}
location / {
proxy_pass http://backend_api; # Default route
}
}
В отличие от L3/L4, L7 балансировщик "понимает" протокол HTTP, что позволяет ему принимать более сложные и гибкие решения о маршрутизации и предоставлять дополнительные функции безопасности и оптимизации.