1.1 蓝绿发布概述

蓝绿发布(Blue-Green Deployment)是一种零停机或接近零停机的应用发布策略,通过维护两套完全独立的生产环境(蓝环境和绿环境),实现流量的平滑切换与快速回滚。在平台工程体系中,蓝绿发布是门禁自助服务实现“发布即合规”的核心基础设施能力。

核心定义:蓝绿发布通过两套环境(蓝/绿)的交替部署与流量切换,确保任意时刻只有一套环境承载生产流量,另一套环境处于待命或验证状态。

1.1.1 蓝绿发布与传统发布的对比

传统发布(如滚动更新、金丝雀发布)与蓝绿发布在部署模式、回滚速度、资源占用和风险控制上存在显著差异。下表从平台工程视角进行对比:

对比维度 传统滚动更新 蓝绿发布
部署模式 逐步替换旧实例,新旧实例共存 全量部署至空闲环境,一次性切换
回滚速度 分钟级至小时级(需逐步回退) 秒级至分钟级(仅需切回流量)
资源占用 低(仅需额外 1 个实例缓冲) 高(需完整双倍环境资源)
风险窗口 较长(新旧版本混合期间) 极短(切换瞬间)
测试验证 仅在生产流量中灰度验证 可在空闲环境全量预验证
平台工程适配性 需复杂的流量比例控制 天然适合 API 门禁自动化
平台工程视角:蓝绿发布将“发布”这一高风险操作简化为“流量切换”这一原子动作,极大降低了平台门禁系统的编排复杂度,使自助服务 API 能够以幂等方式实现发布控制。

1.1.2 蓝绿发布在平台工程中的价值

在平台工程中,蓝绿发布不仅是部署策略,更是构建自助服务门禁系统的关键能力。其核心价值体现在以下四个方面:

  1. 发布门禁自动化:平台门禁 API 可通过蓝绿环境状态(健康检查、合规扫描结果)自动决策是否允许切换,无需人工审批。
  2. 零停机自助服务:开发团队通过自助 API 触发蓝绿切换,业务流量无感知,实现“发布不中断”的 SLO 承诺。
  3. 快速回滚保障:当门禁检测到异常指标时,API 可自动执行回切至上一版本(蓝或绿),回滚时间控制在秒级。
  4. 环境一致性审计:蓝绿两套环境配置由平台统一管理,门禁 API 可对比两环境差异,确保切换前后基础设施一致性。
注意:蓝绿发布并非银弹。对于有状态服务(如数据库、长连接应用),需要额外设计数据同步或会话保持机制。平台工程中,门禁 API 应提供“有状态服务发布”的扩展参数配置,以适配此类场景。

1.1.3 蓝绿发布核心流程

下图展示了蓝绿发布在平台工程中的标准流程,包含环境准备、部署验证、流量切换和回滚四个阶段:

蓝绿发布核心流程(平台工程视角) 环境准备 蓝/绿环境初始化 部署验证 门禁健康检查 流量切换 API 触发切换 回滚 异常自动回切 稳定运行 门禁 API 关键检查项 • 健康检查通过率 ≥ 99.9% • 合规扫描无高危漏洞 • 性能基线未退化

1.1.4 蓝绿环境模型与门禁 API 的映射

在平台工程中,蓝绿发布通过门禁自助服务 API 暴露为可编程资源。下表展示了蓝绿环境模型与 API 参数之间的映射关系:

环境模型属性 API 参数名称 参数类型 说明
当前活跃环境 active_environment string (blue|green) 标识当前承载生产流量的环境
待发布环境 staging_environment string (blue|green) 新版本部署的目标环境
健康检查状态 health_status object 包含各服务健康检查结果
切换策略 switch_strategy enum immediate / gradual / manual
回滚触发条件 rollback_conditions array 错误率、延迟、CPU 等阈值
平台工程最佳实践:门禁 API 应将蓝绿环境视为一等资源(first-class resource),支持 CRUD 操作。开发团队通过 API 创建“发布计划”,平台自动完成环境准备、部署、验证和切换,实现“声明式发布”。

1.1.5 蓝绿发布在自助服务中的典型场景

以下是一个典型的蓝绿发布自助服务 API 调用流程,展示平台工程如何通过参数配置实现门禁控制:

# 1. 创建发布计划(指定目标环境为 green)
POST /api/v1/releases
{
  "application": "order-service",
  "version": "v2.3.1",
  "target_environment": "green",
  "switch_strategy": "immediate",
  "rollback_conditions": {
    "error_rate_threshold": 0.01,
    "latency_p99_threshold_ms": 500
  }
}

# 2. 查询环境健康状态(门禁自动检查)
GET /api/v1/environments/green/health
Response: { "status": "healthy", "checks": { ... } }

# 3. 执行流量切换(门禁通过后自动触发)
POST /api/v1/releases/{id}/switch
Response: { "active_environment": "green", "switch_time_ms": 320 }

# 4. 监控与回滚(异常时自动执行)
POST /api/v1/releases/{id}/rollback
Response: { "active_environment": "blue", "rollback_time_ms": 150 }
关键设计原则:门禁 API 应保证“切换”和“回滚”操作的幂等性。即使网络重试导致多次调用,环境状态最终应保持一致。建议在 API 参数中引入 idempotency_key 字段。