least_conn

Директива 'least_conn' в NGINX выбирает сервер с наименьшим количеством активных соединений в группе upstream. — NGINX HTTP Core

least_conn
upstream
Синтаксисleast_conn;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core
Аргументыnone

Описание

Директива 'least_conn' используется в контексте 'upstream' для реализации метода балансировки нагрузки, который направляет входящие запросы на экземпляр сервера с наименьшим числом активных соединений. Такое поведение обеспечивает более равномерное распределение нагрузки между серверами, что особенно полезно в сценариях, где разные серверы могут иметь различную вычислительную мощность или при обработке запросов с разной интенсивностью использования ресурсов. Эта директива идеально подходит для приложений с переменным пользовательским спросом, предотвращая перегрузку одних серверов, пока другие остаются недогруженными. В отличие от round-robin или других методов, которые могут распределять запросы последовательно или случайным образом, 'least_conn' динамически оценивает текущее состояние каждого сервера в блоке upstream и выбирает сервер на основе числа активных соединений. Когда указана директива 'least_conn', NGINX не учитывает время ответа сервера или природу запросов, а просто отдаёт приоритет на основе текущей нагрузки, выраженной числом соединений. Это полезная стратегия для максимизации эффективности распределения ресурсов в веб-ферме, особенно при работе с долговременными соединениями или приложениями с сильно варьирующейся длительностью сессий.

Пример конфига

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

Убедитесь, что upstream-серверы надлежащим образом мониторятся на предмет состояния; если сервер недоступен или неисправен, он может не быть исключён из подсчёта соединений, что приведёт к неэффективному распределению нагрузки.

Неэффективно в сценариях, когда у всех серверов одинаковое количество соединений; следует учитывать другие факторы для более эффективного распределения нагрузки.