如何加快AWS Fargate的部署?

时间:2018-07-31 16:41:02

标签: amazon-web-services amazon-ecs aws-fargate

从EC2群集实例迁移到AWS Fargate之后,我意识到部署需要花费更长的时间。在他们花1-2分钟之前,现在一些破烂需要5分钟。 This post声称,他们在Fargate上的部署甚至需要长达10分钟的时间。

有人知道一种加快速度的方法吗?我找不到有关此主题的任何文档。

3 个答案:

答案 0 :(得分:5)

通过进一步的搜索,我发现了this Reddit thread。一个AWS员工写道:

  

关于供应和启动容器的时间是   使用Fargate时肯定更长。我们可能会减少   供应状态,但Fargate在   而不是您自己管理的主机上的ECS。当你自我管理   主机,它们已经启动并正在运行,甚至可能已经拥有   在本地下载并缓存docker镜像,因此ECS能够启动   容器很快。 Fargate并非如此。

因此缩小图像应该会有所帮助。但总的来说,我想我必须忍受它,并希望在AWS方面进行优化。

答案 1 :(得分:2)

根据我的经验,它们变慢的两个原因:

  1. awsvpc网络模式将ENI附加到任务。当必须对Lambda执行此操作时,如果Lambda在VPC中运行,则众所周知会大大增加初始启动时间。

  2. Docker映像的大小也会影响启动时间,因为通常需要将映像下载到任何隐藏的主机上才能启动任务。我已经使用200MB的小型容器和2.5GB的容器进行了一些基准测试。前者的启动确实更快。

您不能对awsvpc做太多事情,因为Fargate要求它。缩小该图像将是您的下一个最大影响。

答案 2 :(得分:2)

这是我在研究可使用ECS Fargate缩短部署时间的选项时发现的任务分解和可能的改进:

Fargate部署概述

以下是归因于部署持续时间的幕后情况:

  • 提供Fargate工作程序实例
  • 提供/附加ENI
  • 下载Docker映像
    • 这里有改善的机会:
      • 减小Docker映像的大小
      • 网络吞吐量基于对Fargate Task的CPU分配-如果分配更多的CPU,则会获得更多的网络连接,并且图像下载速度会更快
  • 应用程序启动时间
    • 成为您的应用程序需要运行状况检查宽限期的一个因素,这又受CPU分配的影响

如果您的任务与负载均衡器相关联,则部署还需要通过运行状况检查,并且您需要考虑:

  • 负载均衡器注销延迟
  • 通过健康检查:(健康检查间隔*阈值)

如何更快地部署Fargate Task更新

  • 过度分配CPU
  • 减少注销延迟
  • 将运行状况检查阈值设置为2,并将间隔设置为5秒
    • 如果您的应用需要,请不要忘记考虑健康检查宽限期

我的结果

在测试过程中,我能够部署通常在4096分钟(4vCPU)不到4分钟的时间内使用1024 CPU(1vCPU)大约8分钟的应用程序

免责声明

通常,您的任务通常需要更少的CPU,并且您不希望总是为过度分配CPU付出代价。因此,请使用过度分配的资源运行部署,然后在使用原始CPU分配之后立即运行另一个部署。

可能不是您要用于每个部署的解决方案,但可能是修补程序部署的解决方案。