WS分享12-浅谈灰度服务实现

本文探讨了在大规模仓储或门店系统中如何实施灰度发布以降低上线风险。通过网关反向代理或终端直接获取灰度API地址实现终端访问灰度服务。灰度服务之间的交互依赖于配置读取,确保灰度服务只访问灰度服务。文章还介绍了两种灰度服务发布流水线方案,包括不增加发布节点和增加发布节点的方法。

如果这篇文章对您有些用处,请点赞告诉我O(∩_∩)O

假设我们正在开发的是一个仓储系统,对应上十个仓库,或一个门店系统,对应上百家门店。

新版本上线,结果因为一个BUG,导致所有门店或仓库上千名员工“down机",这恐怕是领导最不愿意看到的。

控制上线风险,需要的不仅仅是一个完整的测试流程,更需要一个试用的过程,让某些门店先试用起来。

同一时间某个门店使用的新版本服务就是灰度服务,其他门店使用的稳定版本服务就是正式服务。

注:这里谈论的不是APP的版本切换,是服务的切换。

一、终端如何访问灰度服务

1、网关反向代理

由网关反向代理并路由到灰度服务,终端对灰度服务无感,统一调用网关地址。

2、下发地址直连

终端登录后,如果是灰度门店,调用下发API服务获取所有灰度API地址。终端直连灰度服务。

二、灰度服务之间访问

上文提到灰度服务只能访问灰度服务,正式服务只能访问正式服务,我们依靠读取不同配置实现。

假设所有灰度服务机器名中都包含-x,

如:store-api-x01.idc1.xy,store-api-x02.idc1.xy 对应域名为store-api-x.idc1.xy

store-service-x01.idc1.xy,store-service-x02.idc1.xy对应域名为store-service-x.idc1.xy

上层灰度服务store-api访问下层store-service服务的方式,按照接口调用方式分为两种:

1、使用HTTP接口,服务域名以及URL由代码控制,可以修改。

(1)在上层服务store-api中将下层服务的域名写入配置文件。

domain.store-service-a=http://store-service-a.idc1.xy domain.store-service-x=http://store-service-x.idc1.xy

(2)当调用下层服务接口时,根据当前机器名中是否带有-x,确定自己是否为灰度服务器,如果是,则获取配置中对应的灰度服务域名调用,否则调用正式服务。

String local = InetAddress.getLocalHost().getHostName() //获取机器名

2、使用类似注册中心,服务域名以配置属性形式启动时注入,不易更改。

(1)在上层服务store-api中将下层服务的组名写入配置文件。

group.store-service-a=store-service-a

group.store-service-x=store-service-x

(2)使用SpringEL的静态方法调用方式,动态注入。

#{T(com.xy.storeAPI.config.GreyConfig).getGroupName()}

(3)静态方法获取域名

在com.xy.storeAPI.config.GreyConfig的静态方法getGroupName中,根据当前机器名中是否带有-x,读取配置文件中灰度或正式组名。

三、灰度服务发布流水线

1、不增加发布节点,适合现有流水线改造

(1)一次同步,分开启动

打war包 -> 发布BETA -> BETA测试 -> PREVIEW测试 -> 同时同步war包到灰度和正式ONLINE -> 重启灰度ONLINE -> 灰度使用没有问题 -> 重启正式ONLINE

 

(2)两次同步

打war包 -> 发布BETA -> BETA测试 -> PREVIEW测试 -> 从PREVIEW环境先同步war包到灰度ONLINE -> 灰度使用没有问题 -> 再从PREVIEW环境同步war包到正式ONLINE

2、增加发布节点,适合新建流水线

 

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值