Meilleures pratiques - Accélération du lancement des tâches - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Meilleures pratiques - Accélération du lancement des tâches

Vous pouvez apporter plusieurs améliorations pour réduire le temps nécessaire à Amazon ECS pour lancer vos tâches.

Flux de travail de lancement des tâches Amazon ECS

Il est utile de comprendre comment Amazon ECS provisionne vos tâches pour réfléchir aux optimisations visant à accélérer le lancement de vos tâches. Lorsque vous lancez des tâches Amazon ECS (tâches autonomes ou par les services Amazon ECS), une tâche est créée et initialement mise dans PROVISIONING l'état avant d'être lancée avec succès dans l'RUNNINGétat (pour plus de détails, consultez le cycle de vie des tâches dans le manuel Amazon ECS Developer Guide). Dans PROVISIONING cet état, ni la tâche ni les conteneurs n'existent car Amazon ECS doit trouver la capacité de calcul pour placer la tâche.

Amazon ECS sélectionne la capacité de calcul appropriée pour votre tâche en fonction de votre type de lancement ou de la configuration de votre fournisseur de capacité. Les types de lancement sont AWS Fargate (Fargate) Amazon EC2 activé AWS, et le EXTERNAL type utilisé avec Amazon ECS Anywhere. Les fournisseurs de capacité et les stratégies des fournisseurs de capacité peuvent être utilisés avec les types de lancement Fargate et Amazon EC2. Avec Fargate, vous n'avez pas à penser au provisionnement, à la configuration et au dimensionnement de la capacité de votre cluster. Fargate s'occupe de toute la gestion de l'infrastructure pour vos tâches. Pour Amazon ECS avec Amazon EC2, vous pouvez soit gérer la capacité de votre cluster en enregistrant des instances Amazon EC2 dans votre cluster, soit utiliser Amazon ECS Cluster Auto Scaling (CAS) pour simplifier la gestion de votre capacité de calcul. CAS prend en charge le dimensionnement dynamique de la capacité de votre cluster, afin que vous puissiez vous concentrer uniquement sur l'exécution des tâches. Amazon ECS détermine où placer la tâche en fonction des exigences que vous spécifiez dans la définition de la tâche, telles que le processeur et la mémoire, ainsi que de vos contraintes et stratégies de placement. Pour plus de détails sur le placement des tâches, consultez le placement des tâches Amazon ECS.

Après avoir trouvé la capacité de placer votre tâche, Amazon ECS fournit les pièces jointes nécessaires (par exemple, Elastic Network Interfaces (ENI) pour les tâches en awsvpc mode) et utilise l'agent de conteneur Amazon ECS pour extraire les images de vos conteneurs et démarrer vos conteneurs. Une fois que tout cela est terminé et que les conteneurs concernés ont été lancés, Amazon ECS fait passer la tâche à RUNNING l'état.

Flux de travail Amazon ECS Service Scheduler

Amazon ECS fournit un planificateur de services pour gérer l'état de vos services. Le planificateur de services garantit le respect de la stratégie de planification que vous spécifiez et replanifie les tâches défaillantes. Par exemple, si l'infrastructure sous-jacente échoue, le planificateur de services peut replanifier des tâches. L'une des principales responsabilités du planificateur de services est de s'assurer que votre application exécute toujours le nombre de tâches souhaité, en fonction du nombre souhaité que vous spécifiez dans la configuration du service ou du nombre de tâches redimensionné automatiquement en fonction de la charge de l'application si vous utilisez le dimensionnement automatique des services. Le planificateur de services utilise des flux de travail asynchrones pour lancer des tâches par lots. Pour comprendre le fonctionnement du planificateur de services, imaginez que vous créiez un service Amazon ECS pour une API Web volumineuse recevant un trafic important. Vous vous attendez à ce que ce service gère un trafic Web important et vous déterminez que le nombre souhaité pour le service est de 1 000 tâches. Lorsque vous déployez ce service, le planificateur de services Amazon ECS ne lance pas les 1 000 tâches en même temps. Au lieu de cela, il commencera à exécuter des cycles de flux de travail pour ramener l'état actuel (0 tâche) à l'état souhaité (1 000 tâches), chaque cycle de flux de travail lançant un lot de nouvelles tâches. Le planificateur de services peut fournir jusqu'à 500 tâches pour les types de lancement Fargate, Amazon EC2 et externe par service et par minute. Pour plus d'informations sur les taux et quotas autorisés dans Amazon ECS, consultez la section Quotas de service Amazon ECS.

Maintenant que vous comprenez le flux de travail de lancement de tâches Amazon ECS, voyons comment vous pouvez utiliser certaines de ces connaissances pour accélérer le lancement de vos tâches.

Recommandations pour accélérer le lancement des tâches

Comme indiqué dans la section précédente, le délai entre le déclenchement du lancement des tâches (via les API Amazon ECS ou le planificateur de services) et le démarrage réussi de vos conteneurs dépend de divers facteurs liés à Amazon ECS, à vos configurations et au conteneur lui-même. Afin d'accélérer le lancement de vos tâches, tenez compte des recommandations suivantes.

  • Mettez en cache les images de conteneur et les instances binpack.

    Si vous exécutez Amazon ECS sur Amazon EC2, vous pouvez configurer l'agent de conteneur Amazon ECS pour mettre en cache les images de conteneur précédemment utilisées afin de réduire le temps d'extraction des images pour les lancements ultérieurs. L'effet de la mise en cache est encore plus important lorsque vous avez une densité de tâches élevée dans vos instances de conteneur, que vous pouvez configurer à l'aide de la stratégie de binpack placement. La mise en cache des images de conteneur est particulièrement avantageuse pour les charges de travail basées sur Windows qui ont généralement des tailles d'image de conteneur importantes (des dizaines de Go). Lorsque vous utilisez la stratégie de binpack placement, vous pouvez également envisager d'utiliser le trunking Elastic Network Interface (ENI) pour placer davantage de tâches en mode awsvpc réseau sur chaque instance de conteneur. Le trunking ENI augmente le nombre de tâches que vous pouvez exécuter en awsvpc mode. Par exemple, une instance c5.large qui peut prendre en charge l'exécution simultanée de seulement 2 tâches peut exécuter jusqu'à 10 tâches avec le trunking ENI.

  • Choisissez le mode réseau optimal.

    Bien que le mode awsvpc réseau soit idéal dans de nombreux cas, ce mode réseau peut intrinsèquement augmenter la latence de lancement des tâches. Pour chaque tâche en awsvpc mode, les flux de travail Amazon ECS doivent fournir et associer un ENI en invoquant les API Amazon EC2, ce qui ajoute un surcoût de plusieurs secondes au lancement de vos tâches. En revanche, l'un des principaux avantages du mode awsvpc réseau est que chaque tâche possède un groupe de sécurité qui autorise ou refuse le trafic. Cela signifie que vous disposez d'une plus grande flexibilité pour contrôler les communications entre les tâches et les services à un niveau plus détaillé. Si les avantages de la vitesse de déploiement l'emportent sur ceux du awsvpc mode, vous pouvez envisager d'utiliser le bridge mode pour accélérer le lancement des tâches. Pour en savoir plus sur les avantages relatifs de chaque mode réseau, reportez-vous aux sections AWSVPC mode etMode Bridge.

  • Suivez le cycle de vie de lancement de vos tâches pour identifier les opportunités d'optimisation.

    Il est souvent difficile de se rendre compte du temps nécessaire au démarrage de votre application. Le lancement de votre image de conteneur, l'exécution de scripts de démarrage et d'autres configurations lors du démarrage de l'application peuvent prendre un temps surprenant. Vous pouvez utiliser le point de terminaison des métadonnées de l'agent ECS pour publier des métriques permettant de suivre le temps de démarrage de l'application ContainerStartTime jusqu'au moment où celle-ci est prête à traiter le trafic. Grâce à ces données, vous pouvez comprendre comment votre application contribue au temps de lancement total et identifier les domaines dans lesquels vous pouvez réduire les frais inutiles spécifiques à l'application et optimiser les images de vos conteneurs.

  • Choisissez un type d'instance optimal (lorsque vous utilisez Amazon ECS sur Amazon EC2).

    Le choix du type d'instance approprié dépend de la réservation de ressources (processeur, mémoire, ENI, GPU) que vous configurez pour votre tâche. Ainsi, lors du dimensionnement de l'instance, vous pouvez calculer le nombre de tâches pouvant être placées sur une seule instance. Un exemple simple de tâche bien placée consiste à héberger 4 tâches nécessitant 0,5 vCPU et 2 Go de réservations de mémoire dans une instance m5.large (prenant en charge 2 vCPU et 8 Go de mémoire). Les réservations de cette définition de tâche tirent pleinement parti des ressources de l'instance.

  • Utilisez le planificateur de services Amazon ECS pour lancer des services simultanément.

    Comme indiqué dans la section précédente, le planificateur de services peut lancer simultanément des tâches pour plusieurs services à l'aide de flux de travail asynchrones. Ainsi, vous pouvez accélérer le déploiement en concevant vos applications sous la forme de petits services comportant moins de tâches plutôt que d'un grand service comportant un grand nombre de tâches. Par exemple, au lieu d'avoir un seul service avec 1 000 tâches, le fait de disposer de 10 services comportant chacun 100 tâches se traduira par une vitesse de déploiement beaucoup plus rapide, puisque le planificateur de services initiera le provisionnement des tâches pour tous les services en parallèle.