Sessioni adesive per l'Application Load Balancer - Elastic Load Balancing

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à.

Sessioni adesive per l'Application Load Balancer

Per impostazione predefinita, un Application Load Balancer esegue il routing di ogni richiesta in modo indipendente a una destinazione registrata in base all'algoritmo del sistema di bilanciamento del carico scelto. Tuttavia, è possibile usare la caratteristica sticky session (nota anche come affinità di sessione) per consentire al sistema di bilanciamento del carico di associare una sessione utente a una destinazione specifica. Questo garantisce che durante la sessione tutte le richieste dell'utente vengano inviate allo stesso target. Questa funzione è utile per i server che conservano le informazioni sullo stato per fornire un'esperienza continua ai client. Per utilizzare le sticky session, il client deve supportare i cookie.

Application Load Balancer supportano sia i cookie basati sulla durata che i cookie basati sulle applicazioni. Le sticky session sono abilitate a livello di gruppo target. È possibile utilizzare una combinazione di viscosità basata sulla durata, adesività basata sull'applicazione e assenza di appiccicosità tra i gruppi target.

La chiave per la gestione delle sticky session consiste nel determinare per quanto tempo il tuo sistema di bilanciamento del carico deve instradare costantemente la richiesta dell'utente alla stessa destinazione. Se la tua applicazione ha un proprio cookie di sessione, puoi usare la persistenza basata sull'applicazione e il cookie della sessione del sistema di bilanciamento del carico segue la durata specificata dal cookie della sessione dell'applicazione. Se la tua applicazione non ha un proprio cookie di sessione, puoi usare la persistenza basata sulla durata per generare un cookie della sessione del sistema di bilanciamento del carico con una durata specificata.

Il contenuto dei cookie generati dal sistema di bilanciamento del carico viene crittografato utilizzando una chiave di rotazione. Non è possibile decifrare o modificare i cookie generati dal sistema di bilanciamento del carico.

Per entrambi i tipi di viscosità, Application Load Balancer reimposta la scadenza dei cookie generati dopo ogni richiesta. Se un cookie scade, la sessione non è più una sticky session e il client deve rimuovere il cookie dal rispettivo archivio.

Requisiti

  • Un bilanciatore del carico HTTP/HTTPS.

  • Almeno un'istanza integra in ciascuna zona di disponibilità.

Considerazioni

  • Per i cookie basati sull'applicazione, i nomi dei cookie devono essere specificati individualmente per ciascun gruppo di destinazione. Tuttavia, per i cookie basati sulla durata,AWSALBè l'unico nome utilizzato in tutti i gruppi di destinazione.

  • Se si utilizzano più livelli di Application Load Balancer, è possibile abilitare le sticky session su tutti i livelli con cookie basati sulle applicazioni. Tuttavia, con i cookie basati sulla durata, è possibile abilitare le sessioni adesive solo su un livello, perchéAWSALBè l'unico nome disponibile.

  • La stabilità basata sull'applicazione non funziona con i gruppi target ponderati.

  • Se disponi di unforward actionCon più gruppi target e le sticky session sono abilitate per uno o più gruppi target, è necessario abilitare la persistenza a livello di gruppo target.

  • Le connessioni WebSocket sono sticky in modo inerente. Se il client richiede l'aggiornamento di una connessione ai WebSocket, la destinazione che restituisce un codice di stato HTTP 101 per accettare l'aggiornamento è la destinazione usata nella connessione WebSocket. Dopo il processo WebSockets L'aggiornamento è completo, la persistenza basata su cookie non viene utilizzata.

  • Application Load Balancer utilizzanoExpiresnell'intestazione dei cookie invece diMax-Ageattributo.

  • I sistemi di bilanciamento del carico delle applicazioni non supportano i valori dei cookie codificati con URL.

Persistenza basata sulla durata

La persistenza basata sulla durata instrada le richieste alla stessa destinazione in un gruppo di destinazioni utilizzando un cookie generato dal sistema di bilanciamento del carico (AWSALB). Il cookie viene utilizzato per mappare la sessione alla destinazione. Se la tua applicazione non ha un proprio cookie di sessione, puoi specificare la durata della persistenza e gestire per quanto tempo il tuo sistema di bilanciamento del carico deve instradare costantemente la richiesta dell'utente alla stessa destinazione.

Quando un sistema di bilanciamento del carico riceve per la prima volta una richiesta da un client, instrada la richiesta a una destinazione (in base all'algoritmo scelto) e genera un cookie denominatoAWSALB. Codifica le informazioni sulla destinazione selezionata, crittografa il cookie e lo include nella risposta al client. Il cookie generato dal bilanciamento del carico ha una scadenza di 7 giorni che non è configurabile.

Nelle richieste successive, il cliente dovrebbe includere ilAWSALBcookie. Quando il sistema di bilanciamento del carico riceve una richiesta da un client che contiene il cookie, la rileva e instrada la richiesta alla stessa destinazione. Se il cookie è presente ma non può essere decodificato o se si riferisce a una destinazione di cui è stata annullata la registrazione o non integra, il sistema di bilanciamento del carico seleziona una nuova destinazione e aggiorna il cookie con le informazioni sulla nuova destinazione.

Con le richieste CORS (cross-origin resource sharing), alcuni browser richiedonoSameSite=None; Secureper abilitare la viscosità. In questo caso, il bilanciamento del carico genera un secondo cookie di viscosità,AWSALBCORS, che include le stesse informazioni del cookie di stickiness originale piùSameSiteattributo. I clienti ricevono entrambi i cookie.

Per abilitare la persistenza basata sulla durata tramite la console

  1. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel riquadro di navigazione, sottoBilanciamento del carico, scegliGruppi di destinazioni.

  3. Scegli il nome del gruppo target per aprirne la pagina dei dettagli.

  4. SulDettagli gruppotab, nelAttributisezione, scegliModificare.

  5. Nella pagina Edit attributes (Modifica attributi), procedere nel modo seguente:

    1. Selezionaappiccicosità.

    2. PerStickiness, selezionaCookie generato dal bilanciamento del carico.

    3. Per Stickiness duration (Durata persistenza), specificare un valore compreso tra 1 secondo e 7 giorni.

    4. Scegli Save changes (Salva modifiche).

Per abilitare la persistenza basata sulla durata utilizzando l'AWS CLI

Utilizza il comando modify-target-group-attributes con gli attributi stickiness.enabled e stickiness.lb_cookie.duration_seconds.

Utilizza il seguente comando per abilitare la stickiness basata sulla durata.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.lb_cookie.duration_seconds,Value=time-in-seconds

L'output visualizzato dovrebbe essere simile all'esempio seguente.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.lb_cookie.duration_seconds", "Value": "86500" }, ... ] }

Stickiness basato sull'applicazione

La stabilità basata sulle applicazioni ti offre la flessibilità necessaria per impostare i tuoi criteri per la stabilità target del cliente. Quando si abilita la stabilità basata sull'applicazione, il bilanciamento del carico inoltra la prima richiesta a una destinazione all'interno del gruppo di destinazione in base all'algoritmo scelto. Si prevede che la destinazione imposti un cookie dell'applicazione personalizzato che corrisponda al cookie configurato sul bilanciamento del carico per abilitare l'appiccicosità. Questo cookie personalizzato può includere tutti gli attributi dei cookie richiesti dall'applicazione.

Quando Application Load Balancer riceve il cookie dell'applicazione personalizzato dalla destinazione, genera automaticamente un nuovo cookie dell'applicazione crittografato per acquisire informazioni sulla permanenza. Questo cookie dell'applicazione generato dal bilanciamento del carico acquisisce informazioni sulla permanenza per ciascun gruppo di destinazione che ha abilitato l'appiccicosità basata sull'applicazione.

Il cookie dell'applicazione generato dal bilanciamento del carico non copia gli attributi del cookie personalizzato impostato dalla destinazione. Ha una scadenza di 7 giorni che non è configurabile. Nella risposta al client, Application Load Balancer convalida solo il nome con cui il cookie personalizzato è stato configurato a livello di gruppo target e non il valore o l'attributo di scadenza del cookie personalizzato. Finché il nome corrisponde, il load balancer invia entrambi i cookie, il cookie personalizzato impostato dalla destinazione e il cookie dell'applicazione generato dal load balancer, nella risposta al client.

Nelle richieste successive, i clienti devono inviare entrambi i cookie per mantenere l'appiccicosità. Il bilanciamento del carico decrittografa il cookie dell'applicazione e verifica se la durata della permanenza configurata è ancora valida. Quindi utilizza le informazioni contenute nel cookie per inviare la richiesta alla stessa destinazione all'interno del gruppo di destinazioni per mantenere la persistenza. Il bilanciamento del carico inoltre invia il cookie dell'applicazione personalizzato alla destinazione senza ispezionarlo o modificarlo. Nelle risposte successive, vengono ripristinate la scadenza del cookie dell'applicazione generato dal bilanciamento del carico e la durata della permanenza configurata sul bilanciamento del carico. Per mantenere la viscosità tra cliente e target, la scadenza del cookie e la durata della viscosità non dovrebbero scadere.

Se una destinazione non riesce o diventa non integra, il sistema di bilanciamento del carico interrompe l'instradamento delle richieste a quell'destinazione e sceglie una nuova destinazione integra in base all'algoritmo del sistema di bilanciamento del carico scelto. Il sistema di bilanciamento del carico tratta la sessione come bloccata sul nuovo target integra e continua a instradare le richieste alla nuova destinazione integra, anche se la destinazione non riuscita torna indietro.

Con le richieste CORS (cross-origin resource sharing), per abilitare la stickiness, il sistema di bilanciamento del carico aggiunge laSameSite=None; Secureattributi al cookie dell'applicazione generato dal bilanciamento del carico solo se la versione user-agent è Chromium80 o superiore.

Poiché la maggior parte dei browser limita i cookie a 4K, il sistema di bilanciamento del carico suddivide i cookie delle applicazioni superiori a 4K in più cookie. Application Load Balancer supporta cookie fino a 16K di dimensioni fino a 16K e possono quindi creare fino a 4 frammenti inviati al client. Il nome del cookie dell'applicazione visualizzato dal client inizia con «AWSALBAPP-» e include un numero di frammento. Ad esempio, se la dimensione del cookie è 0-4K, il client vede AWSALBAPP-0. Se la dimensione del cookie è 4-8k, il client vede AWSALBAPP-0 e AWSALBAPP-1 e così via.

Per abilitare la persistenza basata sull'applicazione utilizzando la console

  1. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel riquadro di navigazione, sottoBilanciamento del carico, scegliGruppi di destinazioni.

  3. Scegli il nome del gruppo target per aprirne la pagina dei dettagli.

  4. SulDettagli gruppotab, nelAttributisezione, scegliModificare.

  5. Nella pagina Edit attributes (Modifica attributi), procedere nel modo seguente:

    1. Selezionaappiccicosità.

    2. PerStickiness, selezionaCookie basato sull'applicazione.

    3. Per Stickiness duration (Durata persistenza), specificare un valore compreso tra 1 secondo e 7 giorni.

    4. PerNome cookie app, inserisci un nome per il cookie basato sull'applicazione.

      Non usareAWSALB,AWSALBAPP, oppureAWSALBTGper il nome del cookie; sono riservati per l'utilizzo da parte del sistema di bilanciamento del carico.

    5. Scegli Save changes (Salva modifiche).

Per abilitare la persistenza basata sull'applicazione utilizzando l'AWS CLI

Utilizzo dell'modify-target-group-attributescomando con gli attributi seguenti:

  • stickiness.enabled

  • stickiness.type

  • stickiness.app_cookie.cookie_name

  • stickiness.app_cookie.duration_seconds

Utilizza il seguente comando per abilitare la stickiness basata sull'applicazione.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.type,Value=app_cookie Key=stickiness.app_cookie.cookie_name,Value=my-cookie-name Key=stickiness.app_cookie.duration_seconds,Value=time-in-seconds

L'output visualizzato dovrebbe essere simile all'esempio seguente.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.app_cookie.cookie_name", "Value": "MyCookie" }, { "Key": "stickiness.type", "Value": "app_cookie" }, { "Key": "stickiness.app_cookie.duration_seconds", "Value": "86500" }, ... ] }

Ribilanciamento manuale

Quando si aumenta, se il numero di bersagli aumenta considerevolmente, è possibile una distribuzione disuguale del carico a causa della viscosità. In questo scenario, è possibile ribilanciare il carico sulle destinazioni utilizzando le seguenti due opzioni:

  • Imposta una scadenza sul cookie generato dall'applicazione precedente alla data e all'ora correnti. Ciò impedirà ai client di inviare il cookie all'Application Load Balancer, che riavvierà il processo di determinazione della viscosità.

  • Impostare una durata molto breve sulla configurazione di stickiness basata sull'applicazione del bilanciamento del carico, ad esempio 1 secondo. Ciò costringe l'Application Load Balancer a ristabilire la viscosità anche se il cookie impostato dalla destinazione non è scaduto.