Что такое балансировка нагрузки?

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

Ответ

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

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

  • L4 (Transport Layer): Работает на уровне TCP/UDP. Принимает решение на основе IP-адресов и портов. Быстрый, но не анализирует содержимое запросов. Примеры: Nginx (stream-модуль), HAProxy в режиме TCP, AWS Network Load Balancer (NLB).
  • L7 (Application Layer): Работает на уровне HTTP/HTTPS. Может анализировать заголовки, URI, cookies и перенаправлять трафик на основе содержимого запроса. Позволяет реализовать более сложную логику маршрутизации. Примеры: Nginx (http-модуль), HAProxy в режиме HTTP, AWS Application Load Balancer (ALB), Traefik.

Распространенные алгоритмы балансировки:

  1. Round Robin: Запросы поочередно распределяются по серверам в списке.
  2. Least Connections: Новый запрос отправляется на сервер с наименьшим количеством активных соединений.
  3. IP Hash: Сервер для клиента определяется хэшем его IP-адреса, что обеспечивает сохранение сессии (sticky session).

Пример конфигурации балансировщика Nginx (L7):

http {
    upstream backend_servers {
        # Определяем группу бэкенд-серверов
        server 10.0.1.10:8080 weight=3; # Сервер с большим весом получит больше трафика
        server 10.0.1.11:8080;
        server 10.0.1.12:8080 backup;   # Резервный сервер (используется, если основные недоступны)
    }

    server {
        listen 80;
        server_name app.example.com;

        location / {
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

Ключевые преимущества:

  • Повышение доступности: При падении одного сервера трафик автоматически перенаправляется на работающие.
  • Горизонтальное масштабирование: Легко добавить новый сервер в пул для обработки возросшей нагрузки.
  • Управление трафиком: Возможность A/B-тестирования, канареечных релизов (canary releases) и обслуживания без простоя (zero-downtime deployment).