Drainage de la connexion de l'équilibreur de charge - 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.

Drainage de la connexion de l'équilibreur de charge

Pour permettre l'optimisation, les clients maintiennent une connexion permanente au service de conteneurs. Cela permet aux demandes 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.

Le schéma suivant décrit le processus de vidange de la connexion de l'équilibreur de charge. Lorsque vous demandez à l'équilibreur de charge d'arrêter le trafic vers le conteneur, il vérifie régulièrement si le client a fermé la connexion Keep Alive. L'agent Amazon ECS surveille l'équilibreur de charge et attend qu'il indique que la connexion Keep Alive est fermée.

Schéma montrant le vidange du conteneur de l'équilibreur de charge.

La durée d'attente de l'équilibreur de charge correspond au délai de désinscription. 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 5 secondes lorsqu'un service comporte des demandes de longue durée, telles que des téléchargements de fichiers lents ou des connexions de streaming.

Réactivité SIGTERM

Le schéma suivant montre comment Amazon ECS met fin à une tâche. Amazon ECS envoie d'abord un signal SIGTERM à la tâche pour indiquer que l'application doit se terminer et s'arrêter, puis Amazon ECS envoie un message SIGKILL. Lorsque les applications ignorent le SIGTERM, le service Amazon ECS doit attendre d'envoyer le signal SIGKILL pour mettre fin au processus.

Schéma illustrant le service Amazon ECS qui envoie les messages SIGTERM et SIGKILL.

Le temps d'attente d'Amazon ECS est déterminé 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 la section Configuration de l'agent de conteneur dans le manuel Amazon Elastic Container Service Developer Guide.

Pour accélérer le délai d'attente, définissez l'option de l'agent Amazon ECS sur la valeur suivante :

Note

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

  • ECS_CONTAINER_STOP_TIMEOUT : 2

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 à arrêter d'écouter les nouvelles demandes, à terminer de répondre à toutes les demandes en cours, puis le processus Node.js s'arrête. En effet, sa boucle d'événements n'a plus rien à voir. Cela étant, si le processus ne prend que 500 ms pour terminer ses demandes en cours de vol, il se termine plus tôt sans avoir à attendre la fin du délai d'arrêt et à recevoir un SIGKILL.