1、概念
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
更详细的解释大家可以自行百度一下。
http://baike.baidu.com/link?url=KToM_9SSL7N71bNRoGojDcq4N6JaZBzn37N5406H1OqcUsvveC9yASbqCWIkVqu3x9_wIfyKok4dN646yhRH5Lw-QP9LT4b4YGMj_vqDA7-qDkP_ECjCFaixQzMY-BHW
2、目前实现的方式有三种
- nginx+lua:根据访问者ip地址区分,由于公司出口是一个ip地址,会出现访问网站要么都是老版,要么都是新版,采用这种方式并不适合;
- nginx:根据权重来分配,实现很简单,也可以尝试;
- nginx:根据cookie分流,灰度发布基于用户才更合理(本例子采用该种方式)。
3、前期准备
安装Nginx;
安装浏览器cookie插件(非必选)
插件下载地址:
http://www.editthiscookie.com/start/
测试的两台服务器分别为:
default 127.0.0.1:18080
test_1 127.0.0.1:18080
test_2 127.0.0.1:28080
需要监听的端口为:80,根据转发过来的cookie(约定为:test_version_code),对应的值来判断跳转,具体如下:
判断如果,test_version_code = t1 , 则跳转到 127.0.0.1:18080;
判断如果,test_version_code = t2 , 则跳转到 127.0.0.1:28080;
upstream test_1{
server 127.0.0.1:18080 max_fails=1 fail_timeout=60;
}
upstream test_2{
server 127.0.0.1:28080 max_fails=1 fail_timeout=60;
}
upstream default{
server 127.0.0.1:18080 max_fails=1 fail_timeout=60;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#match cookie
set $group "default";
if ( $http_cookie ~* "test_version_code=t1" ) {
set $group test_1;
}
if ( $http_cookie ~* "test_version_code=t2" ) {
set $group test_2;
}
location / {
root html;
index index.html index.htm;
#gray
proxy_pass http://$group;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
4、验证
打开谷歌浏览器cookie编辑插件,如下图:
我们验证一下是否设值cookie值正确,F12即可看到:
浏览器地址栏输入:http://172.20.15.122/index.jsp
结束。