拆分客户端#
该模块用于 A/B 测试、金丝雀发布或其他需要将一定比例的客户端路由到一个服务器或配置的场景,同时将剩余部分引导到其他地方。
配置示例#
stream {
# ...
split_clients "${remote_addr}AAA" $upstream {
0.5% feature_test1;
2.0% feature_test2;
* production;
}
server {
# ...
proxy_pass $upstream;
}
}
指令#
split_clients#
通过对 string 进行哈希来创建一个 $variable; string 中的变量被替换, 结果被哈希, 然后哈希被映射到 $variable 的字符串值。
哈希函数使用
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(所有其他值)产生
""
(一个空字符串)