1. 蓝绿发布概述

1.1 什么是蓝绿发布

蓝绿发布(Blue-Green Deployment)是一种零停机、快速回滚的软件发布策略。生产环境维护两套完全相同的独立基础设施——蓝环境(Blue)与绿环境(Green),任意时刻只有一套环境承载真实用户流量,另一套处于待命或空闲状态。

  • 蓝环境(当前生产):运行现有稳定版本,处理所有用户请求。
  • 绿环境(新版本):部署新版本应用,完成内部验证与健康检查。
  • 流量切换:健康检查通过后,通过负载均衡器或网关将流量从蓝环境瞬间切换至绿环境。
  • 快速回滚:若新版本出现异常,立即将流量切回蓝环境,恢复时间仅需一次路由变更。
核心思想:两套环境始终就绪,切换而非升级,将发布风险与变更窗口压缩到极致。
蓝绿发布核心架构 用户流量 负载均衡器 / 网关 蓝环境(当前生产) 应用版本 v1.0 数据库 / 缓存 / 配置 状态:承载 100% 流量 绿环境(新版本) 应用版本 v2.0 数据库 / 缓存 / 配置 状态:健康检查中 流量切换 → 绿环境上线

1.2 与传统发布方式对比

对比维度 蓝绿发布 滚动发布 金丝雀发布 传统停机发布
停机时间 零停机(切换瞬间) 零停机 零停机 有停机窗口
回滚速度 秒级(路由切换) 分钟级(逐步回退) 分钟级(流量调整) 小时级(重新部署)
基础设施成本 高(双倍资源) 低(与生产一致) 中(额外少量实例) 低(单套环境)
环境一致性 完全一致 逐步替换 部分实例运行新版本 单版本运行
发布风险 低(全量切换前可验证) 中(逐步暴露) 低(小范围验证) 高(全量一次性)
适用变更类型 应用版本、配置、数据库迁移 应用版本 功能验证、A/B测试 紧急修复、低频发布
关键差异:蓝绿发布的核心优势在于“切换而非升级”,回滚时无需重新部署,只需将流量切回原环境,这是其他策略无法比拟的。

1.3 适用场景

蓝绿发布并非万能策略,以下场景最能发挥其价值:

  • 高可用在线服务:电商、支付、社交、游戏等要求零停机、用户体验不中断的业务。
  • 数据库 Schema 变更:配合兼容性设计(前向兼容),蓝绿环境可安全执行迁移脚本。
  • 配置与基础设施变更:Nginx 配置、Kubernetes 版本、中间件升级等底层变更。
  • 合规与审计场景:金融、医疗等需要完整发布记录与快速回滚能力的行业。
  • 自动化 CI/CD 流水线:与 Jenkins、GitLab CI、ArgoCD 等工具集成,实现全自动发布。
不适用场景:资源成本敏感的小型项目、无状态微服务(滚动发布更经济)、需要长时间会话保持且无法迁移的应用。

1.4 核心优势

  1. 零停机发布:流量切换在毫秒级完成,用户无感知。
  2. 秒级回滚:发现异常立即切回蓝环境,无需重新构建或部署。
  3. 全量验证:新版本在绿环境上运行完整健康检查,模拟真实流量。
  4. 环境隔离:蓝绿环境互不干扰,可并行运行不同版本。
  5. 自动化友好:健康检查脚本驱动切换决策,适合 CI/CD 流水线。
  6. 降低人为失误:发布流程标准化,减少手工操作风险。
蓝绿发布优势全景 零停机发布 流量切换毫秒级 秒级回滚 路由切换即恢复 全量验证 真实环境健康检查 环境隔离 并行运行互不干扰 自动化友好 CI/CD 流水线集成 降低人为失误 标准化发布流程 健康检查脚本 → 自动化切换决策的核心

1.5 健康检查在蓝绿发布中的关键角色

蓝绿发布并非简单部署后直接切换流量,健康检查脚本是决定切换是否执行的核心裁判。没有可靠的健康检查,蓝绿发布将失去安全保障。

  • 前置检查:新版本部署后,脚本验证应用进程、端口、API 响应、数据库连接、缓存状态等。
  • 持续监控:切换前持续运行多轮检查,确保新环境稳定。
  • 切换决策:所有检查通过后,脚本自动触发流量切换;任意检查失败则中止发布并告警。
  • 后置验证:切换完成后,脚本再次验证新环境是否正常处理用户请求。
本课程目标:从零构建一套生产级蓝绿发布健康检查脚本,涵盖 HTTP 探测、进程检测、依赖检查、超时重试、告警通知与 CI/CD 集成,确保每次发布安全可控。