1. 蓝绿发布概述

1.1 蓝绿发布定义

蓝绿发布(Blue-Green Deployment)是一种零停机的应用发布策略,通过维护两套完全独立的生产环境(蓝环境与绿环境),实现流量的瞬时切换与快速回滚。在任意时刻,只有一套环境对外提供服务,另一套环境保持空闲或用于新版本验证。

核心定义:蓝绿发布 = 两套生产环境 + 流量路由控制 + 瞬时切换 + 快速回滚

1.2 核心思想

蓝绿发布的核心思想可概括为以下四点:

  1. 环境隔离:蓝、绿两套环境在基础设施层面完全独立,互不干扰。
  2. 流量路由:通过负载均衡器或网关,将生产流量全部路由至当前活跃环境。
  3. 瞬时切换:新版本在空闲环境部署并验证通过后,通过修改路由规则将流量瞬间切换至新环境。
  4. 快速回滚:若新版本出现问题,只需将流量切回原环境,回滚时间在秒级。
蓝绿发布核心思想流程图 蓝绿发布核心思想流程图 用户流量 负载均衡器 / 网关 蓝环境 (Blue) 当前活跃 · 版本 v1.0 绿环境 (Green) 空闲待用 · 版本 v2.0 切换 流量瞬时从蓝环境切换至绿环境,实现零停机发布

1.3 与传统发布对比

蓝绿发布与传统的滚动发布、灰度发布、停机发布在多个维度存在显著差异。下表从关键指标进行对比:

对比维度 蓝绿发布 滚动发布 灰度发布 停机发布
停机时间 零停机 接近零停机 零停机 有停机窗口
回滚速度 秒级(流量切换) 分钟级(逐实例回滚) 分钟级(调整流量比例) 小时级(重新部署)
资源成本 高(双倍环境) 低(仅需少量额外资源) 中(部分额外资源) 低(单环境)
环境一致性 完全一致 可能存在版本混合 部分不一致 完全一致
部署复杂度 中(需自动化路由) 低 中(需流量控制) 低
测试验证 可在生产环境预验证 仅部分实例可验证 小范围用户验证 上线后验证
关键差异:蓝绿发布的最大优势在于瞬时回滚能力——回滚不是重新部署,而是路由切换,这是其他发布策略无法比拟的。

1.4 适用场景

蓝绿发布并非适用于所有场景,以下列出其典型适用场景与不适用场景:

✅ 适用场景

  • 关键业务系统:要求零停机、高可用,如支付、交易、核心账务系统。
  • 数据库无状态或兼容前向/后向:应用层无状态或数据库 schema 变更兼容新旧版本。
  • 高频发布需求:每日多次发布,需要快速验证与回滚保障。
  • 合规与审计要求:需要完整的发布前验证环境,且验证环境与生产环境完全一致。
  • 微服务架构:服务间通过 API 解耦,可独立进行蓝绿切换。

❌ 不适用场景

  • 数据库 schema 不兼容:新旧版本同时操作同一数据库表结构,导致数据损坏。
  • 资源严重受限:无法承担双倍环境的基础设施成本。
  • 有状态应用:应用内部维护会话状态或本地缓存,切换后状态丢失。
  • 长连接/WebSocket 密集型:连接迁移复杂,切换可能导致连接中断。
蓝绿发布适用场景决策树 蓝绿发布适用场景决策树 是否要求零停机? 是 → 继续评估 否 → 考虑其他策略 DB Schema 兼容? 可承担双倍资源? 应用无状态? 全部满足 → 蓝绿发布是最佳选择;任一不满足 → 需评估风险或选择其他策略
重要提醒:蓝绿发布不是银弹。在数据库 schema 不兼容或应用强状态场景下,盲目使用蓝绿发布可能导致数据不一致或发布失败。建议在实施前进行兼容性评估,必要时结合数据库迁移策略或会话外部化方案。