蓝绿与金丝雀发布

蓝绿用两套环境整体切换,回滚快但资源投入约翻倍;金丝雀先放少量流量验证再逐步放大,风险小但需要版本级观测与快速回滚能力。

三种发布策略

蓝绿发布准备两套环境整体切换流量,回滚快但资源投入接近翻倍;金丝雀发布先放少量流量验证再逐步放大,风险小但需要版本级观测与快速回滚能力;滚动发布按批次替换实例,成本最低,但新旧版本会在较长时间内并存。

共同前提

三种策略都要求数据库变更向前兼容。如果新版本写入了旧版本无法解析的数据格式,回滚会直接失败,切换流量也救不回来。这也是发布策略必须与扩展-收缩式变更绑定使用的原因:先让新旧版本都能读写,再谈如何切流量。

策略对比

策略切流方式代价
蓝绿整体切换流量入口双份资源,数据库兼容要求高
金丝雀按比例逐步放量需要版本级监控与流量治理
滚动按批次替换实例新旧版本并存,需前后兼容

基本信息

观测新版本的成功率、延迟与业务指标需按版本切分
流量治理按比例、按用户或按地域分流
回滚分钟级可回滚,且不依赖数据回退
资源蓝绿约需双份容量,金丝雀只需少量额外容量

典型使用场景

  • 大版本升级:验证稳定性后再全量切流
  • 核心接口改版:先放量 1% 观察错误率与延迟
  • 数据库兼容性变更:配合扩展-收缩分阶段发布
  • 算法或模型上线:用业务指标判断新版本效果
  • 面向大客户的灰度:按租户逐步开放新功能

按用户还是按流量

金丝雀按固定比例分流时,同一个用户可能一会儿命中新版本、一会儿命中旧版本,出现行为不一致。更稳妥的做法是按用户标识或会话哈希分流,保证同一用户在整个灰度期间只看到同一个版本;面向企业客户的产品还可以按租户分流,让问题影响范围可控且便于沟通。

三者共同前提是数据库变更向前兼容,也就是先扩展后收缩。缺少这一步时,回滚会因为数据格式不匹配直接失败,付出比发布本身更大的代价。

易错点

  • 金丝雀只观察技术指标不看业务指标,逻辑错误被漏检
  • 回滚预案未考虑已写入的新格式数据,回滚后旧版本无法解析
  • 蓝绿切换时两套环境共用同一个数据库,写入路径冲突未处理
  • 灰度流量按比例随机分配,同一用户的请求在新旧版本之间跳跃

数据来源与参考

  • 《持续交付》(Humble & Farley)
  • Kubernetes 文档:Deployment 滚动更新
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌