Модуль http_upstream_feedback

Модуль 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. Он динамически корректирует решения по балансировке нагрузки, умножая вес каждого проксируемого сервера на среднее значение обратной связи, которое меняется с течением времени в зависимости от значения переменной и подчиняется необязательному условию.

Могут быть заданы следующие параметры:

переменная

Переменная, из которой берется значение обратной связи. Она должна представлять собой метрику производительности или состояния; предполагается, что сервер передает ее в заголовках или иным образом.

Значение оценивается при каждом ответе от сервера и учитывается в скользящем среднем согласно настройкам inverse и factor.

inverse

Если параметр задан, значение обратной связи интерпретируется наоборот: более низкие значения указывают на лучшую производительность.

factor

Коэффициент, по которому значение обратной связи учитывается при расчете среднего. Допустимые значения: целые числа от 0 до 100. По умолчанию — 90.

Среднее рассчитывается по формуле экспоненциального сглаживания.

Чем больше коэффициент, тем меньше новые значения влияют на среднее; если указать 90, то будет взято 90 % от предыдущего значения и лишь 10 % от нового.

account

Указывает условную переменную, которая контролирует, какие ответы учитываются при расчете. Среднее значение обновляется с учетом значения обратной связи из ответа, только если условная переменная этого ответа не равна "" или "0".

Примечание

По умолчанию ответы в ходе активных проверок не включаются в расчет; комбинация переменной $upstream_probe с account позволяет включить эти ответы или даже исключить все остальное.

Пример:

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 или ответы на обычные клиентские запросы.