NGINX系列(四) NGINX流量按比例分流实践
NGINX系列(四) NGINX流量按比例分流实践
1 | 作者:李晓辉 |
流量分流的A/B测试基本概念
A/B测试(也称为拆分测试或桶测试)是一种实验方法,主要是将客户端的请求按百分比分发到不同服务器上,用于比较两个或多个版本的某个变量,以确定哪个版本表现更好。这种方法通常应用于产品开发和数字营销领域。以下是A/B测试的关键要点:
目标设定:确定测试的目标,例如增加点击率、提高转化率或优化用户体验。
版本创建:创建不同版本的测试变量(例如网站页面、广告或按钮)。一个版本通常被称为“版本A”(控制组),另一个版本被称为“版本B”(实验组)。
用户分流:将用户随机分配到不同版本中,以确保测试结果的统计可靠性和公平性。通常会使用如上示例中的流量分配工具来完成这一步。
数据收集:在测试期间收集用户行为数据,如点击次数、页面停留时间和转化次数。
数据分析:对比各版本的性能,分析哪个版本在达到预定目标方面表现更佳。
实施改进:根据测试结果,实施性能更好的版本,从而优化产品或营销策略。
A/B测试的优点在于它可以基于真实用户行为提供量化的决策依据,从而提升产品和营销效果。
环境介绍
操作系统 | IP地址 | 主机名 | NGINX版本 | 角色 |
---|---|---|---|---|
Rocky9.4 | 192.168.8.3 | loadbalance.xiaohui.cn | 1.26.2 | 负载均衡 |
Rocky9.4 | 192.168.8.4 | web1.xiaohui.cn | 1.26.2 | 普通业务服务器 |
Rocky9.4 | 192.168.8.5 | web2.xiaohui.cn | 1.26.2 | 普通业务服务器 |
环境架构图
在这个例子中,loadbalance.xiaohui.cn
是负责流量分配的NGINX服务器,它的IP地址是 192.168.8.3
。流量通过NGINX分配到两个业务服务器:
web1.xiaohui.cn
(IP:192.168.8.4
),接收20%的流量。web2.xiaohui.cn
(IP:192.168.8.5
),接收80%的流量。
1 | +------------------------+ |
准备hosts文件
这一步,需要在所有机器上完成准备,以便于大家都能用名称互相解析和访问
1 | cat > /etc/hosts <<EOF |
准备后端服务器
在web1和web2上安装并启动nginx服务之后,添加以下配置文件准备后端服务
1 | cat > /etc/nginx/conf.d/static.conf <<EOF |
在web1上创建页面
1 | echo web1 page > /usr/share/nginx/html/index.html |
在web2上创建页面
1 | echo web2 page > /usr/share/nginx/html/index.html |
配置NGINX分流配置文件
通过这个配置,NGINX会根据客户端IP地址,将流量按20%和80%的比例分配到两台业务服务器,实现简单的A/B测试。
1 | cat > /etc/nginx/conf.d/split.conf <<'EOF' |
这个配置文件用于在NGINX中设置A/B测试,具体如下:
- split_clients 模块:根据客户端IP地址(
$remote_addr
)将流量分配到不同的上游组。在这个配置中,20%的流量分配到first
组,80%的流量分配到second
组。如果未匹配到分配规则,默认值为空(""
)。 - upstream 块:定义了两个上游组,分别对应两台业务服务器:
first
组对应192.168.8.4:80
second
组对应192.168.8.5:80
- server 块:定义了一个监听
80
端口的服务器,域名为loadbalance.xiaohui.cn
。当请求到达这个服务器时,将根据split_clients
模块的结果,将请求转发到相应的上游组。
给nginx提供一个默认页用于和其他服务器区分
1 | echo default web site > /usr/share/nginx/html/index.html |
测试分流效果
如果你测试的效果不好,主要是因为样本少的原因,你可以手工修改配置文件中的比例,然后再测试
1 | [root@lxhhost ~]# curl http://loadbalance.xiaohui.cn |
发现不同的主流去访问nginx的时候,已经分流成功了。