天天看点

金丝雀发布(CanaryRelease),又叫作灰度发布,是一种将流量逐渐转移到新版本的部署方式,以便出现问题后控制受影

作者:从头开始自学java

金丝雀发布(Canary Release),又叫作灰度发布,是一种将流量逐渐转移到新版本的部署方式,以便出现问题后控制受影响范围,降低风险。和蓝绿部署相比,它是以渐进的方式进行流量转移,相对更安全。

金丝雀发布的具体流程如下。首先将系统新版本以子集的方式部署在架构中,此时没有任何流量导入

在新版本准备完毕后,将一小部分用户流量转移过来,比如图5-5中所示的5%。有多种策略来确定转移哪些用户,比如随机选择、用户ID尾号、公司内部用户或者地理位置等。

在新版本经过测试没有问题后,就可以把全部的流量都切换到新版本上

金丝雀发布的名称来源于一个典故。在17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感,空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;当瓦斯含量超过一定限度时,人类毫无察觉,但金丝雀却会毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。金丝雀发布也是基于这样的考虑,先用少量流量进行新版本的检验。

金丝雀发布的优点是可以利用真实的线上环境和用户数据进行测试。在很多情况下一些隐蔽的Bug很难在开发环境中被发现,只有在线上环境中才能暴露出来,因此能利用真实环境和数据测试是发现疑难杂症的重要手段。另外,当发现问题时也可以很安全地回滚,并控制受影响的范围。它的缺点是需要在同一时间点管理多个版本(通常是两个,也可以同时部署更多版本)。另一个案例是,当发布的是客户端版本(如手机的App)时,就很难控制终端用户去更新版本,此时如果不同的客户端版本和后端进行通信,则需要进行向后兼容。

金丝雀发布经常和A/B测试一起使用,只不过侧重点不同。金丝雀发布的最终目的是发布新版本并完全替代旧版本,而A/B测试的主要目的是收集数据,比较两个版本的优劣。

金丝雀发布(CanaryRelease),又叫作灰度发布,是一种将流量逐渐转移到新版本的部署方式,以便出现问题后控制受影
金丝雀发布(CanaryRelease),又叫作灰度发布,是一种将流量逐渐转移到新版本的部署方式,以便出现问题后控制受影
金丝雀发布(CanaryRelease),又叫作灰度发布,是一种将流量逐渐转移到新版本的部署方式,以便出现问题后控制受影

继续阅读