部署策略:版本、别名与流量切换

使用 AWS Lambda 构建无服务器应用

Claudio Canales

Senior DevOps Engineer

为何部署策略重要

  • 快速发现缺陷。
  • 限制影响范围。
  • 快速恢复。

高风险部署 vs 安全部署

使用 AWS Lambda 构建无服务器应用

$LATEST 与已发布版本

$LATEST

  • 每次更新代码都会变化。

Versions

  • 不可变快照。
  • 便于固定用于回滚和流量拆分。

LATEST 与版本

使用 AWS Lambda 构建无服务器应用

版本是不变快照

  • 把版本当作发布制品。
  • 每个版本包含代码与配置。
  • 一旦发布就不再变化。
  • 随时回到已知稳定状态。

不可变版本快照

使用 AWS Lambda 构建无服务器应用

别名是稳定指针

  • 稳定的指针。
  • 调用别名而非版本。
  • 更新指向而不改调用方。

别名指向某个版本

使用 AWS Lambda 构建无服务器应用

Dev 与 Prod 别名

  • 适合环境隔离。
  • 频繁移动 dev
  • 通过移动别名升到 prod

开发与生产别名映射

使用 AWS Lambda 构建无服务器应用

用加权别名切换流量

  • 安全地在生产中测试。
  • 大部分流量仍在当前版本。
  • 少量流量给候选版本。

加权别名路由概念

使用 AWS Lambda 构建无服务器应用

金丝雀步骤 1:90/10

  • 90% 留在当前版本。
  • 10% 在真实负载下测候选。
  • 关注错误与延迟。

金丝雀 90/10 拆分

使用 AWS Lambda 构建无服务器应用

金丝雀步骤 2:50/50

  • 若 10% 表现良好,继续加权。
  • 50% 当前,50% 候选。
  • 50/50 能快速暴露问题。
  • 持续监控很关键。

金丝雀 50/50 拆分

使用 AWS Lambda 构建无服务器应用

金丝雀步骤 3:100% 新

  • 将全部流量路由到新版本。
  • 旧版本仍保留。
  • 回滚很简单。

金丝雀 100% 新版本

使用 AWS Lambda 构建无服务器应用

蓝/绿心智模型

  • 蓝 = 当前稳定版本。
  • 绿 = 新的候选版本。
  • 通过移动别名切换。
  • 加权路由让切换渐进。

蓝绿切换

使用 AWS Lambda 构建无服务器应用

回滚 = 把别名移回去

  • 无需重新部署。
  • 将别名移回最后的稳定版本。
  • 秒级恢复,而非小时。
  • 不可变版本配合稳定别名。

通过移动别名回滚

使用 AWS Lambda 构建无服务器应用

切换期间的监控

  • 错误与超时。
  • 时长与尾延迟。
  • 若限流,关注节流命中。
  • 及时暂停或回滚。

部署监控指标

使用 AWS Lambda 构建无服务器应用

常见陷阱:把 $LATEST 当生产

  • 依赖 $LATEST 会失去可预期性。
  • 版本与别名清楚指明在运行什么。
  • 回滚更安全。

$LATEST 漂移警告

使用 AWS Lambda 构建无服务器应用

忽略

使用 AWS Lambda 构建无服务器应用

安全部署清单

  • 发布一个版本。
  • 用别名逐步切流。
  • 监控结果。
  • 各步都准备好回滚。

安全部署清单示意图

使用 AWS Lambda 构建无服务器应用

要点回顾

  • 版本带来可预期性。
  • 别名带来稳定性。
  • 加权路由提升安全性。
  • 回滚 = 移动别名。

部署要点

使用 AWS Lambda 构建无服务器应用

让我们来练习!

使用 AWS Lambda 构建无服务器应用

Preparing Video For Download...