

# Amazon ECS 托管实例基础设施优化
<a name="managed-instances-infrastructure-optimization"></a>

Amazon ECS 托管实例会根据您的容量提供程序配置和当前工作负载需求自动预置大小合适的 EC2 实例，确保容器化应用程序从部署之时起就拥有适当的计算资源。随着应用程序流量模式演变和工作负载需求随时间推移而变化，Amazon ECS 托管实例通过智能调整实例大小以满足当前需求、主动替换偏离最佳配置的实例以及动态平衡成本效率、应用程序性能和系统可靠性，持续监控和优化您的基础设施。此资源管理系统运行时无需任何人工干预，这样既能降低基础设施成本，又能保持应用程序的高可用性。

基础设施优化有以下好处：
+ 成本优化：通过最大限度地提高资源利用率和消除空闲容量来降低基础设施成本
+ 性能改进：根据资源需求和性能特征优化工作负载放置
+ 操作简单：自动执行复杂的资源管理决策，无需人工干预
+ 可靠性增强：通过智能工作负载分配和运行状况监控保持高可用性

Amazon ECS 托管实例执行两种类型的基础设施优化，可最大限度地提高效率并降低成本：

## 空闲实例检测
<a name="idle-instance-detection"></a>

识别并移除没有运行任务的 EC2 实例，从而消除因未使用容量而产生的非必要基础设施成本。当检测到空闲实例时，优化过程会将容器实例标记为 DEREGISTERING，这将启动清理序列来安全地终止底层 EC2 实例。

## 未充分利用的实例检测
<a name="underutilized-instance-detection"></a>

分析实例之间的任务分配，以确定更好的资源分配机会。当任务在多个实例上运行不佳时，Amazon ECS 托管实例会将工作负载整合到数量更少、利用率更高的实例上，从而降低总体成本，同时保持性能。优化过程会将未充分利用的容器实例标记为 DRAINING，这将触发任务替换，将工作负载迁移到现有或新的更高效的实例。所有任务安全迁移后，实例将转换为 DEREGISTERING 状态并进行清理。此优化适用于运行服务任务的实例，通过遵循服务的最小和最大任务数限制、遵循先启动后停止部署行为以及在整个耗尽过程中维护任何任务保护设置来确保安全整合。由于 ECS 托管实例不会替换独立任务，因此不考虑对运行独立任务的实例进行优化。

**重要**  
竞价型实例目前不支持检测未充分利用的实例。如果在 Amazon ECS 托管实例中结合使用竞价型实例，则基础设施优化功能将检测并删除空闲实例（没有运行任务的实例），但不会整合未充分利用的竞价型实例中的工作负载。

这些优化协同工作，确保您的基础设施能够持续适应实际工作负载需求，自动消除浪费并提高资源利用率，却不影响应用程序的可用性。这两种机制都采用事件驱动的监控来响应任务和实例生命周期事件，从而实时识别优化机会。Amazon ECS 托管实例会检测容器实例上的最后一个任务何时停止，指明存在潜在空闲状态，可进行成本优化。对于未充分利用的实例，任何任务停止或新实例启动都会触发分析，以识别工作负载整合和提高资源效率的机会。

## ScaleInAfter
<a name="scale-in-after"></a>

这两种基础设施优化都会寻找终止正在运行的实例的机会，以提高利用率并降低成本。您可以使用 Amazon ECS 托管实例容量提供程序设置中的 ScaleInAfter 配置来控制这些操作的时间，该配置适用于空闲和未充分利用的实例。ScaleInAfter 允许您指定实例空闲或未充分利用与 Amazon ECS 托管实例开始优化基础设施之间的延迟（以秒为单位）。您可以将延迟设置为 0 到 3600 秒之间。您也可以指定 -1 来禁用基础设施优化。

**空闲实例**  
+ ECS 在最后一个任务停止后等待指定的持续时间，然后再注销实例
+ 如果在等待期内启动了新任务，则实例不再被视为空闲，终止将被取消

**未充分利用的实例**  
+ 在导致实例未得到充分利用的任务停止事件之后，ECS 等待指定的持续时间，然后再耗尽实例
+ 如果在等待期内启动了新任务或在特定实例上停止了现有任务，则计时器将从最近的任务停止时间或新任务创建时间重新开始计时，Amazon ECS 托管实例将重新评估效率低下情况，并在新的等待期到期后根据需要采取相应措施

此配置为可选配置。如果未指定，则 ECS 托管实例会根据 ECS 托管实例默认配置自动确定最佳计时。