这篇文章主要介绍如何使用Nginx实现灰度发布,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
灰度发布是指在黑与白之间,<强>能够平滑过渡的一种发布方式.AB测试就是一种灰度发布方式>强,让一部分用户继续用,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现,调整问题,以保证其影响度。
灰度发布常见一般有三种方式:
- <李>
Nginx + LUA方式
李> <李>根据饼干实现灰度发布
李> <李>根据来路IP实现灰度发布
李>本文主要将讲解根据饼干和来路IP这两种方式实现简单的灰度发布,Nginx + LUA这种方式涉及内容太多就不再本文展开了。
A/B测试流程
<强> Nginx根据饼干实现灰度发布强>
根据饼干查询饼干键为版本的值,如果该Cookie值为V1则转发到hilinux_01,为V2则转发到hilinux_02.Cookie值都不匹配的情况下默认走hilinux_01所对应的服务器。
两台服务器分别定义为:
- <李>
hilinux_01 李192.168.1.100:8080
> <李>hilinux_02 李192.168.1.200:8080
>用如果指令实现
upstream hilinux_01 { server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60; } upstream hilinux_02  { server 才能;192.168.1.200:8080  max_fails=1, fail_timeout=60; } upstream default  { server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60; } server { ,listen 80; ,server_name www.hi-linux.com; ,access_log 日志/www.hi-linux.com.log 主要; # match 饼干 ,set group 美元;“default"; if 才能;(http_cookie 美元;~ *,“版本=V1") { ,,,set group 美元;hilinux_01; ,,} if 才能;(http_cookie 美元;~ *,“版本=V2") { ,,,set group 美元;hilinux_02; ,,} ,位置/,{,,,,,,,,,,, proxy_pass 才能;http://$组; ,,proxy_set_header Host ,,,,,,主机美元; ,,proxy_set_header X-Real-IP ,,, remote_addr美元; ,,proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元; index 才能index.html 你可以; ,} 以前,}><强>用地图指令实现强>
在Nginx里面配置一个映射,<代码> COOKIE_version美元可以解析出饼干里面字的版本段> 代码。美元集团是一个变量,{}里面是映射规则。
如果一个版本为V1的用户来访问,美元集团就等于hilinux_01。在服务器里面使用就会代理到http://hilinux_01上.version为V2的用户来访问,美元集团就等于hilinux_02。在服务器里面使用就会代理到http://hilinux_02上.Cookie值都不匹配的情况下默认走hilinux_01所对应的服务器。
upstream hilinux_01 { server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60; } upstream hilinux_02  { server 才能;192.168.1.200:8080  max_fails=1, fail_timeout=60; } upstream default  { server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60; } map COOKIE_version 美元;group 美元;{ ~ * V1,美元hilinux_01; ~ * V2,美元hilinux_02; default 违约; } server { ,listen 80; ,server_name www.hi-linux.com; ,access_log 日志/www.hi-linux.com.log 主要; ,位置/,{,,,,,,,,,,, proxy_pass 才能;http://$组; ,,proxy_set_header Host ,,,,,,主机美元; ,,proxy_set_header X-Real-IP ,,, remote_addr美元; ,,proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元; index 才能index.html 你可以; ,} 以前,}><强> Nginx根据来路IP实现灰度发布强>
如果是内部IP, <强>则反向代理到hilinux_02(预发布环境);>强如果不是则反向代理到hilinux_01(生产环境)。
upstream hilinux_01 { server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60; } upstream hilinux_02  { server 才能;192.168.1.200:8080  max_fails=1, fail_timeout=60; } upstream default  { server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60; } server { ,listen 80; ,server_name www.hi-linux.com; ,access_log 日志/www.hi-linux.com.log 主要; ,set group 美元;违约; ,if (remote_addr 美元;~,“211.118.119.11"), { ,,set group 美元;hilinux_02; ,} 位置/,{,,,,,,,,,,, proxy_pass 才能;http://$组; ,,proxy_set_header Host ,,,,,,主机美元; ,,proxy_set_header X-Real-IP ,,, remote_addr美元; ,,proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元; index 才能index.html 你可以; ,} null null null null null null null null null null null null null null如何使用Nginx实现灰度发布