Amazon ECS 托管实例自动扩缩和任务放置
Amazon ECS 托管实例使用智能算法自动扩缩集群容量,并将任务高效地放置到您的基础设施中。了解这些算法的工作原理有助于您优化服务配置并排查放置行为相关问题。
任务放置算法
Amazon ECS 托管实例使用复杂的放置算法来在安排任务时平衡可用性、资源利用率和网络需求。
可用区分布
默认情况下,Amazon ECS 托管实例通过将任务分散到多个可用区来优先考虑可用性:
-
对于包含多个任务的服务,Amazon ECS 托管实例会尽可能确保分布在不同可用区的至少三个实例上
-
这种行为提供了容错能力,但可能会导致每个实例的资源利用率降低
-
可用区分布优先于装箱优化
装箱行为
虽然 Amazon ECS 托管实例可以执行装箱来最大限度地提高资源利用率,但是这种行为会受到您的网络配置的影响:
-
为了实现装箱,请将您的服务配置为使用单个子网
-
多子网配置优先考虑可用区分布而非资源密度
-
在初始服务启动期间比在扩展事件期间更有可能进行装箱
ENI 密度注意事项
对于使用 awsvpc 网络模式的服务,Amazon ECS 托管实例在做出放置决策时会考虑弹性网络接口(ENI)密度:
-
awsvpc模式下的每个任务都需要专用 ENI -
实例类型具有影响任务密度的不同 ENI 限制
-
在选择目标实例时,Amazon ECS 托管实例会考虑 ENI 可用性
注意
我们正在不断改进 ENI 密度计算来优化放置决策。
容量提供程序决策逻辑
Amazon ECS 托管实例容量提供程序会根据多种因素做出扩展和放置决策:
- 资源要求
-
待处理任务的 CPU、内存和网络要求
- 实例可用性
-
现有实例的当前容量和利用率
- 网络约束
-
子网配置和 ENI 可用性
- 可用区分配
-
在多个可用区之间保持容错能力
配置选项
子网选择策略
您的子网配置会显著影响任务放置行为:
- 多个子网(默认)
-
优先考虑可用区分布以实现高可用性
可能导致每个实例的资源利用率较低
推荐用于需要容错能力的生产工作负载
- 单个子网
-
启用装箱以提高资源利用率
将任务集中在一个可用区,降低容错能力
适用于开发或成本优化的工作负载
网络模式注意事项
您选择的网络模式会影响放置决策:
-
awsvpc模式 – 每个任务都需要专用 ENI,限制每个实例的任务密度 -
host模式 – 任务直接使用主机的网络,放置主要由资源可用性决定
CPU 架构注意事项
您在任务定义中指定的 cpuArchitecture 用于将任务放置到特定架构上。如果不指定 cpuArchitecture,Amazon ECS 将根据容量提供程序配置尝试将任务放置在任何可用的 CPU 架构上。您可指定 X86_64 或 ARM64。
排查任务放置问题
常见放置模式
了解预期放置模式有助于区分正常行为和潜在问题:
- 分散分布
-
任务分布在多个实例上,部分利用率
使用多个子网时的正常行为
表示可用性优先于资源效率
- 集中放置
-
将多个任务放置在较少实例上,利用率更高
使用单个子网配置时需要
初始服务启动期间可能会发生
- 不均分布
-
一些实例利用率很高,而另一些实例未得到充分利用
可能表示 ENI 限制或资源约束
考虑检查实例类型和网络配置
优化放置行为
要根据您的特定要求优化任务放置:
-
评估可用性要求与成本优化需求
-
根据优先级选择合适的子网配置
-
为网络模式选择具有足够 ENI 容量的实例类型
-
监控放置模式并根据需要调整配置
最佳实践
-
对于生产工作负载 – 使用跨不同可用区的多个子网来确保高可用性,接受资源利用率方面的权衡。
-
对于开发或测试 – 考虑单个子网配置,以最大限度地提高资源利用率并降低成本
-
对于
awsvpc模式 – 选择具有足够 ENI 容量的实例类型以避免放置约束 -
对于成本优化 – 监控利用率模式并调整服务配置,以平衡可用性和效率
-
对于故障排除 – 在调查意外放置模式时,请查看子网配置和网络模式