23

我试图在此处此处获得有关我的问题的答案,但我知道我需要具体了解 vCPU 的 Fargate 实现。所以我的问题是:

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

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

4

1 回答 1

16

Fargate 在后台使用 ECS(弹性容器服务)来编排 Fargate 容器。ECS 反过来又依赖 EC2 提供的计算资源来托管容器。根据 AWS Fargate常见问题解答

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

ECS 使用 Fargate 配置的容器来自动扩展、负载平衡和管理容器的调度

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

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

所以回答你的问题:

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

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

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


2021 年编辑:评论中指出,大多数 EC2 实例实际上每个 CPU 核心有 2 个超线程。一些专门的实例,例如 c6g 和 m6g,每个核心有 1 个线程,但大多数 EC2 实例有 2 个线程/核心。因此,ECS/Fargate 使用的实例很可能每个内核也有 2 个线程。有关更多详细信息,请参阅doco

于 2018-09-02T12:53:45.397 回答