Зачем нужен L7 балансер

Ответ

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, что позволяет ему принимать более сложные и гибкие решения о маршрутизации и предоставлять дополнительные функции безопасности и оптимизации.