Модуль stream_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_addr}AAA значения хэша распределяются следующим образом:
значения от 0 до 21474835 (0,5%) дают .one;
значения от 21474836 до 107374180 (2%) дают .two;
значения от 107374181 до 4294967295 (все остальные) дают «» (пустую строку).