Optimisation des paramètres de drainage de la connexion de l’équilibreur de charge pour Amazon ECS - 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.

Optimisation des paramètres de drainage de la connexion de l’équilibreur de charge pour Amazon ECS

Pour permettre l’optimisation, les clients maintiennent une connexion persistante au service de conteneurs. Cela permet aux requêtes ultérieures de ce client de réutiliser la connexion existante. Lorsque vous souhaitez arrêter le trafic vers un conteneur, vous devez en informer l’équilibreur de charge. L’équilibreur de charge vérifie régulièrement si le client a fermé la connexion persistante. Amazon ECS surveille l’équilibreur de charge et attend qu’il indique que la connexion persistante est fermée (la cible est dans un état UNUSED).

La durée pendant laquelle l’équilibreur de charge attend pour faire passer la cible à l’état UNUSED correspond au délai d’annulation de l’enregistrement. Vous pouvez configurer le paramètre d’équilibreur de charge suivant pour accélérer vos déploiements.

  • deregistration_delay.timeout_seconds : 300 (par défaut)

Lorsque vous disposez d’un service dont le temps de réponse est inférieur à une seconde, définissez le paramètre sur la valeur suivante pour que l’équilibreur de charge n’attende que cinq secondes avant de rompre la connexion entre le client et le service principal :

  • deregistration_delay.timeout_seconds : 5

Note

Ne définissez pas la valeur sur cinq secondes lorsqu’un service comporte des requêtes de longue durée, telles que des téléchargements de fichiers lents ou des connexions de streaming.

Réactivité à SIGTERM

Amazon ECS envoie d'abord un signal d'arrêt à la tâche pour indiquer que l'application doit se terminer et s'arrêter. Ce signal peut être défini dans l'image de votre conteneur à l'aide de l'instruction STOPSIGNAL et sera défini par défaut sur SIGTERM. Amazon ECS envoie ensuite un message SIGKILL. Lorsque les applications ignorent le signal SIGTERM, le service Amazon ECS doit attendre pour envoyer le signal SIGKILL afin de terminer le processus.

La durée pendant laquelle Amazon ECS attend avant d’envoyer le message SIGKILL est déterminée par l’option d’agent Amazon ECS suivante :

  • ECS_CONTAINER_STOP_TIMEOUT : 30 (par défaut)

    Pour plus d'informations sur le paramètre de l'agent de conteneur, consultez Amazon ECS Container Agent on GitHub.

Pour accélérer le délai d’attente, définissez le paramètre de l’agent Amazon ECS sur la valeur suivante :

  • ECS_CONTAINER_STOP_TIMEOUT : 2

    Si votre application prend plus d’une seconde, multipliez la valeur par deux et utilisez ce nombre comme valeur.

Dans ce cas, Amazon ECS attend deux secondes que le conteneur s’arrête, puis Amazon ECS envoie un message SIGKILL lorsque l’application ne s’arrête pas.

Vous pouvez également modifier le code de l’application pour intercepter le signal SIGTERM et y réagir. Voici un exemple dans JavaScript :

process.on('SIGTERM', function() { server.close(); })

Ce code oblige le serveur HTTP à cesser d’écouter les nouvelles requêtes et à finir de répondre aux requêtes en cours. Le processus Node.js se termine alors, car la boucle d’événements n’a plus rien à faire. Cela étant, si le processus ne prend que 500 ms pour terminer ses requêtes en cours de vol, il se termine prématurément sans avoir à attendre la fin du délai d’arrêt et sans recevoir de SIGKILL.