如何加速 AWS Fargate 上的部署?
How to speed up deployments on AWS Fargate?
从 EC2 集群实例迁移到 AWS Fargate 后,我意识到部署需要更长的时间。以前他们需要 1-2 分钟,现在一些部署最多需要 5 分钟。 This post 声称他们在 Fargate 上的部署甚至需要长达 10 分钟。
有人知道加快速度的方法吗?我找不到关于此主题的任何文档。
根据我的经验,它们变慢的两个原因是:
awsvpc 网络模式将 ENI 附加到任务。当它必须对 Lambda 执行此操作时,如果 Lambda 在 VPC 中为 运行,则已知会显着增加初始启动时间。
Docker 图像大小也会影响启动时间,因为图像通常需要下载到任何隐藏主机才能启动任务。我用一个 200MB 的小容器和一个 2.5GB 的容器做了一些基准测试。前者确实启动得更快。
您不能对 awsvpc 做太多事情,因为 Fargate 需要它。缩小该图像将是您的下一个最大影响。
通过进一步谷歌搜索,我发现 this Reddit thread。一位 AWS 员工写道:
With regard to time to provision and start a container it is
definitely longer when using Fargate. We may reduce the length of the
provisioning state in the future, but Fargate is doing much more under
the hood than ECS on your own self managed hosts. When you self manage
hosts they are already up and running, and may even already have your
docker image downloaded and cached locally, so ECS is able to launch
the container very quickly. That's not the case with Fargate.
所以缩小图像应该会有一点帮助。但总的来说,我想我将不得不忍受它并希望在 AWS 方面进行优化。
以下是我在研究使用 ECS Fargate 缩短部署时间的选项时发现的任务细分和可能的改进:
Fargate 部署概述
以下是归因于部署持续时间的幕后发生的事情的细分:
- 配置 Fargate worker 实例
- Provision/attach埃尼
- 下载 Docker 图片
- 在这里你有改进的机会:
- 减小 Docker 图片的尺寸
- 网络吞吐量基于 Fargate 任务的 CPU 分配 - 如果您分配更多 CPU 那么您将获得更多网络并且图像下载速度更快
- 应用程序启动时间
- 如果您的应用程序需要健康检查宽限期,则成为一个因素,再次受到 CPU 分配
的影响
如果您的任务与负载均衡器相关联,则部署还需要通过健康检查,并且您需要考虑:
- 负载均衡器注销延迟
- 通过健康检查:(健康检查间隔 * 阈值)
如何更快地部署 Fargate Task 更新
- 过度分配 CPU
- 减少注销延迟
- 将健康检查阈值设置为 2,间隔设置为 5 秒
- 如果您的应用需要,请不要忘记考虑健康检查宽限期
我的结果
在测试期间,我能够在 4 分钟内部署通常需要大约 8 分钟 w/1024 CPU (1vCPU) 的应用程序 w/4096 CPU (4vCPU)
免责声明
可能您的任务通常需要的 CPU 少得多,并且您不希望总是为 over-allocating 和 CPU 付费。因此,运行 您的部署具有过度分配的资源,然后 运行 使用原始 CPU 分配的另一个部署。
可能不是您想要用于每个部署的解决方案,但可以作为修补程序部署的解决方案。
补充阅读
从 EC2 集群实例迁移到 AWS Fargate 后,我意识到部署需要更长的时间。以前他们需要 1-2 分钟,现在一些部署最多需要 5 分钟。 This post 声称他们在 Fargate 上的部署甚至需要长达 10 分钟。
有人知道加快速度的方法吗?我找不到关于此主题的任何文档。
根据我的经验,它们变慢的两个原因是:
awsvpc 网络模式将 ENI 附加到任务。当它必须对 Lambda 执行此操作时,如果 Lambda 在 VPC 中为 运行,则已知会显着增加初始启动时间。
Docker 图像大小也会影响启动时间,因为图像通常需要下载到任何隐藏主机才能启动任务。我用一个 200MB 的小容器和一个 2.5GB 的容器做了一些基准测试。前者确实启动得更快。
您不能对 awsvpc 做太多事情,因为 Fargate 需要它。缩小该图像将是您的下一个最大影响。
通过进一步谷歌搜索,我发现 this Reddit thread。一位 AWS 员工写道:
With regard to time to provision and start a container it is definitely longer when using Fargate. We may reduce the length of the provisioning state in the future, but Fargate is doing much more under the hood than ECS on your own self managed hosts. When you self manage hosts they are already up and running, and may even already have your docker image downloaded and cached locally, so ECS is able to launch the container very quickly. That's not the case with Fargate.
所以缩小图像应该会有一点帮助。但总的来说,我想我将不得不忍受它并希望在 AWS 方面进行优化。
以下是我在研究使用 ECS Fargate 缩短部署时间的选项时发现的任务细分和可能的改进:
Fargate 部署概述
以下是归因于部署持续时间的幕后发生的事情的细分:
- 配置 Fargate worker 实例
- Provision/attach埃尼
- 下载 Docker 图片
- 在这里你有改进的机会:
- 减小 Docker 图片的尺寸
- 网络吞吐量基于 Fargate 任务的 CPU 分配 - 如果您分配更多 CPU 那么您将获得更多网络并且图像下载速度更快
- 在这里你有改进的机会:
- 应用程序启动时间
- 如果您的应用程序需要健康检查宽限期,则成为一个因素,再次受到 CPU 分配 的影响
如果您的任务与负载均衡器相关联,则部署还需要通过健康检查,并且您需要考虑:
- 负载均衡器注销延迟
- 通过健康检查:(健康检查间隔 * 阈值)
如何更快地部署 Fargate Task 更新
- 过度分配 CPU
- 减少注销延迟
- 将健康检查阈值设置为 2,间隔设置为 5 秒
- 如果您的应用需要,请不要忘记考虑健康检查宽限期
我的结果
在测试期间,我能够在 4 分钟内部署通常需要大约 8 分钟 w/1024 CPU (1vCPU) 的应用程序 w/4096 CPU (4vCPU)
免责声明
可能您的任务通常需要的 CPU 少得多,并且您不希望总是为 over-allocating 和 CPU 付费。因此,运行 您的部署具有过度分配的资源,然后 运行 使用原始 CPU 分配的另一个部署。
可能不是您想要用于每个部署的解决方案,但可以作为修补程序部署的解决方案。