零停机部署策略
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% 用户完全不受影响!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 木素音的小站!