Politique de dimensionnement basée sur Amazon SQS - Amazon EC2 Auto Scaling

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.

Politique de dimensionnement basée sur Amazon SQS

Important

Les informations et étapes suivantes vous montrent comment calculer le backlog de SQS file d'attente Amazon par instance à l'aide de l'attribut ApproximateNumberOfMessages queue avant de le publier sous forme de métrique personnalisée sur. CloudWatch Cependant, vous pouvez désormais réduire les coûts et les efforts consacrés à la publication de votre propre métrique en utilisant une expression mathématique appliquée à une métrique. Pour de plus amples informations, veuillez consulter Création d'une politique de dimensionnement pour le suivi des cibles à l'aide de mathématiques métriques.

Cette section explique comment dimensionner votre groupe Auto Scaling en réponse aux modifications de la charge du système dans une file d'attente Amazon Simple Queue Service (AmazonSQS). Pour en savoir plus sur la façon dont vous pouvez utiliser AmazonSQS, consultez le guide du développeur Amazon Simple Queue Service.

Dans certains scénarios, vous pourriez envisager de procéder à une mise à l'échelle en réponse à l'activité d'une SQS file d'attente Amazon. Supposons par exemple que vous disposez d'une application web qui permet aux utilisateurs de charger des images et de les utiliser en ligne. Dans ce scénario, chaque image doit être codée et redimensionnée avant de pouvoir être publiée. L'application s'exécute sur EC2 des instances d'un groupe Auto Scaling, et elle est configurée pour gérer vos taux de téléchargement habituels. Les instances non saines sont résiliées et remplacées pour maintenir des niveaux d'instance actuels à tout moment. L'application place les données bitmap brutes des images dans une SQS file d'attente pour traitement. Elle traite les images, puis publie les images traitées à un emplacement où elles peuvent être affichées par les utilisateurs. L'architecture de ce scénario fonctionne correctement si le nombre de chargements d'images ne varie pas au fil du temps. En revanche, si le nombre de chargements varie au fil du temps, vous pouvez envisager d'utiliser la mise à l'échelle dynamique pour mettre à l'échelle la capacité de votre groupe Auto Scaling.

Utiliser un suivi de la cible avec la métrique appropriée

Si vous utilisez une politique de dimensionnement du suivi des cibles basée sur une métrique de SQS file d'attente Amazon personnalisée, le dimensionnement dynamique peut s'adapter plus efficacement à la courbe de demande de votre application. Pour de plus amples informations sur le choix des métriques pour le suivi de la cible, veuillez consulter Choisissez métriques.

Le problème lié à l'utilisation d'une SQS métrique CloudWatch Amazon, comme ApproximateNumberOfMessagesVisible pour le suivi des cibles, est que le nombre de messages dans la file d'attente peut ne pas changer proportionnellement à la taille du groupe Auto Scaling qui traite les messages de la file d'attente. En effet, le nombre de messages dans votre SQS file d'attente ne définit pas uniquement le nombre d'instances nécessaires. Le nombre d'instances du groupe Auto Scaling peut être dicté par plusieurs facteurs, y compris le temps nécessaire pour traiter un message et la durée de latence acceptable (délai de file d'attente).

La solution consiste à utiliser une métrique d'éléments en attente par instance avec la valeur cible constituant les éléments en attente acceptables par instance à conserver. Vous pouvez calculer ces valeurs comme suit :

  • Backlog par instance : pour calculer votre backlog par instance, commencez par l'attribut ApproximateNumberOfMessages queue afin de déterminer la longueur de la SQS file d'attente (nombre de messages pouvant être extraits de la file d'attente). Divisez ce nombre par la capacité d'exécution du parc, ce qui correspond dans le cas d'un groupe Auto Scaling au nombre d'instances dans l'état InService, pour obtenir les éléments en attente par instance.

  • Éléments en attente acceptables par instance : pour calculer votre valeur cible, commencez par déterminer ce que votre application peut accepter en termes de latence. Ensuite, prenez la valeur de latence acceptable et divisez-la par le temps moyen nécessaire à une EC2 instance pour traiter un message.

Par exemple, disons que vous avez actuellement un groupe Auto Scaling avec 10 instances et le nombre de messages visibles dans la file d'attente (ApproximateNumberOfMessages) s'élève à 1500. Si le temps de traitement moyen est de 0,1 seconde pour chaque message et si la plus grande latence acceptable est de 10 secondes, alors les éléments en attente acceptables par instance sont de 10/0,1, ce qui équivaut à 100 messages. Cela signifie que 100 est la valeur cible pour votre politique de suivi des objectifs et d'échelonnement. Lorsque les éléments en attente par instance atteignent la valeur cible, une diminution se produit. Si les éléments en attente par instance sont actuellement à 150 messages (1500 messages / 10 instances), votre groupe augmente de cinq instances pour maintenir la proportion de la valeur cible.

Les procédures suivantes montrent comment publier la métrique personnalisée et créer la politique de suivi des objectifs et d'échelonnement qui configure la mise à l'échelle du groupe Auto Scaling en fonction de ces calculs.

Important

N'oubliez pas que pour réduire les coûts, vous pouvez utiliser une expression mathématique appliquée à une métrique. Pour de plus amples informations, veuillez consulter Création d'une politique de dimensionnement pour le suivi des cibles à l'aide de mathématiques métriques.

Il existe trois parties principales pour cette configuration :

  • Un groupe Auto Scaling pour gérer les EC2 instances dans le but de traiter les messages d'une SQS file d'attente.

  • Une métrique personnalisée à envoyer à Amazon CloudWatch qui mesure le nombre de messages dans la file d'attente par EC2 instance du groupe Auto Scaling.

  • Une politique de suivi des cibles qui configure votre groupe Auto Scaling pour qu'il évolue en fonction de la métrique personnalisée et d'une valeur cible définie. CloudWatch les alarmes invoquent la politique de dimensionnement.

Le graphique suivant illustre l'architecture de cette configuration.

Schéma architectural EC2 d'Amazon Auto Scaling utilisant les files d'attente

Limitations et prérequis

Pour utiliser cette configuration, vous devez être conscient des limitations suivantes :

  • Vous devez utiliser le AWS CLI ou an SDK pour publier votre métrique personnalisée sur CloudWatch. Vous pouvez ensuite surveiller votre métrique à l'aide du AWS Management Console.

  • La console Amazon EC2 Auto Scaling ne prend pas en charge les politiques de dimensionnement du suivi des cibles qui utilisent des métriques personnalisées. Vous devez utiliser le AWS CLI ou an SDK pour spécifier une métrique personnalisée pour votre politique de dimensionnement.

Les sections suivantes vous indiquent comment utiliser le AWS CLI pour les tâches que vous devez effectuer. Par exemple, pour obtenir des données métriques reflétant l'utilisation actuelle de la file d'attente, vous devez utiliser la SQS get-queue-attributescommande. Assurez-vous que vous les avez CLI installés et configurés.

Avant de commencer, vous devez disposer d'une SQS file d'attente Amazon à utiliser. Les sections suivantes supposent que vous disposez déjà d'une file d'attente (standard ouFIFO), d'un groupe Auto Scaling et d'EC2instances exécutant l'application qui utilise la file d'attente. Pour plus d'informations sur AmazonSQS, consultez le manuel Amazon Simple Queue Service Developer Guide.

Amazon SQS et la protection évolutive des instances

Les messages qui n'ont pas été traités au moment de la fermeture d'une instance sont renvoyés dans la SQS file d'attente où ils peuvent être traités par une autre instance toujours en cours d'exécution. Pour les applications dans lesquelles des tâches longues sont exécutées, vous pouvez éventuellement utiliser la protection contre la mise à l'échelle horizontale d'instance pour contrôler les processus Worker de file d'attente qui sont résiliés lorsque votre groupe Auto Scaling est mis à l'échelle.

Le pseudocode suivant illustre une façon de protéger les processus Worker de longue durée pilotés par la file d'attente contre la résiliation de mise à l'échelle horizontale.

while (true) { SetInstanceProtection(False); Work = GetNextWorkUnit(); SetInstanceProtection(True); ProcessWorkUnit(Work); SetInstanceProtection(False); }

Pour de plus amples informations, veuillez consulter Concevez vos applications pour gérer avec élégance la résiliation des instances.