Что произойдет, если тяжелые запросы будут прилетать на один хост, а легкие на другой?

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

Ответ

Возникнет дисбаланс нагрузки, что приведет к:

  • Перегрузке одного хоста: высокий CPU/память, увеличение latency, возможные таймауты и ошибки 5xx.
  • Недогрузке другого хоста: неэффективное использование ресурсов.
  • Деградации общего SLA: система будет работать на пределе возможностей одного узла.

Решение на уровне балансировщика:

  1. Алгоритм least_connections (Nginx/HAProxy): направляет запрос на сервер с наименьшим количеством активных соединений.

    upstream backend {
        least_conn;
        server backend1:8080;
        server backend2:8080;
    }
  2. Алгоритм weighted с метриками: можно интегрировать балансировщик с системой мониторинга (Prometheus) и динамически менять веса на основе загрузки CPU.

  3. Очереди задач: для длительных операций (генерация отчетов, обработка видео) я использовал RabbitMQ/Kafka. Запрос попадает в очередь, а воркеры берут задачи по мере готовности, что выравнивает нагрузку.

  4. Circuit breaker и health checks: балансировщик автоматически исключает перегруженные ноды, если они начинают отвечать с ошибками или замедлением.