

# 在 Amazon EC2 上使用容量提供程序加快 Amazon ECS 集群的容量预置
<a name="capacity-cluster-speed-up-ec2-best-practice"></a>

在 Amazon EC2 上运行 Amazon ECS 的客户可以利用 [Amazon ECS Cluster Auto Scaling（CAS）](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-auto-scaling.html)来管理 Amazon EC2 Auto Scaling 组（ASG）的扩缩。使用 CAS，您可以将 Amazon ECS 配置为自动扩缩 ASG，您只需专注于运行任务即可。Amazon ECS 将确保 ASG 根据需要横向缩减和横向扩展，无需进一步干预。Amazon ECS 容量提供程序用于通过确保有足够的容器实例可以满足应用程序的需求来管理集群中的基础设施。要了解 Amazon ECS CAS 的工作方式，请参阅 [Deep Dive on Amazon ECS Cluster Auto Scaling](https://aws.amazon.com/blogs/containers/deep-dive-on-amazon-ecs-cluster-auto-scaling/)。

由于 CAS 依赖于与 ASG 基于 CloudWatch 的集成来调整集群容量，所以它具有与发布 CloudWatch 指标、指标 `CapacityProviderReservation` 突破 CloudWatch 警报（包括高警和低警报）所花费的时间以及新启动的 Amazon EC2 实例预热所花费的时间相关的固有延迟。您可以执行以下操作来提高 CAS 的响应能力，从而加快部署速度：

## 容量提供程序分步扩缩大小
<a name="cas-step-size"></a>

Amazon ECS 容量提供程序最终将增加/缩小容器实例，以满足您的应用程序需求。Amazon ECS 将启动的实例最小数量默认设置为 1。如果需要多个实例来放置待处理的任务，这可能会额外增加您的部署时间。您可以使用 Amazon ECS API 增加 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html)，以增加 Amazon ECS 一次横向缩减或扩展的最小实例数量。过低的 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html) 可能会限制一次横向缩减或扩展的容器实例数量，这可能会减慢您的部署速度。

**注意**  
此配置目前只能通过 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html) 或 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html) API 进行。

## 实例预热期
<a name="instance-warmup-period"></a>

实例预热期是新启动的 Amazon EC2 实例可以向自动扩缩组提供 CloudWatch 指标之后需要经过的时间。指定的预热期到期后，该实例将计入 ASG 的聚合指标，CAS 将继续进行下一次计算迭代，从而估计所需的实例数量。

[https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html#ECS-Type-ManagedScaling-instanceWarmupPeriod](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html#ECS-Type-ManagedScaling-instanceWarmupPeriod) 的默认值为 300 秒，您可以通过 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html) 或 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html) API 将其配置为较低的值，以提高扩缩响应速度。

## 备用容量
<a name="spare-capacity"></a>

如果您的容量提供程序没有可用于放置任务的容器实例，则它需要通过即时启动 Amazon EC2 实例来增加（横向扩展）集群容量，并等待它们启动后才能在其上启动容器。这样会大大降低任务启动率。您在此有两种选择。

 在这种情况下，已经启动并准备好运行任务的备用 Amazon EC2 容量将提高有效的任务启动率。您可以使用 `Target Capacity` 配置来表示您希望在集群中维护备用容量。例如，通过将 `Target Capacity` 设置为 80%，表示您的集群始终需要 20% 的备用容量。此备用容量可使任何独立任务立即启动，从而确保任务启动不受限制。这种方法的代价是保持备用集群容量的潜在成本增加。

您可以考虑采用另一种方法，即为服务而不是容量提供程序增加余量。这意味着，与其减少 `Target Capacity` 配置以启动备用容量，不如修改服务自动扩缩的目标跟踪扩缩指标或分步扩缩阈值来增加服务中的副本数量。请注意，这种方法仅对高峰工作负载有帮助，但在部署新服务并第一次从 0 个任务增加到 N 个任务时不会产生任何影响。有关相关扩缩策略的更多信息，请参阅[目标跟踪扩缩策略](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-autoscaling-targettracking.html)或[分步扩缩策略](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-autoscaling-stepscaling.html)。