19

从 EC2 集群实例迁移到 AWS Fargate 后,我意识到部署需要更长的时间。以前他们需要 1-2 分钟,现在一些部署需要 5 分钟。这篇文章声称他们在 Fargate 上的部署甚至需要长达 10 分钟。

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

4

3 回答 3

19

通过进一步的谷歌搜索,我发现了这个 Reddit 线程。一位 AWS 员工写道:

关于配置和启动容器的时间,使用 Fargate 肯定会更长。未来我们可能会缩短配置状态的长度,但 Fargate 在幕后所做的工作比在您自己管理的主机上的 ECS 要多得多。当您自行管理主机时,它们已经启动并运行,甚至可能已经将您的 docker 映像下载并缓存到本地,因此 ECS 能够非常快速地启动容器。Fargate 的情况并非如此。

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

于 2018-08-01T07:52:40.860 回答
12

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

Fargate 部署概述

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

  • 预配 Fargate 工作器实例
  • 提供/附加 ENI
  • 下载 Docker 镜像
    • 在这里你有改进的机会:
      • 减小 Docker 映像的大小
      • 网络吞吐量基于 Fargate 任务的 CPU 分配 - 如果您分配更多 CPU,那么您将获得更多网络,并且图像下载速度会更快
  • 应用程序启动时间
    • 如果您的应用程序需要健康检查宽限期,则成为一个因素,同样受 CPU 分配的影响

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

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

如何更快地部署 Fargate 任务更新

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

我的结果

在我的测试过程中,我能够在 4 分钟内部署我的应用程序,该应用程序通常需要大约 8 分钟 w/1024 CPU (1vCPU) 在 4 分钟内 w/4096 CPU (4vCPU)

免责声明

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

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

于 2020-08-14T15:08:34.370 回答
4

根据我的经验,它们速度较慢的两个原因:

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

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

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

于 2018-08-01T01:08:51.577 回答