Что такое сетевой балансировщик нагрузки (network balancer)?

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

Ответ

Сетевой балансировщик нагрузки — это устройство или сервис, который распределяет входящий сетевой трафик между несколькими серверами (бэкендами) для повышения доступности, отказоустойчивости и производительности приложения.

Основные типы балансировщиков:

  • L4 (Transport Layer): Работает на транспортном уровне модели OSI (TCP/UDP). Балансирует трафик на основе IP-адресов и портов. Быстрее, но не анализирует содержимое запросов.

    • Примеры: AWS Network Load Balancer (NLB), HAProxy в режиме TCP, MetalLB.
    • Использование: Для базовых сервисов, баз данных, игровых серверов, где важна низкая задержка.
  • L7 (Application Layer): Работает на прикладном уровне (HTTP/HTTPS, gRPC). Может анализировать содержимое запросов (заголовки, URL, cookies) для принятия решений о маршрутизации.

    • Примеры: NGINX, AWS Application Load Balancer (ALB), Traefik.
    • Использование: Для веб-приложений, микросервисов, когда нужна маршрутизация на основе пути (/api/, /static/) или домена.

Ключевые функции и практика:

  1. Health Checks: Балансировщик регулярно проверяет состояние бэкенд-серверов и исключает нерабочие из пула.

    # Пример health check в NGINX
    upstream backend {
        server backend1:80 max_fails=3 fail_timeout=30s;
        server backend2:80 max_fails=3 fail_timeout=30s;
    }
  2. Алгоритмы балансировки:

    • round-robin (по умолчанию) — по очереди.
    • least_conn — серверу с наименьшим числом подключений.
    • ip_hash — для sticky sessions (клиент всегда попадает на один сервер).
  3. SSL/TLS Termination: Балансировщик L7 может расшифровывать HTTPS-трафик, снимая нагрузку с бэкенд-серверов.

  4. Автомасштабирование: В облачных средах (AWS, GCP) балансировщики интегрируются с группами автомасштабирования (Auto Scaling Groups), автоматически добавляя или удаляя серверы под нагрузкой.