1. 蓝绿发布概述
1.1 蓝绿发布定义
蓝绿发布(Blue-Green Deployment)是一种零停机的应用发布策略,通过维护两套完全独立的生产环境(蓝环境与绿环境),实现流量的瞬间切换与版本隔离。其核心思想是:在任何时刻,只有一套环境承载全部生产流量,另一套环境保持空闲或用于新版本验证。
关键术语:蓝环境(当前生产环境)、绿环境(新版本预发布环境)、流量切换、回滚窗口。
1.2 与传统发布对比
传统滚动发布(Rolling Update)和灰度发布(Canary Release)在发布过程中会同时存在多个版本混合运行,而蓝绿发布始终保持单一版本承载全量流量。下表从多个维度进行对比:
| 对比维度 | 蓝绿发布 | 滚动发布 | 灰度发布 |
|---|---|---|---|
| 环境数量 | 2 套完整环境 | 1 套环境,分批替换 | 1 套环境 + 少量金丝雀实例 |
| 停机时间 | 零停机(切换瞬间) | 零停机(滚动替换) | 零停机(流量分流) |
| 回滚速度 | 秒级(切回旧环境) | 分钟级(反向滚动) | 分钟级(调整流量比例) |
| 版本混合 | 无混合,单一版本服务 | 短暂混合(替换窗口) | 持续混合(分流期间) |
| 资源成本 | 高(双倍资源) | 低(按需扩容) | 中(少量额外实例) |
| 测试充分性 | 全量验证后切换 | 边发布边验证 | 小比例验证后全量 |
适用场景建议:蓝绿发布最适合关键业务系统、数据库 schema 向后兼容、需要快速回滚的场景;对于资源敏感或数据库变更不兼容的场景,建议结合滚动发布或灰度策略。
1.3 核心优势与挑战
核心优势
- 零停机发布:流量切换在负载均衡层瞬间完成,用户无感知。
- 秒级回滚:一旦新版本出现问题,只需将流量切回旧环境,回滚时间通常在秒级。
- 全量验证:新版本在绿环境上可以运行完整的自动化测试、性能测试和预生产验证,无需担心影响线上用户。
- 环境隔离:两套环境完全独立,新版本故障不会波及当前生产环境。
- 发布流程简单:核心操作只有“切换流量”一个动作,易于自动化和标准化。
主要挑战
- 资源成本翻倍:需要维护两套完整的生产级环境,包括计算、存储、网络和中间件资源。
- 数据一致性问题:数据库、缓存、文件存储等有状态组件需要支持双向读写或共享访问,否则切换后可能出现数据不一致。
- 环境漂移:长时间运行后,蓝绿两套环境的配置、依赖版本、中间件状态可能产生差异,导致切换后出现意外行为。
- 自动化校验复杂度:切换前需要对绿环境进行全面的配置校验、健康检查和功能验证,自动化脚本的覆盖面和可靠性要求极高。
- 长连接/会话保持:WebSocket、SSE 等长连接在切换时可能中断,需要额外的会话迁移或重连机制。
自动化校验的关键性:蓝绿发布的优势(秒级回滚、零停机)高度依赖切换前的自动化配置校验。如果绿环境的配置校验不充分,切换后可能引发严重故障,此时即使回滚,也会造成短暂的服务中断。本课程后续章节将深入讲解如何通过 Automation 驱动蓝绿发布的配置自动校验,确保每一次切换都安全可靠。