1. 蓝绿发布概述
1.1 蓝绿发布定义
蓝绿发布(Blue-Green Deployment)是一种零停机的应用发布策略,通过维护两套完全独立的生产环境(蓝环境与绿环境),实现流量的瞬时切换与快速回滚。在任意时刻,只有一套环境对外提供服务,另一套环境保持空闲或用于新版本验证。
核心定义:蓝绿发布 = 两套生产环境 + 流量路由控制 + 瞬时切换 + 快速回滚
1.2 核心思想
蓝绿发布的核心思想可概括为以下四点:
- 环境隔离:蓝、绿两套环境在基础设施层面完全独立,互不干扰。
- 流量路由:通过负载均衡器或网关,将生产流量全部路由至当前活跃环境。
- 瞬时切换:新版本在空闲环境部署并验证通过后,通过修改路由规则将流量瞬间切换至新环境。
- 快速回滚:若新版本出现问题,只需将流量切回原环境,回滚时间在秒级。
1.3 与传统发布对比
蓝绿发布与传统的滚动发布、灰度发布、停机发布在多个维度存在显著差异。下表从关键指标进行对比:
| 对比维度 | 蓝绿发布 | 滚动发布 | 灰度发布 | 停机发布 |
|---|---|---|---|---|
| 停机时间 | 零停机 | 接近零停机 | 零停机 | 有停机窗口 |
| 回滚速度 | 秒级(流量切换) | 分钟级(逐实例回滚) | 分钟级(调整流量比例) | 小时级(重新部署) |
| 资源成本 | 高(双倍环境) | 低(仅需少量额外资源) | 中(部分额外资源) | 低(单环境) |
| 环境一致性 | 完全一致 | 可能存在版本混合 | 部分不一致 | 完全一致 |
| 部署复杂度 | 中(需自动化路由) | 低 | 中(需流量控制) | 低 |
| 测试验证 | 可在生产环境预验证 | 仅部分实例可验证 | 小范围用户验证 | 上线后验证 |
关键差异:蓝绿发布的最大优势在于瞬时回滚能力——回滚不是重新部署,而是路由切换,这是其他发布策略无法比拟的。
1.4 适用场景
蓝绿发布并非适用于所有场景,以下列出其典型适用场景与不适用场景:
✅ 适用场景
- 关键业务系统:要求零停机、高可用,如支付、交易、核心账务系统。
- 数据库无状态或兼容前向/后向:应用层无状态或数据库 schema 变更兼容新旧版本。
- 高频发布需求:每日多次发布,需要快速验证与回滚保障。
- 合规与审计要求:需要完整的发布前验证环境,且验证环境与生产环境完全一致。
- 微服务架构:服务间通过 API 解耦,可独立进行蓝绿切换。
❌ 不适用场景
- 数据库 schema 不兼容:新旧版本同时操作同一数据库表结构,导致数据损坏。
- 资源严重受限:无法承担双倍环境的基础设施成本。
- 有状态应用:应用内部维护会话状态或本地缓存,切换后状态丢失。
- 长连接/WebSocket 密集型:连接迁移复杂,切换可能导致连接中断。
重要提醒:蓝绿发布不是银弹。在数据库 schema 不兼容或应用强状态场景下,盲目使用蓝绿发布可能导致数据不一致或发布失败。建议在实施前进行兼容性评估,必要时结合数据库迁移策略或会话外部化方案。