Otimização de parâmetros de drenagem da conexão do balanceador de carga para o Amazon ECS - Amazon Elastic Container Service

Otimização de parâmetros de drenagem da conexão do balanceador de carga para o Amazon ECS

Para permitir a otimização, os clientes mantêm uma conexão keep alive com o serviço de contêiner. Isto permite que solicitações subsequentes desse cliente reutilizem a conexão existente. Quando quiser interromper o tráfego de um contêiner, você notifica o balanceador de carga. O balanceador de carga verifica periodicamente se o cliente fechou a conexão keep-alive. O agente do Amazon ECS monitora o balanceador de carga e aguarda que ele informe que a conexão keep alive está fechada (o destino está em um estado UNUSED).

A quantidade de tempo que o balanceador de carga aguarda para mover o destino para o estado UNUSED equivale ao atraso no cancelamento do registro. Você pode configurar o parâmetro do balanceador de carga a seguir para acelerar as implantações.

  • deregistration_delay.timeout_seconds: 300 (padrão)

Quando houver um serviço com um tempo de resposta inferior a 1 segundo, defina o parâmetro com o seguinte valor para que o balanceador de carga espere apenas cinco segundos antes de interromper a conexão entre o cliente e o serviço de backend:

  • deregistration_delay.timeout_seconds: 5

nota

Não defina o valor como cinco segundos quando tiver um serviço com solicitações de longa duração, como uploads lentos de arquivos ou conexões de fluxo.

Capacidade de resposta do SIGTERM

O Amazon ECS primeiro envia um sinal de SIGTERM à tarefa para notificar que a aplicação precisa ser concluída e desligada. Em seguida, o Amazon ECS envia uma mensagem de SIGKILL. Quando as aplicações ignoram o SIGTERM, o serviço do Amazon ECS deve esperar para enviar o sinal de SIGKILL antes de encerrar o processo.

O tempo que o Amazon ECS espera para enviar a mensagem de SIGKILL é determinado pela seguinte opção de agente do Amazon ECS:

  • ECS_CONTAINER_STOP_TIMEOUT: 30 (padrão)

    Para obter mais informações sobre o parâmetro do agente de contêiner, consulte Amazon ECS Container Agent no GitHub.

Para acelerar o período de espera, defina o parâmetro do agente do Amazon ECS com o seguinte valor:

  • ECS_CONTAINER_STOP_TIMEOUT: 2

    Se a aplicação levar mais de um segundo, multiplique o valor por dois e use esse número como valor.

Nesse caso, o Amazon ECS aguarda dois segundos para que o contêiner seja desligado e, em seguida, envia uma mensagem de SIGKILL quando a aplicação não é interrompida.

Você também pode modificar o código da aplicação para capturar o sinal de SIGTERM e reagir a ele. O seguinte exemplo está em JavaScript:

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

Esse código faz com que o servidor HTTP pare de receber novas solicitações, termine de responder a todas as solicitações em andamento e, em seguida, encerra o processo Node.js porque o loop de eventos não tem nada para fazer. Diante disso, se o processo levar apenas 500 ms para concluir as solicitações em andamento, ele é encerrado mais cedo, sem precisar esperar o tempo limite de encerramento e receber um SIGKILL.