Fargate contre Lambda a récemment été un sujet tendance dans l’espace sans serveur. Fargate et Lambda sont deux options informatiques sans serveur populaires disponibles dans l’écosystème AWS. Bien que les deux outils offrent une informatique sans serveur, ils diffèrent en ce qui concerne les cas d’utilisation, les limites opérationnelles, les allocations de ressources d’exécution, le prix et les performances. Ce blog vise à approfondir la bataille Fargate contre Lambda.
Qu’est-ce qu’AWS Fargate ?
AWS Fargate est un moteur informatique sans serveur proposé par Amazon qui vous permet de gérer efficacement les conteneurs sans les tracas liés à l’approvisionnement des serveurs et de l’infrastructure sous-jacente. Lorsque les tâches de gestion de la capacité du cluster, de gestion de l’infrastructure, de correction et de provisionnement des ressources sont supprimées, vous pouvez enfin vous concentrer sur la fourniture d’applications plus rapides et de meilleure qualité. AWS Fargate fonctionne avec Amazon Elastic Container Service (ECS) et Amazon Elastic Kubernetes Service (EKS), prenant en charge une gamme de cas d’utilisation de conteneurs tels que les applications d’apprentissage automatique, les applications d’architecture de microservices, la migration d’applications sur site vers le cloud et les tâches de traitement par lots. .
Sans AWS Fargate
- Les développeurs créent des images de conteneurs
- Définir des instances EC2 et les déployer
- Provisionnez la mémoire et les ressources de calcul et gérez-les
- Créer des machines virtuelles distinctes pour isoler les applications
- Exécuter et gérer des applications
- Exécuter et gérer l’infrastructure
- Payer les frais d’utilisation des instances EC2
Quand AWS Fargate est implémenté
- Les développeurs créent des images de conteneurs
- Définir les ressources de calcul et de mémoire
- Exécuter et gérer des applications
- Payer les frais d’utilisation des ressources de calcul
Dans le contexte Fargate vs Lambda, Fargate est l’option de calcul sans serveur dans AWS utilisée lorsque vous avez déjà des conteneurs pour votre application et que vous souhaitez simplement les orchestrer plus facilement et plus rapidement. Il fonctionne avec Elastic Kubernetes Service (EKS) ainsi qu’avec Elastic Container Service (ECS).
EKS et ECS ont deux types d’options de calcul :
1. Type EC2: Avec cette option, vous devez gérer la complexité de la configuration des instances/serveurs. Cela peut être un défi pour les utilisateurs inexpérimentés. Vous devez configurer vos instances EC2 et placer des conteneurs à l’intérieur des serveurs avec l’aide des configurations ECS ou EKS.
2. Type Fargate : Cette option vous permet de réduire la charge de gestion du serveur tout en mettant à jour et en augmentant facilement les limites de configuration requises pour exécuter Fargate.
Qu’est-ce que le sans serveur ?
Avant de plonger profondément dans la bataille informatique sans serveur de Lambda contre Fargate ou Fargate contre Lambda, il est important d’abord d’acquérir une compréhension de base du concept sans serveur. L’informatique sans serveur est une technologie qui permet aux développeurs d’exécuter des applications sans avoir à provisionner l’infrastructure du serveur. Le fournisseur de cloud fournira l’infrastructure backend à la demande et vous facturera selon un modèle de paiement à l’utilisation.
Le terme « sans serveur » peut être trompeur pour certaines personnes. En effet, il est important de noter que la technologie sans serveur n’implique pas l’absence de serveurs. Au lieu de cela, le fournisseur de cloud gérera l’infrastructure du serveur avec cette technologie, permettant aux développeurs de concentrer leurs efforts sur le code frontal et la logique d’une application. Les ressources sont tournées lorsque le code exécute une fonction et se termine lorsque la fonction s’arrête. La facturation est basée sur la durée du temps d’exécution des ressources. Par conséquent, les coûts opérationnels sont optimisés car vous ne payez pas pour les ressources inutilisées.
Grâce à la technologie sans serveur, vous pouvez dire adieu à la planification des capacités, aux charges administratives et à la maintenance. De plus, vous pouvez bénéficier d’une haute disponibilité et d’une reprise après sinistre sans frais. La mise à l’échelle automatique à zéro est également disponible. Enfin, l’utilisation des ressources est de 100 % et la facturation est effectuée de manière granulaire, mesurant 100 millisecondes comme unité.
Qu’est-ce qu’AWS Lambda ?
AWS Lambda est un service informatique sans serveur piloté par les événements. Lambda exécute un code prédéfini en réponse à un événement ou à une action, permettant aux développeurs d’effectuer des calculs sans serveur. Cette plateforme multiplateforme a été développée par Amazon et publiée pour la première fois en 2014. Elle prend en charge les principaux langages de programmation tels que C#, Python, Java, Ruby, Go et Node.js. Il prend également en charge l’exécution personnalisée. Certains des cas d’utilisation populaires de Lambda incluent la mise à jour d’une table DynamoDB, le téléchargement de données dans des compartiments S3 et l’exécution d’événements en réponse aux données des capteurs IoT. Le prix est basé sur les millisecondes d’utilisation, arrondi à la milliseconde la plus proche. De plus, Lambda vous permet de gérer des conteneurs Docker de tailles allant jusqu’à 50 Go via ECR.
Lorsque vous comparez Fargate à Lambda, Fargate est destiné aux applications conteneurisées exécutées pendant des jours, des semaines ou des années. Lambda est conçu spécifiquement pour gérer de petites portions d’une application, comme une fonction. Par exemple, une fonction qui efface le cache toutes les 6 heures et dure 30 secondes peut être exécutée à l’aide de Lambda.
Une architecture AWS Lambda typique
AWS Lambda est une fonction en tant que service (FaaS) qui aide les développeurs à créer des applications pilotées par les événements. Dans la couche de calcul de l’application, Lambda déclenche des événements AWS.
Quels sont les trois composants principaux de l’architecture Lambda ?
1) Fonction: Une fonction est un morceau de code écrit par les développeurs pour effectuer une tâche. Le code contient également les détails de l’environnement d’exécution de la fonction. Les environnements d’exécution sont basés sur Amazon Linux AMI et contiennent toutes les bibliothèques et tous les packages requis. La capacité et la maintenance sont gérées par AWS.
un. Paquet de codes: Le code empaqueté contenant les fichiers binaires et les actifs requis pour que le code s’exécute. La taille maximale est de 250 Mo ou 50 Mo dans une version compressée.
b. Gestionnaire: point de départ de la fonction invoquée exécutant une tâche basée sur des paramètres fournis par des objets d’événement.
c. Objet d’événement: paramètre fourni au gestionnaire pour exécuter la logique d’une opération.
d. Objet contextuel: Facilite l’interaction entre le code de la fonction et l’environnement d’exécution. Les données disponibles pour les objets de contexte incluent :
je. ID de demande AWS
ii. Temps restant pour que la fonction expire
iii. Journalisation des instructions dans CloudWatch
2) Configuration: Règles qui spécifient comment une fonction est exécutée.
un. Rôles IAM: attribue des autorisations aux fonctions pour interagir avec les services AWS.
b. Configuration du réseau: Spécifie des règles pour exécuter des fonctions à l’intérieur d’un VPC ou à l’extérieur d’un VPC.
c. Version: rétablit les fonctions des versions précédentes.
d. Cadran de mémoire: contrôle les allocations de ressources aux fonctions.
e. Variables d’environnement: Valeurs injectées dans le code lors de l’exécution.
F. Temps libre: Temps d’exécution d’une fonction.
3) Origine de l’événement: L’événement qui déclenche la fonction.
un. Modèle de poussée: Fonctions déclenchées via des objets S3, API Gateway et Amazon Alexa.
b. Modèle de traction: Lambda extrait les événements de DynamoDB ou Kinesis.
Une architecture AWS Fargate typique
Quels sont les quatre composants principaux de l’architecture AWS Fargate ?
1) Définition de tâche: fichier JSON décrivant les définitions d’au moins un des conteneurs d’application.
2) Tâche: Instanciation d’une définition de tâche au niveau d’un cluster.
3) Grappe: Tâches ou services regroupés logiquement dans Amazon ECS.
4) Service: processus qui exécute des tâches dans le cluster Amazon ECS en fonction de définitions de tâches.
Fargate contre Lambda : performances
En ce qui concerne les performances dans le débat AWS Fargate contre Lambda, AWS Fargate est le gagnant, car il fonctionne sur des ressources dédiées. Lambda présente certaines limites en ce qui concerne l’allocation des ressources de calcul et de mémoire. En fonction de la quantité de RAM sélectionnée, AWS alloue les ressources CPU correspondantes, ce qui signifie que l’utilisateur ne peut pas personnaliser les ressources CPU. De plus, la mémoire maximale disponible pour les fonctions Lambda est de 10 Go, alors que Fargate autorise 120 Go de mémoire. De plus, Fargate vous permet de choisir jusqu’à 16 ressources vCPU. Un autre problème notable est qu’une fonction Lambda n’a qu’un temps d’exécution de 15 minutes pour chaque appel. D’autre part, en l’absence de limitations d’exécution, l’environnement Fargate est toujours dans un état chaud.
Les fonctions Fargate doivent être regroupées dans des conteneurs, ce qui augmente le temps de chargement à environ 60 secondes. C’est très long par rapport aux fonctions Lambda qui peuvent démarrer en 5 secondes. Fargate vous permet de lancer 20 tâches par seconde à l’aide de l’API ECS RunTask. De plus, vous pouvez lancer 500 tâches par service en 120 secondes avec ECS Service Scheduler. Cela dit, la mise à l’échelle de l’environnement lors de demandes de pointe inattendues et de la surveillance de l’état de santé a tendance à retarder légèrement le temps de démarrage.
Démarrages à froid Lambda
Lorsque Lambda reçoit une demande d’exécution d’une tâche, il commence par télécharger le code à partir des compartiments S3 et crée un environnement d’exécution basé sur la mémoire prédéfinie et ses ressources de calcul correspondantes. S’il existe un code d’initialisation, Lambda l’exécute en dehors de l’environnement, puis exécute le code du gestionnaire. Le temps nécessaire au téléchargement du code et à la préparation de l’environnement d’exécution est compté comme durée de démarrage à froid. Après avoir exécuté le code, Lambda gèle l’environnement afin que la même fonction puisse s’exécuter rapidement si elle est à nouveau invoquée. Si vous exécutez la fonction simultanément, chaque appel obtient un démarrage à froid. Il y aura également un début de code si le code est mis à jour. Le temps typique pour les démarrages à froid se situe entre 100 ms et 1 seconde. À la lumière de ce qui précède, Lambda échoue dans la course Lambda contre Fargate concernant les démarrages à froid. Cependant, Provisioned Concurrency est une solution pour réduire les démarrages à froid.
Le choix du temps d’exécution aura également un impact sur les démarrages à froid Lambda. Par exemple, le runtime Java implique plusieurs ressources pour exécuter l’environnement JVM, ce qui retarde le démarrage. D’autre part, les environnements d’exécution C# ou Node.js offrent des latences plus faibles.
Démarrages à froid Fargate
Fargate prend du temps pour provisionner les ressources et démarre une tâche. Une fois que l’environnement est opérationnel, les conteneurs obtiennent des ressources dédiées et exécutent le code tel que défini.
Fargate contre Lambda : Assistance
AWS Fargate fonctionne comme une couche opérationnelle d’une architecture informatique sans serveur pour gérer les environnements ECS basés sur Docker ou EKS basés sur Kubernetes. Pour ECS, vous pouvez définir des tâches de conteneur dans des fichiers texte…