Split Clients#

Модуль генерирует переменные для A/B-тестирования, канареечных релизов и других сценариев, которые направляют определенный процент клиентов на один сервер или конфигурацию, а остальных — куда-то еще.

Пример конфигурации#

stream {
    # ...
    split_clients "${remote_addr}AAA" $upstream {
                  0.5%                feature_test1;
                  2.0%                feature_test2;
                  *                   production;
    }

    server {
        # ...
        proxy_pass $upstream;
    }
}

Директивы#

split_clients#

Синтаксис

split_clients строка $переменная { ... }

По умолчанию

Контекст

stream

Создает $переменную, хэшируя строку; переменные в строке подставляются, результат хэшируется, затем по значению хэша выбирается строковое значение $переменной.

Функция хэширования использует MurmurHash2 (32 бит), и весь диапазон ее значений (с 0 по 4294967295) сопоставляется с корзинами в порядке появления; процентные величины определяют размер корзин. В конце может стоять метасимвол (*); хэши, не попавшие в другие корзины, сопоставляются с приданным ему значением.

Пример:

split_clients "${remote_addr}AAA" $variant {
               0.5%               .one;
               2.0%               .two;
               *                  "";
}

Здесь после подстановки в строке $remote_addrAAA значения хэша распределяются следующим образом:

  • значения от 0 до 21474835 (0,5%) дают .one;

  • значения от 21474836 до 107374180 (2%) дают .two;

  • значения от 107374181 до 4294967295 (все остальные) дают "" (пустую строку).