1. 蓝绿发布概述

1.1 蓝绿发布定义

蓝绿发布(Blue-Green Deployment)是一种零宕机的应用发布策略,通过维护两套完全独立的生产环境(蓝环境与绿环境),实现流量在旧版本与新版本之间的瞬时切换。其核心目标是:降低发布风险、缩短故障恢复时间、消除环境差异导致的配置漂移。

关键指标:蓝绿发布的 MTTR(平均修复时间)理论上可压缩至 秒级,仅取决于负载均衡器或网关的流量切换时间,而非传统发布的回滚部署耗时。

1.2 核心思想

蓝绿发布遵循“双环境、单流量”的运行模型:

  • 蓝环境(Blue):当前承载所有生产流量的稳定版本。
  • 绿环境(Green):部署新版本应用的待发布环境,与蓝环境保持完全一致的配置、中间件、数据层。
  • 流量切换:验证绿环境通过后,通过路由层(如 Nginx、Kubernetes Service、API Gateway)将流量从蓝环境瞬时切换至绿环境。
  • 快速回滚:若绿环境出现异常,只需将流量切回蓝环境,回滚时间等同于切换时间。
蓝绿发布核心思想:双环境 + 单流量切换 用户流量 负载均衡 / 网关 蓝环境(Blue) 版本 v1.0(当前生产) 配置:prod-config-v1 状态:🟢 在线 绿环境(Green) 版本 v2.0(待发布) 配置:prod-config-v2 状态:🟡 验证中 流量切换 核心原则:蓝绿环境配置必须完全一致,差异仅在于应用版本;流量切换是唯一变更点

1.3 与传统发布对比优势

传统发布(滚动更新、灰度发布、金丝雀发布)在环境一致性、回滚速度、配置同步方面存在显著短板。蓝绿发布通过环境隔离 + 全量切换机制,在以下维度形成代差优势:

对比维度 传统滚动发布 蓝绿发布 优势说明
回滚速度 分钟~小时级(需重新部署旧版本) 秒级(仅需切换流量) MTTR 从小时级降至秒级
环境一致性 新旧版本共享同一环境,配置易漂移 两套独立环境,配置可严格比对 消除“在我机器上是好的”问题
发布风险 影响范围逐步扩大,问题发现滞后 全量切换前可完整验证 降低生产故障概率
配置同步 依赖配置中心推送,易遗漏 环境级配置快照,切换即同步 配置变更与版本发布解耦
资源占用 低(复用环境) 高(双倍资源) 需权衡成本与可用性
数据库兼容 需向前兼容,回滚复杂 需设计双向兼容 schema 数据层是蓝绿最大挑战
SRE 视角:蓝绿发布并非银弹。当数据库 schema 变更不兼容时,蓝绿切换可能导致数据损坏。本课程后续章节将专门讲解数据库兼容性设计与配置同步方案,这是蓝绿发布落地的关键难点。

1.4 蓝绿发布适用场景

  • 无状态应用:Web 服务、API 网关、微服务(最理想场景)。
  • 配置频繁变更:需要环境级配置快照比对,避免配置漂移。
  • 高可用要求:SLA 要求 99.99%+,发布不能导致停机。
  • 合规审计:需要保留完整的环境快照用于回滚审计。
不适用场景:有状态应用(数据库、缓存集群)、长连接服务(WebSocket)、数据迁移中的系统。这些场景需要结合灰度发布或双写模式,本课程将在第 18 章专门讨论。

1.5 蓝绿发布与 MTTR 的关系

MTTR(Mean Time to Repair)是 SRE 衡量发布可靠性的核心指标。蓝绿发布通过以下机制直接优化 MTTR:

  1. 故障隔离:绿环境故障不影响蓝环境,用户无感知。
  2. 瞬时回滚:回滚操作 = 1 次 DNS 或路由配置变更,典型耗时 < 10 秒。
  3. 环境差异可观测:蓝绿环境配置可做逐项差异比对,定位问题从“猜”变为“查表”。
  4. 复盘数据完整:两套环境日志、指标、配置快照均可保留,便于事后根因分析。
蓝绿发布 MTTR 优化链路 故障发生 流量切回蓝环境 环境差异比对 (配置快照 vs 基线) 根因定位 T0 T0 + 5s T0 + 30s T0 + 2min MTTR 优化关键路径 故障 → 流量切换(5s)→ 环境差异比对(25s)→ 根因定位(90s) 传统发布同等场景 MTTR 通常 > 30 分钟,蓝绿发布可压缩至 2~3 分钟