

# Otimização de parâmetros de drenagem da conexão do balanceador de carga para o Amazon ECS
<a name="load-balancer-connection-draining"></a>

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 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
<a name="sigterm"></a>

O Amazon ECS primeiro envia um sinal de parada à tarefa para notificar que a aplicação precisa ser concluída e encerrada. Esse sinal pode ser definido na imagem do contêiner com a instrução STOPSIGNAL e terá como padrão SIGTERM. 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](https://github.com/aws/amazon-ecs-agent/blob/master/README.md) 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. 