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 :
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
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
VT – Video 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 !