灰度发布

一.灰度发布概念
     灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。
注释:矿井中的金丝雀
17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。
灰度发布结构图如下:
 
二.灰度发度实现流程
  • 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。
  • 从负载均衡列表中移除掉“金丝雀”服务器。
  • 升级“金丝雀”应用(排掉原有流量并进行部署)。
  • 对应用进行自动化测试。
  • 将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。
  • 如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚)
 
三.如何实现灰度发布
原理:nginx 根据来路IP实现灰度发布
如果是内部IP,则反向代理到pre_tanlu_flow(预发布环境);如果不是则反向代理到prod_tanlu_flow(生产环境)
upstream prod_tanlu_flow {
    server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}
upstream pre_tanlu_flow {
    server 192.168.1.200:8080 max_fails=1 fail_timeout=60;
}
server {
  listen 80;
  server_name  www.test.com;
  access_log  logs/www.test.com.log  main;
  set $group prod_tanlu_flow;
  if ($remote_addr ~ "1.1.1.1") {
      set $group pre_tanlu_flow;
  }
 
location / {                       
    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;
  }
}
 
posted @ 2018-12-25 15:09  人生是一场修行  阅读(687)  评论(0编辑  收藏  举报