← 中文资源

简体中文版本

蓝绿部署

蓝绿部署维护两套完全相同的生产环境,把流量整体切换到已就绪的新环境,实现原子发布与快速回滚。

阅读英文原文

两套环境,一条流量入口

蓝绿部署同时运行两套相同的生产环境。任意时刻只有一套(例如蓝色)承接全部用户流量,另一套(绿色)部署新版本、执行数据库变更并接受冒烟测试。绿色通过健康检查后,负载均衡器把流量整体切到绿色;由于切换只是一次路由变更,所有用户会同时进入新版本。

用户 -> 负载均衡 -> blue (v1)   [在线]
                 -> green (v2)  [预热]
切换:target group -> green
回滚:target group -> blue

何时使用

当停机代价高、回滚必须在一分钟内完成、并且团队愿意为双份容量付费时,蓝绿部署是合适的选择。它最适合负载均衡器之后的无状态服务。与滚动部署相比,蓝绿部署提供干净的版本边界,而滚动部署成本更低,但发布期间新旧版本会同时服务流量。

权衡

发布窗口内资源成本翻倍。真正的难点是数据库:两套环境通常共用一个库,因此新版本必须同时兼容旧 schema,反之亦然,迁移至少要向后兼容一个版本。缓存、消息队列和长连接 WebSocket 也需要排空或双写处理。

示例与常见误解

某支付 API 在 Kubernetes 上创建第二套 Deployment 和 Service,只执行新增列的迁移,预热绿色 Pod 后把 Ingress 指向绿色;冒烟测试失败时,一分钟内把 Ingress 切回蓝色,下个版本再删除旧列。常见误解是认为蓝绿免费且瞬时完成:空闲环境要花钱,有状态依赖决定了切换是否真的可回滚。相关概念包括滚动部署与渐进式交付。