Что такое балансировщик нагрузки (load balancer) и зачем он нужен?

«Что такое балансировщик нагрузки (load balancer) и зачем он нужен?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные функции и алгоритмы распределения:

  • Round Robin: Последовательное распределение запросов по списку серверов.
  • Least Connections: Направление запроса на сервер с наименьшим количеством активных соединений.
  • IP Hash: Распределение на основе хэша IP-адреса клиента (для сохранения сессии).

Типичная конфигурация с Nginx как программным балансировщиком для PHP-FPM пула:

http {
    upstream php_backend {
        least_conn; # Алгоритм балансировки
        server 10.0.1.10:9000; # PHP-FPM worker 1
        server 10.0.1.11:9000; # PHP-FPM worker 2
        server 10.0.1.12:9000 backup; # Резервный сервер
    }

    server {
        listen 80;
        location ~ .php$ {
            fastcgi_pass php_backend; # Передача запросов в upstream
            # ... остальные fastcgi параметры
        }
    }
}

Ключевые преимущества использования балансировщика:

  1. Масштабируемость: Легко добавить новый сервер в пул для обработки возросшей нагрузки.
  2. Отказоустойчивость: Балансировщик выполняет health checks и исключает не отвечающие серверы из ротации.
  3. SSL/TLS Termination: Может брать на себя расшифровку HTTPS-трафика, разгружая backend-серверы.
  4. Единая точка входа: Упрощает архитектуру для клиентов и управление DNS.

В облачных средах (AWS, GCP) часто используются управляемые балансировщики (ALB, NLB), которые автоматически масштабируются и интегрируются с группами виртуальных машин или контейнеров.