基础设施、云与 DevOps · 进阶

部署策略:蓝绿、金丝雀与渐进式

一句话: 好的部署是用「能多快回滚」来衡量的,而不是用「上线有多快」。

三种方法

蓝绿。两个完全相同的环境;把流量从一个切到另一个,回滚就是把切换反过来。简单,代价是短时间内需要双倍资源。

金丝雀。把一小部分流量导向新版本,按指标逐步扩大。最安全,但需要良好的监控。

滚动。逐步替换实例。常见的默认做法,但中间阶段会同时跑两个版本——这要求兼容性。

前提条件

一个真正会检查依赖、而不只是「进程还活着」的健康检查;向后兼容的表结构;以及把部署和启用解耦——先把代码以关闭状态发布出去,再用开关打开。

事先定好什么会触发回滚

触发自动回滚的错误率、响应时间和成功率阈值。故障期间做的决定,总是比一个平静早晨写下的决定更糟。

深入一层

在一切正常的时候演练回滚,至少每季度一次。从没被演练过的机制,恰好会在你需要它的时候失效,而且通常败在一个小细节上——一个权限、一个表结构版本,或者一个没清掉的缓存。