优化 Amazon ECS 任务启动时间 - Amazon Elastic Container Service

优化 Amazon ECS 任务启动时间

要加快任务启动速度,请考虑以下建议。

  • 缓存容器映像和装填实例

    如果您使用 EC2 启动类型,则可以将 Amazon ECS 容器代理的拉取行为配置为 ECS_IMAGE_PULL_BEHAVIORprefer-cached。在没有缓存映像时远程拉取映像。否则,将使用实例上缓存的映像。为容器关闭自动映像清除,以确保不会删除缓存的映像。这样可以缩短后续启动的映像拉取时间。当容器实例中的任务密度很高时,缓存的效果会更大,您可以使用 binpack 放置策略对其进行配置。缓存容器映像对于基于 Windows 的工作负载特别有益,这些工作负载通常有很大(数十 GB)的容器映像大小。使用 binpack 放置策略时,您还可以考虑使用弹性网络接口(ENI)中继在每个容器实例上使用 awsvpc 网络模式放置更多任务。ENI 中继增加了您可以在 awsvpc 模式下运行的任务数量。例如,可能仅支持同时运行 2 个任务的 c5.large 实例通过 ENI 中继最多可运行 10 个任务。

  • 选择最佳网络模式

    尽管在许多情况下,awsvpc 网络模式是理想的,但这种网络模式本质上会增加任务启动延迟,因为对于 awsvpc 模式下的每个任务,Amazon ECS 工作流都需要通过调用 Amazon EC2 API 来预预调配和附加 ENI,这会给您的任务启动增加几秒钟的开销。相比之下,使用 awsvpc 网络模式的主要优势是每个任务都有一个允许或拒绝流量的安全组。这意味着,您可以更灵活地在更精细的级别上控制任务与服务之间的通信。如果您优先考虑部署速度,则可以考虑使用 bridge 模式来加快任务启动速度。有关更多信息,请参阅 为 Amazon ECS 任务分配网络接口

  • 跟踪您的任务启动生命周期,以寻找优化机会

    通常很难知道应用程序启动所需的时间量。在应用程序启动期间启动容器映像、运行启动脚本和其他配置可能需要大量时间。您可以使用任务元数据端点发布指标,以跟踪从 ContainerStartTime 到应用程序准备好提供流量的应用程序启动时间。利用这些数据,您可以了解您的应用程序对总启动时间的贡献度,并找到可以减少不必要的应用程序特定开销和优化容器映像的领域。有关更多信息,请参阅 优化 Amazon ECS 容量和可用性

  • 选择最佳实例类型(对于 EC2 启动类型)

    选择正确的实例类型基于您在任务中配置的资源预留(例如 CPU、内存)。因此,在调整实例大小时,您可以计算在单个实例上可以放置多少任务。放置良好的任务的一个简单例子是,在 m5.large 实例(支持 2 vCPU 和 8GB 内存)中托管 4 个任务,需要 0.5 vCPU 和 2GB 内存预留。此任务定义的预留充分利用了实例的资源。