两套环境,一个切换点
蓝绿发布把发布与暴露分开。新版本部署在不接收生产流量的环境中,通过验证后切换路由;出现问题就切回。旧版本在回滚窗口内保持热备,使恢复成为一次路由决策,而不是重新构建。
upstream app {
server 10.0.1.10:3000; # blue
# server 10.0.2.20:3000; # green
}
修改活跃 upstream 并重载代理只是其中一种方式;托管负载均衡器、服务网格或 DNS 权重也能提供原子切换。除非有意做金丝雀,否则不要逐步切换。蓝绿的价值在于干净、可逆的切换。
数据库兼容是难点
回滚窗口内两套颜色都可能服务流量。删除列或改变类型的迁移会立刻破坏旧版本。应采用扩展-收缩:先增加新结构,部署同时写两种形状的代码,切换读取,再在后续版本删除旧结构。无法兼容的迁移必须把数据恢复纳入回滚计划,这更慢也更危险。
切换前后都要验证
切换前对空闲颜色做健康检查和冒烟测试,切换后比较相同指标。绿色健康检查只证明进程启动;冒烟测试应使用真实依赖走关键用户路径。回滚窗口内保留旧颜色的日志和指标,便于比较。