Blue-Green Deployment

核心思想:同时维护两套完全相同的生产环境

┌─────────────────────────────────────────────────────────┐
│                    用户流量                              │
│                        ↓                                │
│                  负载均衡器                              │
│                        ↓                                │
│         ┌──────────────┴──────────────┐                │
│         ↓                              ↓                │
│  🔵 Blue 环境                   🟢 Green 环境           │
│  (当前生产版本 v1.0)             (新版本 v2.0)           │
│  ✅ 接收 100% 流量              ⏸️   待命中               │
└─────────────────────────────────────────────────────────┘

部署流程

第 1 步:初始状态

  • Blue (v1.0) ← 100% 流量 ✅ 运行中
  • Green (空) ⚪ 空闲

第 2 步:在 Green 环境部署新版本

  • Blue (v1.0) ← 100% 流量 ✅ 用户继续正常使用
  • Green (v2.0) 🔨 部署中,不接收流量

第 3 步:切换流量(秒级完成)

  • Blue (v1.0) ⏸️ 保留作为备份
  • Green (v2.0) ← 100% 流量 ✅ 切换完成

第 4 步:如果发现问题,立即回滚

  • Blue (v1.0) ← 100% 流量 ↩️ 切换回去(秒级)
  • Green (v2.0) ❌ 有问题,停用

第 5 步:稳定后,Blue 变成下一次的 Green

  • Blue (v2.0) ← 100% 流量 ✅ Green 内容复制到 Blue
  • Green (空) 🔄 准备下次部署

Canary Deployment

核心思想:逐步放量,小范围试错

┌─────────────────────────────────────────────────────────┐
│                    用户流量 (100%)                       │
│                        ↓                                │
│                  负载均衡器                              │
│                        ↓                                │
│         ┌──────────────┼──────────────┐                │
│         ↓              ↓               ↓                │
│  v1.0 服务器 A   v1.0 服务器 B   🐤 v2.0 Canary        │
│  (45% 流量)      (45% 流量)       (10% 流量)           │
└─────────────────────────────────────────────────────────┘

部署流程

逐步增加新版本流量

阶段 1: 初始状态

v1.0 ████████████████████ 100% 流量
v2.0 0%

阶段 2: Canary 发布(5-10% 流量)

v1.0 █████████████████░░ 90% 流量 ← 大部分用户
v2.0 █░░░░░░░░░░░░░░░░░░ 10% 流量 ← 小部分"试错"用户
↑
金丝雀!观察指标:错误率、延迟、CPU、内存

监控指标:

  • ✅ 错误率:< 0.1%
  • ✅ P99 延迟:< 200ms
  • ✅ CPU 使用率:< 80%

如果 Canary 正常 → 继续放量

阶段 3: 增加到 25%

v1.0 ███████████████░░░░ 75% 流量
v2.0 █████░░░░░░░░░░░░░░ 25% 流量 ← 继续观察

阶段 4: 增加到 50%

v1.0 ██████████░░░░░░░░░ 50% 流量
v2.0 ██████████░░░░░░░░░ 50% 流量

阶段 5: 全量发布

v1.0 0% ← 下线旧版本
v2.0 ████████████████████ 100% 流量 ✅ 发布成功!

如果 Canary 发现问题?

问题场景

Canary 阶段错误率飙升

v1.0 █████████████████░░ 90% 流量 ✅ 正常
v2.0 █░░░░░░░░░░░░░░░░░░ 10% 流量 ❌ 错误率 5%!
↑
检测到问题!

立即回滚:
v1.0 ████████████████████ 100% 流量 ↩️ 回滚完成
v2.0 (已删除) 0% ❌ 有问题版本已下线

只影响了 10% 的用户,90% 用户完全不受影响!