背景
目前我司云平台系统已经在线上运行了数月,目前正值需求繁多、bug修复、上线频繁的时期,也是整个云平台的阵痛期。由于系统已经上线,为了不影响生产环境,需要灰度发布
部署灰度机
线上已经在运行服务称为旧版本的服务,大多数生产请求还是走这个版本。
我们需要在一台特定的服务器上(这里称为灰度机)部署一个最新的,添加了新的需求或者是bug修复之类的版本。
需求
比如这次的新版本,对某个方法的逻辑进行了变更,我们需要针对指定的门店在生产上去测试这一个新的方法,比如会员服务的MemberUseCouponByCouponIdNewAction
,是一个会员核销代金券的接口方法。
环境
假设线上稳定版的服务部署节点为2个,IP地址分别为:
stable-app-1 192.168.10.1
stable-app-2 192.168.20.1
灰度机部署的新版本的服务节点1个,IP地址为:
gray-app-1 192.168.30.1
实现
指定的门店请求路由到灰度机,正常的,其余所有门店继续走旧版本的稳定服务。
cookie_storeId match 12345601 => ip"192.168.30.1"
otherwise => ~ip"192.168.30.1"
在发布新服务时,运维可以动态的调整灰度策略,逐步放量用户,使用新的版本的服务,直到系统完全稳定,再切换到新版本。
API版本变更灰度
由于我们的服务都是以微服务模式进行开发部署的。如果需要灰度的服务,API接口发生改变,那么其他服务去调用他时,因为要获取到他最新的元数据信息,才能够继续进行调用。那么我们需要对获取元数据的接口也要进行路由,让所有请求也要路由到灰度机上去。
method match "getServiceMetaData" => ip"192.168.30.1"
注意事项
当不需要继续灰度或者不需要路由规则时,一定要注意先撤销路由配置,让所有服务正常路由,然后再停止灰度机。
网友评论