基于Istio的灰度发布架构方案实践之路

时间:2021-12-23 00:53:14

作者:京东物流 赵勇萍

1. 背景介绍

灰度发布,又名金丝雀发布,是指能够平滑过渡的一种发布方式。基于系统稳定性和快速业务迭代的综合考虑,业务应用开发团队采取了新版本服务灰度上线的方式,即新版本服务并非全量发布到线上环境,而是发布少数几个实例进行灰度验证,没有问题后再全量发布。在部分核心服务进行接口升级和逻辑迁移时,还会通过在业务逻辑代码中增加黑白名单或者流量百分比控制的方式,逐步将旧版本接口实现迁移至新版本接口实现。尤其是对于toB业务和SAAS类平台,很多情况需要根据租户或用户维度进行灰度控制,实现业务上的A/Best功能。

对于之前我们业务中实现的传统的灰度发布, 较好地权衡了服务稳定性和业务迭代效率,但仍存在以下问题:

a. 系统侵入性强,业务开发人员在服务接口中编码大量与业务逻辑无关的黑白名单或流量百分比控制代码。

b. 当新版本接口出现波动或异常,通常需要业务团队通过紧急修改代码和紧急发布,来更新黑白名单和流量百分比控制策略,时间较长,业务影响较大。

c. 调整黑白名单或流量控制百分比,需要业务团队发布代码或者接入动态配置中心,过程复杂、可复用性差、操作灵活性差.

d. 对于单体应用来说,灰度发布方案实现还算简单,但对于微服务应用,每次发布版本可能不是全部服务需要灰度发布,实现微服务灰度发布的原子维度控制,也是导致微服务框架下灰度方案不能很好落地的原因。

笔者实际业务项目(采灵通系统)采用的是微服务的架构设计,总计服务个数60+,技术底座采用K8s+Istio的服务治理方案。如果采用传统的灰度发布方案,每个服务上下游依赖过多,相对于传统的灰度发布方案,并不能很好满足业务诉求。因此,探索了一条基于Istio的服务流量治理方案下的灵活可配置的灰度发布方案。

2. 方案详情

先上一个方案简介图:

基于Istio的灰度发布架构方案实践之路