1. 蓝绿发布概述

1.1 什么是蓝绿发布

蓝绿发布(Blue-Green Deployment)是一种零停机的应用发布策略,通过维护两套完全独立的生产环境(蓝环境与绿环境),实现新版本的平滑上线与快速回滚。在任意时刻,只有一套环境承载全部生产流量,另一套环境处于待命或闲置状态。

核心思想: 流量瞬间切换,而非逐步替换。发布过程不涉及对运行中实例的原地升级,而是直接切换流量入口。
蓝绿发布核心架构 用户流量 负载均衡器 / 网关 蓝环境(当前活跃) 应用版本 v1.0 数据库 / 缓存 绿环境(待命/新版本) 应用版本 v2.0 数据库 / 缓存 流量切换瞬间完成:负载均衡器将流量从蓝环境指向绿环境,实现零停机发布

1.2 工作原理

蓝绿发布遵循“保留旧环境,部署新环境,切换流量”的三步流程。整个过程对用户透明,切换时间通常在秒级。

  1. 准备阶段: 保持蓝环境(当前生产环境)正常运行,承载全部用户流量。
  2. 部署阶段: 在绿环境中部署新版本应用,运行完整的 Health Check 脚本验证新环境就绪。
  3. 切换阶段: 将负载均衡器/网关的流量指向绿环境,绿环境成为新的生产环境。
  4. 观察与回滚: 监控新环境运行状态;若出现问题,立即将流量切回蓝环境。
关键门禁: 在流量切换前,必须通过 Health Check 脚本验证新环境的全部依赖(数据库连接、缓存、下游服务、磁盘空间等)均处于健康状态。这是蓝绿发布的安全门禁。

1.3 与传统滚动发布的区别

滚动发布(Rolling Update)逐步替换运行中的实例,而蓝绿发布通过环境整体切换实现版本更新。两者在风险控制、回滚速度、资源消耗等方面存在显著差异。

对比维度 蓝绿发布 滚动发布
停机时间 零停机(切换瞬间完成) 接近零停机(逐个替换实例)
回滚速度 秒级(流量切回旧环境) 分钟级(逐个回滚实例)
资源消耗 高(需同时运行两套完整环境) 低(仅需额外 1 个实例缓冲)
环境一致性 高(新旧环境完全独立) 中(新旧实例共存于同一环境)
数据库兼容性 需前后兼容(新旧版本共享数据库) 需前后兼容(逐步替换)
适用发布规模 大版本、高风险变更 小版本、低风险修复
蓝绿发布 vs 滚动发布:回滚路径对比 蓝绿发布回滚路径 绿环境(新)→ 蓝环境(旧) 操作:负载均衡器切换流量 滚动发布回滚路径 逐个实例回滚到旧版本镜像 操作:重新部署旧版本 + 健康检查 回滚时间:1 ~ 5 秒 回滚时间:3 ~ 15 分钟 蓝绿发布回滚速度是滚动发布的 60 ~ 900 倍,适合高风险变更场景

1.4 适用场景

蓝绿发布并非适用于所有场景,其高资源消耗特性决定了它最适合高风险、高影响的发布场景。

  • 核心业务系统发布: 支付、交易、用户认证等不可中断的核心服务。
  • 重大版本升级: 架构重构、数据库迁移、协议变更等高风险变更。
  • 合规与审计要求: 需要保留旧环境用于回滚审计或灰度验证。
  • 快速回滚需求: 业务要求故障恢复时间(RTO)在分钟级以内。
不适用场景: 数据库 Schema 不兼容且无法做前后兼容改造时,蓝绿发布无法直接切换;资源受限的小团队或低频变更项目,双环境成本过高。

1.5 蓝绿发布的关键挑战

挑战 说明 应对策略
数据库兼容性 新旧版本共享同一数据库,Schema 变更需前后兼容 采用增量迁移、读写分离、扩展字段而非修改字段
环境一致性 两套环境配置、依赖、数据必须完全一致 基础设施即代码(IaC)、配置管理工具、自动化部署
资源成本 双环境运行导致计算/存储资源翻倍 闲置环境缩容至最小副本、使用按需实例
Health Check 可靠性 切换前必须全面验证新环境健康状态 编写多维度 Health Check 脚本(本章核心内容)