发布类型
约 1509 字大约 5 分钟
2025-11-04
1. 金丝雀发布
核心思想
渐进式、受控的发布。就像矿工下井前先放一只金丝雀来探测有毒气体一样,这种策略先将新版本应用部署给一小部分用户(例如 1%、5% 或 10%),在真实生产环境中进行“测试”。如果一切正常,再逐步扩大用户范围,直到完全替换旧版本。如果发现问题,则立即回滚,影响范围很小。
工作流程
- 初始状态: 100% 的用户流量都指向稳定运行的旧版本(v1)。
- 发布金丝雀: 部署新版本(v2),但先不接收用户流量。通过负载均衡器或服务网格(如 Istio、Nginx)的规则,将一小部分特定用户(如内部员工、特定地区用户或随机选择的用户)的流量引导到 v2。
- 观察与监控: 密切监控 v2 的运行状态,包括业务指标(如订单成功率、响应时间)和技术指标(如 CPU 使用率、错误率)。
- 决策点:
- 成功: 如果金丝雀版本运行稳定,指标健康,则逐步扩大流向 v2 的流量比例(例如 10% -> 25% -> 50% -> 100%)。
- 失败: 如果发现任何问题,立即将全部流量切回 v1,并下线有问题的 v2 版本。由于只影响了一小部分用户,所以整体风险很低。
- 完成发布: 当 100% 的流量都切换到 v2 并稳定运行一段时间后,下线 v1 版本。
优点
- 风险极低: 问题在影响大面积用户前就能被发现和修复。
- 实时验证: 在真实用户环境和流量下进行测试,结果更可靠。
- 平滑过渡: 对用户影响小,几乎无感知。
缺点
- 发布周期稍长: 需要逐步扩大流量,比一次性全量发布要慢。
- 部署复杂性高: 需要复杂的流量控制工具(如服务网格)和完善的监控告警体系。
- 需要维护两个版本: 在发布期间,需要同时维护 v1 和 v2 的兼容性。
2. 蓝绿发布
核心思想
切换、而非渐进。同时部署两个完全相同的生产环境:“蓝色”和“绿色”。
- 一个环境(比如蓝色)承载当前所有的生产流量。
- 另一个环境(绿色)部署新版本。
测试无误后,通过一次性切换负载均衡器的配置,将所有用户流量从蓝色环境瞬间切换到绿色环境。如果绿色环境出现问题,再瞬间切回蓝色环境。
工作流程
- 初始状态: “蓝色”环境(v1)正在服务所有用户。“绿色”环境空闲或运行着与蓝色相同的版本。
- 部署新版本: 在“绿色”环境中部署新版本(v2),并进行充分的测试(集成测试、API测试等)。此时,真实用户流量仍在蓝色环境。
- 最终测试: 在将流量切换到绿色环境之前,可以进行最终的健康检查。
- 切换流量: 通过更改路由器、负载均衡器或 DNS 的配置,将所有生产流量从蓝色环境一次性、瞬间切换到绿色环境。
- 观察与监控: 密切监控绿色环境的运行状态。
- 决策点:
- 成功: 绿色环境运行稳定,则蓝色环境可以下线,作为下一次发布的“绿色”环境。
- 失败: 如果绿色环境出现问题,立即将流量全部切回蓝色环境。回滚非常快速,几乎零停机。
优点
- 快速回滚: 版本切换和回滚速度极快,只需改变路由配置。
- 风险隔离: 新旧环境完全隔离,避免了版本间相互影响。
- 发布和回滚过程简单明了。
- 真正零停机发布。
缺点
- 资源成本高: 需要维护两套完全相同的硬件/基础设施资源,成本是两倍。
- 对数据兼容性要求高: 在切换期间,两个环境连接的如果是同一个数据库,必须确保数据库 schema 和数据的双向兼容性,否则回滚时会出问题。
- 切换是“非黑即白”的: 无法像金丝雀发布那样进行灰度验证,所有用户同时体验新版本。
对比总结
| 特性 | 金丝雀发布 | 蓝绿发布 |
|---|---|---|
| 核心思想 | 渐进式流量切换 | 一次性环境切换 |
| 发布速度 | 较慢,逐步推进 | 极快,瞬间完成 |
| 回滚速度 | 较快,逐步缩流 | 极快,一键切换 |
| 资源成本 | 较低,只需额外部署部分实例 | 高,需要两套完整环境 |
| 风险控制 | 极好,影响范围小 | 好,但切换是全量的 |
| 复杂性 | 高(需要精细流量控制) | 中(主要是基础设施和路由) |
| 适用场景 | 面向用户的应用,需要验证业务逻辑 | 基础设施、中间件或对回滚速度要求极高的应用 |
如何选择?
- 选择金丝雀发布: 当你非常关注新版本的稳定性和业务影响,希望用真实流量进行渐进式验证,并且能够接受较长的发布周期时。例如:电商网站的前端UI、核心交易链路。
- 选择蓝绿发布: 当你追求发布和回滚的绝对速度,并且资源预算充足,或者应用本身对基础设施的依赖性很强时。例如:数据库升级、核心中间件、API网关。
在实际生产中,这两种策略也常常结合使用。例如,先采用蓝绿发布搭建好新环境,然后在切换流量时,不使用一次性全量切换,而是采用金丝雀发布的方式逐步将流量从蓝色环境迁移到绿色环境,从而兼具两种策略的优点。
更新日志
2025/11/4 08:11
查看所有更新日志
295dd-add canary于
