背景
单位的云办公相干零碎没有成熟的平滑公布计划,导致每一次公布都是间接公布,dll文件或配置文件的变更会引起站点的重启。
云办公零碎的常驻用户有10000+,即便短短半分多钟,也会收到一堆投诉。基于此,咱们梳理了一套平滑公布的计划。
实施方案
1、跟nginx代理服务器约定了一个健康检查的接口
2、通过接口返回的http状态码来让ngx是否分流用户申请(这个咱们单位的技术部那边有规范的做法)
3、依据提供的这个服务健康检查的接口:nginx判断只有某个实例的接口返回5xx的状态码,即把该实例下线(nginx不会把流量转发到该实例)
公布流程
目标次要是为了公布的时候可能平滑公布,所以QA与开发人员在公布得时候依照如下步骤操作:
1、关上零碎的nginx列表治理页面:[/publish/ngxconfig]
2、下架某一个实例(假如零碎集群有A、B、C个实例),比方A实例
3、查看是否下架胜利:这个就是咱们跟nginx约定的健康检查接口,失常在线状态下是200的statu,切离线后,这个接口返回的是401的statu。
在线状况:
离线状况:
4、察看监控站点,直至该实例下的Req、Connnectiuon流量都隐没
5、在该实例下进行版本公布
6、关上Fidller,host到待发布的实例,而后判断是否公布胜利(公布dll、配置文件时,IIS站点会短暂重启)
7、QA同学走查灰度的A实例服务器,保障它失常运行,如此循环,直到所有服务器都公布。
进一步AB测试的优化
平滑公布做完之后,的确给我带来很大的便当,不必每次公布都发布告,不重要的或者非功能性的内容公布了就是了。
然而用久了,客户量下来之后,又遇到一个问题,那就是每一次业务大变更,大型公布都是间接公布到生产,这样可能存在危险。设计师设计的性能,用户不肯定齐全承受,一旦上线新版本,收到一大堆的吐槽,都是用户呀,如果能在小范畴人群内进行灰度试用,实现安稳的适度和应用反馈之后,优化后再上到生产会更好一点。
所以这边须要思考和设计一套对立的技术计划,将来无论云办公还是其余的业务零碎,都能通过灰度公布在可指定的小范畴内先进行体验和性能验证。
基于下面的平滑,咱们在Nginx反向代理服务器上动心理,让nginx来帮咱们做ABTesting的计划。
以下是咱们尝试的几种计划
1、Nginx反向代理:去路IP策略
流程图:
步骤:
- 1、进入云办公零碎,进入Nginx反代服务器
- 2、Nginx读取去路IP的AB名单
- 3、依据IP AB名单进行流量转发(名单A走特定实例,名单B走云办公原有集群实例)
server {listen 80;server_name officecloud.com;access_log officecloud.com/logs main;ip_list 192.168.254.4,192.168.254.170set $group default;if ($remote_addr in iplist) {set $group ACluster;}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;index index.html index.htm;}}
优缺点:
- 1、配置简略,原资源平台的灰度降级就是依据IP名单来划分设计降级的
- 2、内部计算机很多都是非固定IP,这个适宜在公司内网实现,比方只是配置公司内网的IP。
2、Nginx反向代理:$.Cookies策略
流程图:
步骤
- 1、进入云办公零碎,进入Nginx反代服务器
- 2、Nginx读取Http申请的Cokie的version信息(也能够是别的key)
- 3、依据Key的版本来进行流量转发(比方Version1.1走特定集群,Version1.0走通用集群实例)
server {listen 80;server_name officecloud.com;access_log officecloud.com/logs main;ip_list 192.168.254.4,192.168.254.170set $group default;if ($http_cookie ~* "version=V1.0"){set default;}if ($http_cookie ~* "version=V1.1"){set $group ACluster;}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;index index.html index.htm;}}
优缺点:
- 1、配置简略,依据Nginx的 $COOKIE_version 属性来判断
- 2、绝对稳固,对须要凋谢名单的用户,在Cookie头部退出特定的版本即可,利用只有少许的开发量
- 3、首次拜访动态页面可能不会产生cookie
备注:这是团队内认为最好的Nginx代理计划,同理,User-Agent和Header都能够做此种类型的判断,然而Header须要侵入底层HttpRequest去业务增加,不倡议。
3、AB集群+业务代理形式
流程图:
步骤:
- 1、进入云办公零碎,两种形式进入零碎,一种是登录页登录:~/login ,一种是default页面带uckey登录:~/default?usertoken=#usertoken#
- 2、登录的时候和usertoken传入的时候进去 路由代理模块,进行用户信息校验,依据不同的人员和部门(人员和部门配置归属AB名单)分流到两个不同的AB集群
- 3、依据转发跳到具体的实例集群域名下(能够配置AB集群领有不同域名,更容易辨别)
优缺点
- 1、与Nginx剥离,不必依赖公司的通用平台和技术部的实现
- 2、须要申请AB集群,AB集群领有不同的域名。
- 3、如果是前后端拆散状况下,须要保障动态站点和服务站点均申请AB集群
- 4、所有入口须要对立做代理,有肯定的开发量
目前手上2个零碎曾经依据该计划实现了。
作者:翁智华
出处:cnblogs.com/wzh2010/p/13458723.html