Ottimizzazione dei parametri di svuotamento della connessione del bilanciatore del carico per Amazon ECS - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Ottimizzazione dei parametri di svuotamento della connessione del bilanciatore del carico per Amazon ECS

Per consentire l'ottimizzazione, i client mantengono una connessione keep-alive al servizio container. Ciò consente alle richieste successive di quel client di riutilizzare la connessione esistente. Quando si desidera interrompere il traffico verso un container, si invia una notifica al bilanciatore del carico. Il bilanciatore del carico controlla periodicamente se il client ha chiuso la connessione keep-alive. Amazon ECS monitora il bilanciatore del carico e attende che il bilanciatore del carico segnali che la connessione keep-alive è chiusa (la destinazione è in uno stato UNUSED).

La quantità di tempo che il bilanciatore del carico attende per spostare la destinazione verso lo stato UNUSED corrisponde al ritardo di annullamento della registrazione. È possibile configurare il seguente parametro del bilanciatore del carico per velocizzare le implementazioni.

  • deregistration_delay.timeout_seconds: 300 (impostazione predefinita)

Se si dispone di un servizio con un tempo di risposta inferiore a 1 secondo, impostare il parametro sul valore seguente per fare in modo che il bilanciatore del carico attenda solo 5 secondi prima di interrompere la connessione tra il client e il servizio di backend:

  • deregistration_delay.timeout_seconds: 5

Nota

Non impostare il valore su 5 secondi quando si dispone di un servizio con richieste di lunga durata, come caricamenti lenti di file o connessioni in streaming.

Reattività SIGTERM

Amazon ECS invia innanzitutto un segnale di arresto all'attività per notificare che l'applicazione deve essere completata e chiusa. Questo segnale può essere definito nell'immagine del contenitore con l'istruzione STOPSIGNAL e verrà impostato automaticamente su SIGTERM. Poi, Amazon ECS invia un messaggio SIGKILL. Quando le applicazioni ignorano il SIGTERM, il servizio Amazon ECS deve attendere l'invio del segnale SIGKILL per terminare il processo.

La quantità di tempo che Amazon ECS attende per inviare il messaggio SIGKILL è determinata dalla seguente opzione dell'agente di Amazon ECS:

  • ECS_CONTAINER_STOP_TIMEOUT: 30 (impostazione predefinita)

    Per ulteriori informazioni sul parametro Container Agent, consulta Amazon ECS Container Agent on GitHub.

Per accelerare il periodo di attesa, impostare il parametro dell'agente Amazon ECS sul valore seguente:

  • ECS_CONTAINER_STOP_TIMEOUT: 2

    Se l'applicazione impiega più di 1 secondo, moltiplicare il valore per 2 e usare quel numero come valore.

In questo caso, Amazon ECS attende 2 secondi che il container si arresti, quindi invia un messaggio SIGKILL quando l'applicazione non si ferma.

È anche possibile modificare il codice dell'applicazione per intercettare il segnale SIGTERM e reagire ad esso. Di seguito è riportato un esempio in JavaScript:

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

Questo codice fa sì che il server HTTP smetta di ascoltare eventuali nuove richieste, finisca di rispondere a tutte le richieste in corso e quindi il processo Node.js termina perché il ciclo di eventi non ha nulla da fare. Pertanto, se impiega solo 500 ms per completare le richieste in corso, termina in anticipo senza dover attendere il timeout di arresto e ricevere un SIGKILL.