我试图获取有关问题herehere的答案,但我了解我需要特别了解vCPU的Fargate实现。所以我的问题是:


如果我为任务分配4个vCPU,这是否意味着我
在此任务中在容器上运行的单线程应用程序将能够完全使用所有这些vCPU,因为它们实质上只是一个
我可以使用处理器核心的一部分时间?
假设我为任务分配了4个vCPU,但在技术层面上,
将4个vCPU分配给可以自由处理一个的物理内核
线程(甚至在超线程中更多)。我的逻辑是否正确
Fargate案?


ps这是一个node.js应用程序,它与多个相互交互的播放器运行会话,因此我确实想提供一个具有最大容量的单个node.js进程。

最佳答案

Fargate在后台使用ECS(弹性容器服务)来编排Fargate容器。反过来,ECS依靠EC2提供给主机容器的计算资源。根据AWS Fargate FAQ's

Amazon Elastic Container Service(ECS)是一种高度可扩展的高性能容器管理服务,它支持Docker容器,并允许您在Amazon EC2实例的托管集群上轻松运行应用程序
...
ECS使用Fargate提供的容器来自动扩展,平衡负载并管理容器的调度

这意味着vCPU本质上与EC2实例vCPU相同。从docs

Amazon EC2实例支持Intel超线程技术,该技术使多个线程可以在单个Intel Xeon CPU内核上同时运行。除T2实例外,每个vCPU都是Intel Xeon CPU内核的超线程。

因此,回答您的问题:

如果将4个vCPU分配给单个线程应用程序-它只会使用一个vCPU,因为vCPU只是单个内核的超线程。

当选择4个vCPU时,实际上是将4个超线程分配给单个物理核心。因此,您的单线程应用程序仍将仅使用单个内核。


如果您希望对CPU资源进行更精细的控制(例如分配多个内核(可以由单个线程的应用程序使用)),则可能必须使用EC2启动类型(并管理您自己的服务器),而不是使用Fargate。

10-06 00:59