Comment choisir une instance EC2 ?

Vous souhaitez lancer le backend de votre application sur le cloud AWS mais n'arrivez pas à faire un choix parmi les 750+ types d'instances EC2 disponibles avec leurs petits noms charmants ? (bonjour t3.micro, g6e.8xlarge et m7i-flex.large)
Cet article est fait pour vous !

C'est quoi EC2 ?

EC2 (Elastic Compute Cloud), est un service de cloud computing proposé par AWS. Ce service propose la location de serveurs virtuels dans le cloud.
Mais comment un serveur peut-il être "virtuel" ?
En fait, AWS possède d'énormes ordinateurs très puissants. Sur ces ordinateurs, un logiciel permet d'émuler d'autres ordinateurs en leur associant une partie des ressources (calcul, mémoire RAM). On dit "virtuel" pour le différencier d'un serveur "physique", qu'on appelle aussi "bare metal".
En pratique, un serveur virtuel, c'est presque comme avoir un vrai serveur physique, certes il y a un léger coût de performance à cause du logiciel de virtualisation, mais en contrepartie il y a de gros avantages. Par exemple, si on se rend compte lors de l'utilisation qu'on a besoin de plus de performances, on peut juste demander à AWS "donne moi plus de puissance de calcul et 4 Go de RAM supplémentaires" et le logiciel de virtualisation met à jour la capacité de notre instance, ce qui serait beaucoup plus compliqué avec un serveur physique.
Ce qui différencie EC2 des autres services similaires, c'est la très grande gamme de produits disponibles. En effet EC2 avec ses centaines de types d'instances, couvre une très grande surface de cas d'utilisations différents ! Du petit backoffice interne au backend d'API au trafic élevé. De la base de données temps réel au serveur d'encoding vidéo. De la VM windows au serveur d'entrainement de réseau de neurone... Bref, on peut tout faire quoi !
Oui enfin, on peut tout faire seulement si on arrive à trouver l'instance qui nous correspond.
Avant de rentrer dans le vif du sujet, je vous propose de faire une petite parenthèse vocabulaire pour bien comprendre de quoi on parle, surtout sur un sujet important : le CPU !

Le CPU et les vCPUs EC2

Un CPU (Central Processing Unit), souvent appelé “processeur”, exécute les instructions des programmes, effectue des calculs et gère les opérations de base du système. En bref, c’est le "cerveau" de l'ordinateur. On quantifie sa puissance de plusieurs manières. D'une part, il y a la fréquence, mesurée en GHz (gigahertz) qui représente (plus ou moins) le nombre d'opérations par seconde que peut effectuer le processeur. D'autre part, il y a le nombre de coeurs et threads qui représentent le nombre de tâches simultanées que le processeur peut effectuer. Par exemple, un processeur avec 4 threads pourra "réfléchir" à 4 choses en même temps.
Selon l’entreprise qui a conçu le CPU, l’architecture interne et les instructions disponibles peuvent changer énormément, ce qui fait que certains logiciels ne fonctionnent que pour une architecture de CPU. Aujourd'hui on retrouve principalement 2 architectures de processeurs : x86 et ARM :
  • x86 c’est l’architecture la plus commune aujourd’hui, on la retrouve dans la plupart des ordinateurs et des serveurs. Dans cette architecture, souvent 1 cœur = 2 threads.
  • ARM c’est une architecture qui est de plus en plus populaire du fait notamment de sa faible consommation d'énergie et de son coût de fabrication plus faible. Elle est utilisée pour les smartphones, les tablettes, les Mac M1, M2, M3... et de plus en plus de serveurs ! Dans cette architecture, souvent 1 cœur = 1 thread.
Ensuite, sa contrepartie "virtualisée" : le vCPU !
Chez AWS, la définition d’un vCPU change en fonction de l’architecture du processeur :
  • x86 : 1 vCPU = 1 thread d’un cœur de processeur
  • ARM : 1 vCPU = 1 cœur
Parfait, vous avez les bases, reprenons...

Les noms des types d'instances

Les noms des types d'instances respectent une convention de nommage précise :
Nous allons parcourir les différentes parties du nom d'un type d'instance, n'hésitez pas à revenir sur l'image de temps en temps pour bien comprendre quelle partie correspond à quoi.

Familles d'instances et série

La première lettre indique la série au sein d'une famille d'instance, il y a 5 grandes familles et beaucoup de sous-catégories appelées "séries" :
  • Usage général
    • M - ratio vCPU mémoire de 1:4 (par exemple 4 vCPUs et 16 Go de RAM)
    • T - instance "Burstable", nous y reviendrons
    • Mac – instance qui tourne sous macOS
  • Optimisées pour le calcul
    • C - ratio vCPU mémoire de 1:2
  • Optimisées pour la mémoire
    • R - ratio vCPU mémoire de 1:8 (jusqu'à 1 536 Go de mémoire)
    • X – jusqu'à 4 To de mémoire
    • U – jusqu'à 32 To de mémoire, (U comme Ubuesque je pense)
  • Optimisées pour le stockage (généralement des instances avec des gros disque durs et de bonnes performances réseau)
    • Im – ratio vCPU mémoire de 1:4
    • Is – ratio vCPU mémoire de 1:6
    • D – Stockage Dense (jusqu'à 336 To de stockage HDD)
  • Calcul accéléré
    • P – Calcul accéleré avec processeur graphique (GPU)
    • G – Graphismes intensifs
    • VTVideo Transcoding
    • DL1 – Calcul accéleré avec processeur Intel® Gaudi®
    • Inf – AWS Inferentia (conçu pour prendre en charge les besoins d'inférence de machine learning)
    • Trn – AWS Trainium (conçu pour prendre en charge les besoins d'apprentissage de deep learning)
    • F – FPGA, Field-Programmable Gate Array (hardware programmable pour des tâches spécifiques)

Génération de la famille d'instance

Le chiffre qui suit indique la génération de l'instance au sein de cette famille. Généralement quand AWS sort une nouvelle génération, elle est à la fois plus performante et légèrement moins couteuse que la génération précédente, ce qui invite les utilisateurs à migrer vers la génération la plus récente.

Les options des instances

Certaines familles d'instances offrent différentes options, qui correspondent chacune à une lettre :
  • a – processeurs AMD
  • g – Processeurs Graviton AWS. Ces processeurs utilisent l'architecture ARM, les instances graviton sont généralement beaucoup moins chères que les instances avec des processeurs x86. AWS dit par exemple pour que les instances T4g offrent un rapport prix/performances jusqu'à 40 % supérieur à celui des instances T3.
  • i – Processeurs Intel
  • flex – Instance Flex
  • b – Optimisation du stockage par blocs
  • d – Volumes de stockage d’instances
  • e – Espace de stockage ou de mémoire supplémentaire
  • n – Optimisation réseau et EBS (Elastic Block Storage)
  • q – Accélérateurs d’inférence Qualcomm
  • z – Haute performance

Les tailles d'instances

Il n'y a pas grand chose à dire de ce côté là c'est assez explicite, voici dans l'ordre les différentes tailles qui existent (toutes les familles d'instances n'ont pas toutes les tailles disponibles) :
nano < micro < small < medium < large < xlarge < 2xlarge < 4xlarge < Nxlarge < metal
Les tailles "metal" indiquent qu'il s'agit d'un serveur "bare metal" c'est-à-dire qu'il n'y a pas de virtualisation des ressources (on accède au CPU et à la RAM sans étape de virtualisation).

Les instances T

Pour la grande majorité des instances, si on a 1 vCPU on paie pour pouvoir utiliser 100% de ce vCPU. Cependant, AWS s'est rendu compte que dans la majorité des cas, une instance EC2 n'a pas besoin d'utiliser 100% du CPU en permanence.
C'est basé sur ce constat que les instances T sont apparues. Ces instances sont dites "burstable". Elles permettent avec un tarif avantageux, de payer pour l'utilisation d'un certain pourcentage du CPU (par exemple 40%). Si l'on consomme moins, on gagne des "crédits", et si on consomme plus, on perd des "crédits", si on arrive à 0 "crédits" et que notre utilisation du CPU est toujours suppérieure au pourcentage de base, alors on paie à l'utilisation supplémentaire.
Cela permet au logiciel de virtualisation sur la machine hôte de créer beaucoup plus d'instances virtuelles, AWS s'assure juste de pouvoir donner au minimum à chaque VM le pourcentage de CPU pour lequel il paie. Si jamais une des instances veut aller au dela de son pourcentage d'utilisation et utiliser ses crédits, elle peut si il reste des ressources de calcul disponible sur la machine hôte.
Les instances burstable sont une très bonne option économique pour les tâches qui en moyenne n'ont pas besoin de beaucoup de performances, mais qui doivent de temps en temps soutenir une charge plus importante, par exemple les environnements de tests.
Ce type d'instances permet de faire des économies à AWS en fournissant plus d'instances par machine hôte, ces économies sont ensuite répercutées sur le prix des instances T, ce qui explique le tarif avantageux.
Pour donner un ordre d'idée, voici le pourcentage de base auquel on a droit pour les différentes tailles d'instances T (ce sont les mêmes pourcentages par taille pour toute la gamme "burstable" T3, T3a, T4g, T2)
  • nano 5%
  • micro 10%
  • small 20%
  • medium 20%
  • large 30%
  • xlarge 40%
  • 2xlarge 40%

Les instances flex

Les instances flex sont toutes récentes (mai 2024) et ressemblent beaucoup aux instances burstables, mais avec des assurances différentes.
Les instances flex garantissent une performance CPU de base de 40 % tout en ayant la capacité de monter en charge jusqu'à la capacité maximale pendant 95 % du temps sur une période de 24 heures. Les 5% du temps restant, on ne pourra potentiellement pas dépasser 40% du CPU.
Pour le moment seule la série M7i possède une version flex (M7i-Flex), mais il est possible que d'autres séries voient le jour dans le futur !

Références

C'est la fin de cet article, je mets ici en vrac des articles intéressants pour aller plus loin !
Vous souhaitez être accompagné pour lancer votre projet digital ?
Déposez votre projet dès maintenant
Comment changer de version de Node.js avec NVM ?
Vous voulez changer rapidement de version de `node` ? nvm est l’outil qu’il vous faut. Pourquoi nvm ? `node` est un exécutable. ...
Florian Yusuf Ali
Florian Yusuf Ali
Full-Stack Developer @ Galadrim
Next.js App Router : le cache et ses dangers
“Il y a seulement 2 problèmes compliqués en informatique : nommer les choses, et l’invalidation de cache”. Phil Karlton. Avec ...
Valentin Gerest
Valentin Gerest
Full-Stack Developer @ Galadrim
Qu'est-ce que le SMS pumping et comment s'en protéger ?
La fraude appelée SMS pumping survient lorsque des fraudeurs exploitent un champ de saisie de numéro de téléphone de votre ...
Arnaud Albalat
Arnaud Albalat
CTO @ Galadrim