Какие балансировщики нагрузки (load balancers) вы знаете?

«Какие балансировщики нагрузки (load balancers) вы знаете?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В своей практике я работал с несколькими типами балансировщиков нагрузки, выбирая их в зависимости от среды и требований.

Программные балансировщики (on-premise/self-hosted):

  • NGINX: Использую его часто как reverse proxy и балансировщик уровня приложений (L7). Он легковесный, хорошо конфигурируется. В конфигурации указываю методы балансировки (round-robin, least_conn, ip_hash) и health checks.
    upstream backend_servers {
        least_conn;
        server 10.0.1.10:8080 max_fails=3 fail_timeout=30s;
        server 10.0.1.11:8080 max_fails=3 fail_timeout=30s;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://backend_servers;
        }
    }
  • HAProxy: Выбираю для высоконагруженных TCP (L4) или HTTP-сервисов. Он предоставляет продвинутую статистику и гибкие алгоритмы балансировки. Настраиваю его для sticky sessions, когда это необходимо для stateful-приложений.
    backend web_backend
        balance roundrobin
        option httpchk GET /health
        server web1 192.168.1.10:80 check
        server web2 192.168.1.11:80 check

Облачные managed-решения:

  • AWS: Применял Application Load Balancer (ALB) для HTTP/HTTPS трафика с поддержкой правил на основе путей (path-based routing) и Elastic Load Balancer (ELB) для TCP/UDP. Их главный плюс — интеграция с Auto Scaling Groups и сервисами AWS.
  • Kubernetes Ingress Controllers: В кластерах k8s использовал Ingress на основе NGINX или Traefik. Traefik удобен тем, что автоматически обнаруживает новые сервисы и поды, что идеально для динамических сред.

Глобальные/GSLB:

  • Cloudflare Load Balancer: Настраивал для геораспределения трафика между несколькими дата-центрами, используя health checks и правила на основе геолокации.

Выбор всегда зависит от задачи: для простого веб-приложения часто хватает NGINX, для микросервисов в k8s — Ingress Controller, а для глобальной отказоустойчивости — облачные или DNS-балансировщики.