在项目迭代的过程中,不可避免需要上线。上线对应着部署,或者重新部署;部署对应着修改,修改则意味着风险。
灰度发布是指用平滑过渡的方式进行发布。灰度发布可以保证整体系统的稳定,在初始发布的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的蓝绿发布、A/B测试、金丝雀发布等是灰度发布的不同方式。
1.蓝绿发布
蓝绿发布是指不停止老版本,部署新版本,然后进行测试,确认没有问题之后,再将流量切到新版本,然后老版本同时也升级到新版本。这样做的好处是无需停机,并且风险较小。

图4-21 蓝绿发布示例
蓝绿发布的步骤大致如下:
1)部署版本1的应用(一开始的状态),所有外部请求的流量都打到这个版本上。
2)部署版本2的应用,版本2的代码与版本1不同(新功能、Bug修复等)。
3)将流量从版本1切换到版本2,即流量从v1:v2为100:0,切换为0:100。
4)如果版本2存在问题,需要回滚到版本1,进行流量切换回v1:v2为100:0。
2.A/B测试
A/B测试是用来测试应用功能表现的一种方法,例如可用性、受欢迎程度、可见性等。A/B测试通常会针对特定的用户群体进行,其目的在于通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信该结论在推广到全部流量可信;这与蓝绿发布的目的不尽相同,蓝绿发布主要用于安全稳定地发布新版本应用。

图4-22 A/B测试示例
3.金丝雀发布
金丝雀发布是指通过让一小部分用户流量引入的新版本进行测试,如果一切顺利,则可以增加(可能逐渐增加)百分比,逐步替换旧版本。如在过程中出现任何问题,则可以中止并回滚到旧版本。最简单的方式是随机选择百分比请求到金丝雀版本,但在更复杂的方案下,则可以基于请求的内容、特定范围的用户或其他属性等。

图4-23 金丝雀发布示例