← 中文资源

简体中文版本

可回退的蓝绿发布

运行两套相同环境,先把新版本部署到空闲颜色并验证,再原子切换流量,同时保留经过测试的回滚路径。

阅读英文原文

两套环境,一个切换点

蓝绿发布把发布与暴露分开。新版本部署在不接收生产流量的环境中,通过验证后切换路由;出现问题就切回。旧版本在回滚窗口内保持热备,使恢复成为一次路由决策,而不是重新构建。

upstream app {
  server 10.0.1.10:3000;  # blue
  # server 10.0.2.20:3000; # green
}

修改活跃 upstream 并重载代理只是其中一种方式;托管负载均衡器、服务网格或 DNS 权重也能提供原子切换。除非有意做金丝雀,否则不要逐步切换。蓝绿的价值在于干净、可逆的切换。

数据库兼容是难点

回滚窗口内两套颜色都可能服务流量。删除列或改变类型的迁移会立刻破坏旧版本。应采用扩展-收缩:先增加新结构,部署同时写两种形状的代码,切换读取,再在后续版本删除旧结构。无法兼容的迁移必须把数据恢复纳入回滚计划,这更慢也更危险。

切换前后都要验证

切换前对空闲颜色做健康检查和冒烟测试,切换后比较相同指标。绿色健康检查只证明进程启动;冒烟测试应使用真实依赖走关键用户路径。回滚窗口内保留旧颜色的日志和指标,便于比较。