金丝雀与线性部署

在 AWS 上自动化部署

Dunieski Otano

Amazon Web Services Solutions Architect

一次坏发布,殃及所有用户

split

  • 支付逻辑变更立刻部署到 100% 流量
  • 线上负载下暴露缺陷;所有结账失败
  • 若用 10% 金丝雀,5 分钟内即可发现
  • 跳过金丝雀的代价:真实损失
在 AWS 上自动化部署

什么是金丝雀部署

canary

  • 先将小部分流量导向新版本
  • 在固定等待时间内监控指标
  • 如健康,一次切换剩余流量
  • 常见:10% 持续 5 分钟,然后 100%
在 AWS 上自动化部署

什么是线性部署

linear

  • 按等量递增逐步切流
  • 每步之间等待观察
  • 例如:每 1 分钟 +10%,共 10 分钟
  • 比金丝雀更平滑,但整体更久
在 AWS 上自动化部署

金丝雀 vs 线性,对比一览

  • 金丝雀:一小段,然后全量
  • 线性:多次小步推进
  • 金丝雀发现更快;线性更平稳递增
  • 触发回滚时,两者都会暂停

traffic

在 AWS 上自动化部署

Lambda 的 CodeDeploy 配置

  • CodeDeployDefault.LambdaCanary10Percent5Minutes:10% 持续 5 分钟,然后 100%
  • CodeDeployDefault.LambdaLinear10PercentEvery1Minute:每分钟 +10%
  • CodeDeployDefault.LambdaAllAtOnce:立即全量流量
  • ECS 提供前缀为 ECS 的对应配置

label

在 AWS 上自动化部署

用 CloudWatch 警报自动回滚

  • 将CloudWatch 警报关联到部署组
  • 常见警报:errors、duration、5xx
  • 若警报进入ALARM 状态,部署停止
  • CodeDeploy 将回滚到上个版本

label

在 AWS 上自动化部署

选择合适的配置

pick

  • 日常低风险修补 → AllAtOnce
  • 高风险生产变更 → Canary
  • 需要平滑稳步爬升 → Linear
  • 始终配警报以便自动回滚
在 AWS 上自动化部署

让我们一起练习吧!

在 AWS 上自动化部署

Preparing Video For Download...