Nginx 的 A/B 测试功能
Nginx 的有一个 ngx_http_split_clients_module 模块,可以用来实现 A/B 测试。
split_clients 使用方法
split_clients 指令的用途是根据设定条件设置变量的值,如下,定义了一个名为 selected_upstream 的变量:
split_clients "$date_gmt" $selected_upstream {
50% echo_upstream;
50% record_upstream;
}
第二个参数是 MurmurHash2 哈希算法的输入,可以使用 ngxin 变量,50% 是区间划分。上面的配置中,哈希输入是 date_gmt,变量 selected_upstream 的值 50% 的可能是 echo_upstream,50% 的可能是 record_upstream。
selected_upstream 的取值是按照指定配置变换的,可以用来实现一些特殊效果,例如下面的配置,请求会按照时间情况在两个 upstream(echo_upstream 和 record_upstream)之间分配。
upstream echo_upstream {
server 127.0.0.1:9090;
keepalive 1;
}
upstream record_upstream {
server 127.0.0.1:9091;
keepalive 1;
}
split_clients "$date_gmt" $selected_upstream {
50% echo_upstream;
50% record_upstream;
}
server {
listen 9000;
server_name echo.example;
keepalive_requests 1000;
keepalive_timeout 60s;
location / {
proxy_pass http://$selected_upstream;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}