处理 Amazon ECS 服务配额和 API 节流限制
Amazon ECS 与多个 Amazon Web Services 服务 集成,包括 Elastic Load Balancing、Amazon Cloud Map 和 Amazon EC2。通过这种紧密集成,Amazon ECS 包括多项功能,例如服务负载均衡、Service Connect、任务联网和集群自动扩缩。Amazon ECS 和与之集成的其他 Amazon Web Services 服务 均保持服务配额和 API 速率限制,以确保一致的性能和利用率。这些服务配额还可以防止意外预置超出需求的资源,并防止可能增加账单的恶意行为。
通过自行熟悉您的服务配额和 Amazon API 速率限制,您可以计划扩缩工作负载,而不必担心性能意外下降。有关更多信息,请参阅请求对 Amazon ECS API 进行节流。
在 Amazon ECS 上扩缩工作负载时,我们建议您考虑以下服务配额。
-
Amazon Fargate 有限制每个 Amazon Web Services 区域 中并发运行的任务数的配额。Amazon ECS 上有按需和 Fargate Spot 任务的配额。每个服务配额还包括您在 Fargate 上运行的任何 Amazon EKS Pod。
-
对于在 Amazon EC2 实例上运行的任务,您可以为每个集群注册的最大 Amazon EC2 实例数为 5,000 个。如果您将 Amazon ECS 集群自动扩缩与自动扩缩组容量提供程序一起使用,或者您自己管理集群的 Amazon EC2 实例,则此配额可能会成为部署瓶颈。如果您需要更多容量,则可以创建更多集群或请求提高服务配额。
-
如果您将 Amazon ECS 集群自动扩缩与自动扩缩组容量提供程序一起使用,则在扩缩服务时请考虑
Tasks in the PROVISIONING state per cluster
配额。此配额是容量提供程序可以为其增加容量的每个集群处于PROVISIONING
状态时的最大任务数。当您同时启动大量任务时,很容易达到这一配额。例如,如果您同时部署数十项服务,每项服务都有数百个任务。发生这种情况时,容量提供程序需要启动新的容器实例,以便在集群容量不足时下达任务。容量提供程序启动其他 Amazon EC2 实例时,Amazon ECS 服务计划程序很可能会继续并行启动任务。但是,由于集群容量不足,此活动可能会受到限制。Amazon ECS 服务计划程序实施了回退和指数节流策略,用于在新容器实例启动时重试任务放置。因此,您可能会遇到部署速度较慢或横向扩展时间较长的问题。为避免这种情况,您可以通过以下方式之一来规划服务部署。部署大量不需要增加集群容量的任务,或为启动新任务保留备用集群容量。
在扩缩工作负载时,除了考虑 Amazon ECS 的服务配额外,还要考虑与 Amazon ECS 集成的其他 Amazon Web Services 服务 的服务配额。
Elastic Load Balancing
您可以将 Amazon ECS 服务配置为使用 Elastic Load Balancing 跨任务平均分配流量。有关如何选择负载均衡器的更多信息和推荐的最佳实践,请参阅 使用负载均衡分配 Amazon ECS 服务流量。
Elastic Load Balancing 服务配额
在扩缩工作负载时,请考虑以下 Elastic Load Balancing 服务配额。大多数 Elastic Load Balancing 服务配额都是可调的,您可以在服务配额控制台请求增加配额。
应用程序负载均衡器
使用应用程序负载均衡器时,根据使用案例,您可能需要请求增加以下配额:
-
Targets per Application Load Balancer
配额,即应用程序负载均衡器背后的目标数量。 -
Targets per Target Group per Region
配额,即目标组背后的目标数量。
有关更多信息,请参阅《应用程序负载均衡器用户指南》中的应用程序负载均衡器的配额。
Network Load Balancer
您可以向网络负载均衡器注册的目标数量有更严格的限制。使用网络负载均衡器时,您通常需要启用跨区域支持,这对 Targets per Availability Zone Per
Network Load Balancer
(每个网络负载均衡器每个可用区的最大目标数)有额外的扩缩限制。有关更多信息,请参阅《网络负载均衡器用户指南》中的网络负载均衡器的配额。
Elastic Load Balancing API 节流
当您将 Amazon ECS 服务配置为使用负载均衡器时,必须通过目标组运行状况检查才能视为运行正常。为了执行这些运行状况检查,Amazon ECS 会代表您调用 Elastic Load Balancing API 操作。如果您的账户中有大量服务配置了负载均衡器,则可能会减慢服务部署速度,因为可能会有专门针对 RegisterTarget
、DeregisterTarget
和 DescribeTargetHealth
Elastic Load Balancing API 操作的节流。发生节流时,您的 Amazon ECS 服务事件消息中会出现节流错误。
如果您遇到 Amazon Cloud Map API 节流,则可以联系 Amazon Web Services 支持 以获取有关如何提高 Amazon Cloud Map API 节流限制的指导。有关监控和排查此类节流错误的更多信息,请参阅处理 Amazon ECS 节流问题。
弹性网络接口
您的任务使用 awsvpc
网络模式时,Amazon ECS 会为每个任务预置一个唯一的弹性网络接口(ENI)。当您的 Amazon ECS 服务使用 Elastic Load Balancing 负载均衡器时,这些网络接口也会注册为服务中定义的相应目标组的目标。
弹性网络接口服务配额
当您运行使用 awsvpc
网络模式的任务时,每个任务都会附加一个唯一的弹性网络接口。如果必须通过互联网访问这些任务,则请为这些任务的弹性网络接口分配公有 IP 地址。在扩缩 Amazon ECS 工作负载时,请考虑以下两个重要配额:
-
Network interfaces per Region
配额,即您的账户 Amazon Web Services 区域 中的最大网络接口数。 -
Elastic IP addresses per Region
配额,即 Amazon Web Services 区域 中的最大弹性 IP 地址数。
这两个服务配额均可调,您可以从服务配额控制台请求增加这些配额。有关更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的 Amazon VPC 服务配额。
对于托管在 Amazon EC2 实例上的 Amazon ECS 工作负载,运行使用 awsvpc
网络模式的任务时,请考虑 Maximum network
interfaces
服务配额,即每个 Amazon EC2 实例的最大网络实例数。此配额限制了您可以在实例上放置的任务数。您无法调整该配额,并且其在服务配额控制台中不可用。有关更多信息,请参阅《Amazon EC2 用户指南》中的每种实例类型的每个网络接口的 IP 地址数。
尽管您无法更改可以附加到 Amazon EC2 实例的网络接口的数量,但您可以使用弹性网络接口中继功能增加可用的网络接口数。例如,默认情况下,一个 c5.large
实例最多可能有 3 个网络接口。实例的主网络接口计为一个。因此,您可以向该实例再附加两个网络接口。由于每个使用 awsvpc
网络模式的任务都需要一个网络接口,因此,您通常只能在该实例类型上运行两个此类任务。这可能会导致未充分利用集群容量。如果您启用弹性网络接口中继,则可以增加网络接口密度,以在每个实例上放置更多的任务数。开启中继后,一个 c5.large
实例最多可以有 12 个网络接口。实例具有主网络接口,而 Amazon ECS 会创建一个“中继”网络接口并将此接口附加到该实例。因此,使用此配置后,您可以在实例上运行 10 个任务,而不是默认的两个任务。有关更多信息,请参阅 增加 Amazon ECS Linux 容器实例网络接口。
弹性网络接口 API 节流
当您运行使用 awsvpc
网络模式的任务时,Amazon ECS 依赖于以下 Amazon EC2 API。这些 API 都有不同的 API 限制。有关更多信息,请参阅《Amazon EC2 API Reference》中的 Request throttling for the Amazon EC2 API。
-
CreateNetworkInterface
-
AttachNetworkInterface
-
DetachNetworkInterface
-
DeleteNetworkInterface
-
DescribeNetworkInterfaces
-
DescribeVpcs
-
DescribeSubnets
-
DescribeSecurityGroups
-
DescribeInstances
如果 Amazon EC2 API 调用在弹性网络接口预置工作流程期间受到限制,则 Amazon ECS 服务计划程序会使用指数级回退自动重试。这些自动重试有时可能会导致任务启动延迟,从而导致部署速度变慢。发生 API 节流时,您将在服务事件消息中看到消息 Operations are being
throttled. Will try again later.
。如果您一直满足 Amazon EC2 API 限制,则可以联系 Amazon Web Services 支持 以获取有关如何提高 API 节流限制的指导。有关监控和排查节流错误的更多信息,请参阅处理节流问题。
Amazon Cloud Map
Amazon ECS 服务发现和 Service Connect 使用 Amazon Cloud Map API 管理 Amazon ECS 服务的命名空间。如果您的服务有大量任务,则请考虑以下建议。
Amazon Cloud Map 服务限额
当 Amazon ECS 服务配置为使用服务发现或 Service Connect 时,Tasks per service
配额(即该服务的最大任务数)会受到 Amazon Cloud Map Instances per service
服务配额(即该服务的最大实例数)的影响。特别是,Amazon Cloud Map 服务配额将您可以运行的实例数量减少到每个服务最多 1,000 个实例。您不能更改 Amazon Cloud Map 配额。有关更多信息,请参阅Amazon Cloud Map服务配额。
Amazon Cloud Map API 节流
Amazon ECS 代表您调用 ListInstances
、GetInstancesHealthStatus
、RegisterInstance
和 DeregisterInstance
Amazon Cloud Map API。其有助于服务发现,并在您启动任务时执行运行状况检查。当同时部署使用服务发现和具有大量任务的多项服务时,这可能会导致超出 Amazon Cloud Map API 节流限制。发生这种情况时,您可能会看到以下消息:Operations are being throttled. Will try again later
(在您的 Amazon ECS 服务事件消息中),并且部署和任务启动速度变慢。Amazon Cloud Map 没有记录这些 API 的节流限制。如果您因这些而遇到节流,则可以联系 Amazon Web Services 支持 以获取有关提高 API 节流限制的指导。有关监控和排查此类节流错误的更多建议,请参阅处理 Amazon ECS 节流问题。