Zero Downtime deployments with Terraform

查看原文

本文介绍了 Checkly 的工程团队如何使用 AWS EC2 / SQS / Terraform 完成队列 worker 的 zero downtime。

  • 目标
    • worker 在不伤害用户体验的情况下可以杀掉
    • 多版本 worker 可以共存
    • 每个 worker 都可以独立升级
    • 新 worker 一旦就绪立马工作
    • 当新 worker 都起来以后 老 worker 要被杀掉
    • release 出错时停止继续部署
    • 可以被部署到多个 region
    • 新 worker 自动加入监控
    • release 出错时可以触发警告
  • 实现
    • 使用 cron 发送消息到 sqs 队列。
    • workers 订阅一个队列,每台机器 5 个 workers。每个 workers 是一个 docker nodejs 进程。
    • 任务成功调用 done() 任务失败调用 done(err), 任务失败解除锁定重新进入队列。
    • autoscaling 可以基于机器的负载自动扩容。
    • terraform 设置 aws_instance create_before_destroy=true, 并且基于 while ps|grep xxx; do sleep 5; done 阻塞执行直到进程启动。aws_instance 的环境变量通过配置 /root/.profile
    • terraform module 可以完成不同 region 配置不同参数。
    • 部署失败时会处于不确定的状态,不建议自动处理,可能需要人工干预。