Модуль http_upstream_feedback
#
Модуль реализует механизм балансировки на основе обратной связи для http_upstream, используя указанную переменную для динамического пересчета весов серверов с учетом средних значений обратной связи, полученных в составе предыдущих запросов. Он также позволяет контролировать при помощи условия, какие запросы учитываются при расчете.
Пример конфигурации#
upstream backend {
zone backend 1m;
feedback $request_time inverse factor=80;
server backend1.example.com;
server backend2.example.com;
}
Директивы#
feedback (PRO)#
Added in version 1.6.0: PRO
- Syntax:
feedback
переменная [inverse] [factor=число] [account=условная_переменная];- Default:
—
- Context:
upstream
Включает механизм балансировки нагрузки на основе обратной связи
для контекста upstream
.
Он динамически корректирует решения по балансировке нагрузки,
умножая вес каждого проксируемого сервера на среднее значение обратной связи,
которое меняется с течением времени в зависимости от значения переменной
и подчиняется необязательному условию.
Могут быть заданы следующие параметры:
|
Переменная, из которой берется значение обратной связи. Она должна представлять собой метрику производительности или состояния; предполагается, что сервер передает ее в заголовках или иным образом. Значение оценивается при каждом ответе от сервера
и учитывается в скользящем среднем
согласно настройкам |
|
Если параметр задан, значение обратной связи интерпретируется наоборот: более низкие значения указывают на лучшую производительность. |
|
Коэффициент, по которому значение обратной связи учитывается
при расчете среднего.
Допустимые значения: целые числа от 0 до 100.
По умолчанию — Среднее рассчитывается по формуле экспоненциального сглаживания. Чем больше коэффициент, тем меньше новые значения влияют на среднее;
если указать |
|
Указывает условную переменную,
которая контролирует, какие ответы учитываются при расчете.
Среднее значение обновляется с учетом значения обратной связи из ответа,
только если условная переменная этого ответа
не равна Примечание По умолчанию ответы в ходе активных проверок
не включаются в расчет;
комбинация переменной $upstream_probe
с |
Пример:
upstream backend {
zone backend 1m;
feedback $feedback_value factor=80 account=$condition_value;
server backend1.example.com;
server backend2.example.com;
}
map $upstream_http_custom_score $feedback_value {
"high" 100;
"medium" 75;
"low" 50;
default 10;
}
map $upstream_probe $condition_value {
"high_priority" "1";
"low_priority" "0";
default "1";
}
Эта конфигурация категоризирует ответы серверов по уровням обратной связи
на основе определенных оценок из полей заголовков ответа,
а также добавляет условие на $upstream_probe,
чтобы учитывать только ответы от активной проверки high_priority
или ответы на обычные клиентские запросы.