静态配置
1.功能说明
开源nginx提供了一个流量配比的模块split_clients,但是该模块是根据指定的一个变量值(如客户端ip, url 中的参数等),然后计算Hash 值, 然后根据计算的值在 0 - 2^32-1 的位置来进行流量配比, 无法做到根据请求的数量做概率分布。
Split Clients 2 模块提供流量配比,是根据概率进行分布, 当访问样本足够大的情况下,与设置的比例基本达到一致, 通过该模块的动态配置,可以实现蓝绿发布(配置比例为 0%, 及 100%)
Split Clients 2 模块提供了两种方式来进行流量配比:
- 静态配置方式:通过静态配置文件实现不同流量配比,分配的百分比,已经配置好,可以在配置文件中进行修改,但需要重新reload才能生效
- 动态配置方式:通过声明式API实现动态修改流量配比
2.依赖模块
load_module modules/njt_http_split_clients_2_module.so;
3.指令说明
配置指令:
语法: split_clients_2 $variable { … };
默认值:
允许配置位置: http
配置样例:
split_clients_2 $backend {
10% backend1;
* backend2;
}
配置补充说明:
- 静态配置百分比修改后,需要reload才能生效。
- 百分比一行结束后,如果缺少分号,会导致下一行配比不生效。注意不能缺少分号。
- 配比分流upstream的数量,限制只能配置两个。
4.配置示例
worker_processes 1;
error_log logs/error.log info;
load_module modules/njt_http_split_clients_2_module.so;
helper broker modules/njt_helper_broker_module.so conf/mqtt.conf;
helper broker modules/njt_helper_ctrl_module.so conf/njet_ctrl.conf;
events {
worker_connections 1024;
}
http{
dyn_kv_conf conf/iot.conf;
split_clients_2 $backend {
10% backend1;
* backend2;
}
upstream backend1 {
server 127.0.0.1:18080;
}
upstream backend2 {
server 127.0.0.1:18081;
}
server {
listen 18888;
location / {
proxy_pass http://${backend};
}
}
server {
listen 18080;
location / {
return 200 "welcome to 18080 http server\n";
}
}
server {
listen 18081;
location / {
return 200 "welcome to 18081 http server\n";
}
}
}
cluster_name helper;
node_name node1;
可以通过如下脚本实现模拟大样本的流量配比验证。如配比为50%, 请求100次,会在40多到50多区间进行配比,如下。