web-dev-qa-db-fra.com

Que signifient réellement les processeurs virtuels dans Fargate?

J'essayais d'obtenir des réponses à ma question ici et ici , mais j'ai compris que je devais connaître spécifiquement l'implémentation Fargate des vCPU. Ma question est donc:

  1. Si j'alloue 4 processeurs virtuels à ma tâche, cela signifie-t-il que mon application monothread exécutée sur un conteneur dans cette tâche pourra utiliser pleinement tout cela vCPUs car ils ne sont essentiellement qu'une partie du temps du cœur du processeur que je peux utiliser?
  2. Disons que j'ai assigné des 4vCPU à ma tâche, mais au niveau technique j'ai assigné des 4vCPU à un noyau physique qui peut traiter librement un thread (ou même plus avec l'hyperthreading). Ma logique est-elle correcte pour l'affaire Fargate?

p.s. C'est une application node.js qui exécute une session avec plusieurs joueurs interagissant les uns avec les autres, donc je veux fournir un seul processus node.js avec une capacité maximale .

10
Petro Koval

Fargate utilise ECS (Elastic Container Service) en arrière-plan pour orchestrer les conteneurs Fargate. ECS s'appuie à son tour sur les ressources de calcul fournies par EC2 aux conteneurs hôtes. Selon AWS Fargate FAQ :

Amazon Elastic Container Service (ECS) est un service de gestion de conteneurs hautement évolutif et hautes performances qui prend en charge les conteneurs Docker et vous permet d'exécuter facilement des applications sur un cluster géré d'instances Amazon EC2 ...

ECS utilise des conteneurs fournis par Fargate pour faire évoluer, équilibrer la charge et gérer automatiquement la planification de vos conteneurs

Cela signifie qu'un vCPU est essentiellement le même qu'un vCPU d'instance EC2. De la docs :

Les instances Amazon EC2 prennent en charge la technologie Intel Hyper-Threading, qui permet à plusieurs threads de s'exécuter simultanément sur un seul cœur de processeur Intel Xeon. Chaque vCPU est un hyperthread d'un cœur de processeur Intel Xeon, à l'exception des instances T2.

Alors pour répondre à vos questions:

  1. Si vous allouez 4 vCPU à une seule application threadée - elle n'utilisera jamais qu'un seul vCPU, car un vCPU est simplement un hyperthread d'un seul cœur.

  2. Lorsque vous sélectionnez 4 vCPU, vous affectez essentiellement 4 hyperthreads à un seul cœur physique. Ainsi, votre application à thread unique n'utilisera toujours qu'un seul noyau.

Si vous voulez un contrôle plus fin des ressources CPU - comme l'allocation de plusieurs cœurs (qui peuvent être utilisés par une seule application threadée) - vous devrez probablement utiliser le type de lancement EC2 (et gérer vos propres serveurs) plutôt que d'utiliser Fargate.

5
moebius