数通畅联主打SOA综合应用集成、数据治理分析产品和解决方案,公司以前不管是集成开发项目、还是开发集成项目,项目中的升级产品都是人工手动升级,没有一个渐进的过程都是直接切换。这种方式没有灰度处理,如果代码存在问题影响面就会很大,在云平台模式引入后,后续项目中的产品升级都将支持灰度升级方式,做到更优雅更平衡的升级。本文档将介绍如何配置灰度升级。
1名词解释
灰度期:灰度发布从开始到结束的这一段时间,被称为灰度期。
Nginx:Nginx不仅是一个十分轻量级的HTTP服务器,也是一个高性能的HTTP和反向代理服务器,同时还是一个IMAP/POP3/SMTP代理服务器。目前很多国内网站采用Nginx作为Web服务器,如国内知名的新浪、163、腾讯、Discuz、豆瓣等。本次灰度升级就是通过调整Nginx配置文件的方式实现。
2灰度作用
(2)让用户参与产品测试,加强与用户的互动;
(3)降低产品升级所影响的用户范围,降低升级风险,避免升级事故。
3升级方案
实现思路
在代码中
一套线上环境,在代码中做开关,对于不同的用户走不同的逻辑。
优点:灵活,粒度细;一套代码(环境)运维成本低;
缺点:灰度逻辑侵入代码。
在接入层
多套(隔离的)线上环境,接入层针对不同用户转发到不同的环境中。
优点:无需或少量侵入代码,风险小;
缺点:多套线上环境,运维成本高。
接入模式
(2)在网关层实现(spring-cloud-zuul);
(3)dubbo的灰度,项目中如果使用dubbo,有可能会需要dubbo服务的灰度实现。
1整体框架

2项目架构
现有与云平台正式

说明:
(1)用户A登录服务,根据ip网段分配到现有环境;
(2)用户B登录服务,根据ip网段分配到云平台正式环境。
云平台发布与正式

说明:
(1)用户A登录服务,根据ip网段分配到云平台发布环境;
(2)用户B登录服务,根据ip网段分配到云平台正式环境。
1现有与云平台正式
关键配置如下:
定义两个upsteamcluster,一套配置为原有CentOS部署的运行环境,另一套配置为云平台部署的运行环境。

在Server监听的过程中按照IP段进行配置判断,划分IP区间,根据IP区间实现某一段IP访问的为原有CentOS环境,另一端访问的IP区间则为云平台部署环境。

说明:
(1)set $group cluster_classic:设置proxy_pass默认值为“cluster_classic”,现有环境;
(2)set $environmentType "classic:设置环境类型默认值为"classic",现有环境;
(3)set $ingressPath "/":设置proxy_cookie_path路径默认值为“/”,cookie地址保持不变;
(4)if ($remote_addr ~ "18.0.9.*"):根据ip是否在这个网段,如果在就走云平台正式环境;
(5)set $group cluster_cloud:proxy_pass重新赋值为“cluster_cloud”,云平台正式环境;
(6)set $environmentType "cloud_product":将环境类型重新设置为"cloud_product",云平台正式环境;
(7)if ($environmentType = "cloud_product"):判断是否是云平台正式环境;
(8)set $ingressPath "/S01/Product/ESB/":设置proxy_cookie_path路径;
(9)rewrite (/|$)(.*) $ingressPath$2 break:设置重定向路径;
(10)proxy_pass http://$group:proxy_pass引用$group;
(11)proxy_cookie_path $ingressPath :proxy_cookie_path引用$ingressPath。
2云平台发布与正式

说明:
(1)set $ingressPath "/S01/Release/ESB/":设置proxy_cookie_path路径默认值发布路径;
(2)if ($remote_addr ~ "18.0.8.*"):根据ip是否在这个网段选择访问环境,如果在就走云平台正式环境;
(3)set $ingressPath "/S01/Product/ESB/":proxy_cookie_path路径重新赋值为正式路径;
(4)rewrite (/|$)(.*) $ingressPath$2 break:设置重定向路径;
(5)proxy_cookie_path $ingressPath /:proxy_cookie_path引用$ingressPath。
3传统与云区别说明
(1)定义upstream的访问地址不同,一个是云平台部署地址,云平台地址为动态替换proxy_pass;另一个是现有CentOS部署环境地址,现有部署无需动态替换proxy_pass;
(2)云平台与现有部署环境中的proxy_pass引用upstream不同;proxy_cookie_path设置的地址不同,现有部署为“/”,不转换cookie路径,云平台需要转换为内部Ingress路径。
1能力欠缺
2知识收获
3个人总结
推荐阅读





