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

«Что такое балансировщик нагрузки (Load Balancer) и зачем он нужен с точки зрения тестирования?» — вопрос из категории Архитектура, который задают на 28% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые аспекты для тестировщика:

  1. Тестирование отказоустойчивости:

    • Проверка, что при падении одного из серверов балансировщик перенаправляет трафик на работающие инстансы (Health Checks).
    • Тестирование процедуры graceful shutdown (корректное исключение сервера из пула).
  2. Тестирование "липких" сессий (Sticky Sessions):

    • Если балансировщик настроен на привязку сессии пользователя к конкретному серверу, нужно убедиться, что состояние сессии (корзина покупок, данные формы) не теряется при последовательных запросах.
  3. Нагрузочное тестирование:

    • Балансировщик — ключевая точка приложения. Необходимо проверить, как он себя ведет под пиковой нагрузкой, не становится ли он узким местом (bottleneck).
    • Важно убедиться, что алгоритм распределения (Round Robin, Least Connections, IP Hash) работает корректно и нагрузка распределяется равномерно.

Пример сценария для тестирования Health Check:

# 1. Запускаем нагрузку на приложение
# 2. Имитируем падение одного из бэкенд-серверов (например, выключаем контейнер)
sudo docker stop backend-container-1

# 3. Продолжаем отправлять запросы и мониторим:
#    - Возвращаются ли успешные ответы (код 200)?
#    - Появляются ли ошибки 5xx? Если да, то как быстро балансировщик обнаружил сбой?
#    - Все ли запросы теперь идут на оставшиеся серверы?
# 4. Восстанавливаем сервер и проверяем, как балансировщик возвращает его в пул.

Инструменты для тестирования: JMeter, k6, Gatling (для создания нагрузки и анализа распределения), мониторинг (Prometheus, Grafana) для отслеживания метрик балансировщика (Nginx, HAProxy, AWS ALB).