Sessioni permanenti per il tuo 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 permanenti per il tuo Application Load Balancer

Per impostazione predefinita, un Application Load Balancer indirizza ogni richiesta in modo indipendente verso un target registrato in base all'algoritmo di bilanciamento del carico scelto. Tuttavia, è possibile utilizzare la funzionalità di sessione permanente (nota anche come affinità di sessione) per consentire al sistema di bilanciamento del carico di associare la sessione di un utente a un obiettivo specifico. Ciò garantisce che tutte le richieste dell'utente durante la sessione vengano inviate alla stessa destinazione. Questa funzionalità è utile per i server che conservano informazioni sullo stato al fine di fornire un'esperienza continua ai client. Per utilizzare le sessioni permanenti, il client deve supportare i cookie.

Gli Application Load Balancer supportano sia i cookie basati sulla durata che i cookie basati sulle applicazioni. Le sessioni permanenti sono abilitate a livello di gruppo target. È possibile utilizzare una combinazione di adesività basata sulla durata, adesività basata sull'applicazione e assenza di adesività per tutti i gruppi target.

La chiave per gestire le sessioni persistenti è determinare per quanto tempo il sistema di bilanciamento del carico deve instradare in modo coerente la richiesta dell'utente verso lo stesso obiettivo. Se l'applicazione dispone di un proprio cookie di sessione, è possibile utilizzare la persistenza basata sull'applicazione e il cookie di sessione del load balancer segue la durata specificata dal cookie di sessione dell'applicazione. Se l'applicazione non dispone di un proprio cookie di sessione, è possibile utilizzare la persistenza basata sulla durata per generare un cookie di sessione di bilanciamento del carico con una durata specificata.

Il contenuto dei cookie generati dal load balancer viene crittografato utilizzando una chiave rotante. Non è possibile decrittografare 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 che genera dopo ogni richiesta. Se un cookie scade, la sessione non è più persistente e il client deve rimuovere il cookie dal suo cookie store.

Requisiti
  • Un load balancer HTTP/HTTPS.

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

Considerazioni
  • Le sessioni permanenti non sono supportate seil bilanciamento del carico tra zone è disabilitato. Il tentativo di abilitare le sessioni permanenti mentre il bilanciamento del carico tra zone è disabilitato avrà esito negativo.

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

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

  • La viscosità basata sulle applicazioni non funziona con gruppi target ponderati.

  • Se si dispone di unazione in avanticon più gruppi target e le sessioni permanenti sono abilitate per uno o più gruppi target, è necessario abilitare la permanenza a livello di gruppo target.

  • WebSocket le connessioni sono intrinsecamente permanenti. Se il client richiede un aggiornamento della connessione a WebSockets, la destinazione che restituisce un codice di stato HTTP 101 per accettare l'aggiornamento della connessione è la destinazione utilizzata in WebSocketsconnessione. Dopo il WebSockets l'aggiornamento è completo, la viscosità basata sui cookie non viene utilizzata.

  • Gli Application Load Balancer utilizzanoExpiresattributo nell'intestazione del cookie anzichéMax-Ageattributo.

  • Gli Application Load Balancer non supportano i valori dei cookie con codifica URL.

Viscosità basata sulla durata

La persistenza basata sulla durata indirizza le richieste alla stessa destinazione in un gruppo target utilizzando un cookie generato dal sistema di bilanciamento del carico (AWSALB). Il cookie viene utilizzato per mappare la sessione alla destinazione. Se l'applicazione non dispone di un proprio cookie di sessione, è possibile specificare la durata di permanenza e gestire per quanto tempo il sistema di bilanciamento del carico deve indirizzare in modo coerente la richiesta dell'utente verso la stessa destinazione.

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

Nelle richieste successive, il client deve includereAWSALBbiscotto. Quando il load balancer riceve una richiesta da un client che contiene il cookie, la rileva e indirizza la richiesta allo stesso obiettivo. 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 load balancer genera un secondo cookie di adesività,AWSALBCORS, che include le stesse informazioni del cookie di adesività originale più ilSameSiteattributo. I clienti ricevono entrambi i cookie.

Per abilitare la viscosità basata sulla durata utilizzando la console
  1. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel pannello di navigazione, in Load balancing (Bilanciamento del carico) scegli Target Groups (Gruppi di destinazione).

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

  4. SulDettagli del grupposcheda, nellaAttributisezione, scegliModifica.

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

    1. SelezionaViscosità.

    2. PerTipo di viscosità, selezionaCookie generato dal sistema di bilanciamento del carico.

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

    4. Sceglie Save changes (Salva modifiche).

Per abilitare la viscosità basata sulla durata utilizzando ilAWS CLI

Usa ilmodify-target-group-attributescomando constickiness.enabledestickiness.lb_cookie.duration_secondsattributi.

Utilizzate il comando seguente per abilitare la viscosità 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

Il risultato dovrebbe essere simile all'esempio seguente.

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

Viscosità basata sull'applicazione

La viscosità basata sulle applicazioni offre la flessibilità necessaria per impostare criteri personalizzati per la viscosità in base al target del cliente. Quando abiliti la fedeltà basata sull'applicazione, il load balancer indirizza la prima richiesta a un target all'interno del gruppo target in base all'algoritmo scelto. Il target dovrebbe impostare un cookie applicativo personalizzato che corrisponda al cookie configurato sul load balancer per abilitare la persistenza. Questo cookie personalizzato può includere uno qualsiasi degli attributi dei cookie richiesti dall'applicazione.

Quando l'Application Load Balancer riceve il cookie dell'applicazione personalizzato dalla destinazione, genera automaticamente un nuovo cookie dell'applicazione crittografato per acquisire informazioni sulla viscosità. Questo cookie applicativo generato dal load balancer acquisisce informazioni sulla viscosità per ogni gruppo target che ha abilitato la viscosità basata sull'applicazione.

Il cookie applicativo generato dal sistema di bilanciamento del carico non copia gli attributi del cookie personalizzato impostato dal target. Ha una scadenza propria 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 sia i cookie, il cookie personalizzato impostato dal target, sia il cookie dell'applicazione generato dal load balancer, nella risposta al client.

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

Se una destinazione si guasta o non funziona correttamente, il sistema di bilanciamento del carico interrompe l'instradamento delle richieste verso quella destinazione e sceglie una nuova destinazione integra in base all'algoritmo di bilanciamento del carico scelto. Il load balancer considera la sessione come se fosse «bloccata» sul nuovo target integro e continua a indirizzare le richieste verso il nuovo target integro anche se il target fallito ritorna.

Con le richieste CORS (Cross-Origin Resource Sharing), per garantire la persistenza, il load balancer aggiungeSameSite=None; Secureattribuisce al cookie applicativo generato dal sistema di bilanciamento del carico solo se la versione dell'agente utente è Chromium80 o superiore.

Poiché la maggior parte dei browser limita i cookie a una dimensione di 4K, il sistema di bilanciamento del carico suddivide i cookie delle applicazioni con dimensioni superiori a 4K in più cookie. Gli Application Load Balancer supportano cookie di dimensioni fino a 16K e possono quindi creare fino a 4 shard da inviare 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 viscosità basata sulle applicazioni utilizzando la console
  1. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel pannello di navigazione, in Load balancing (Bilanciamento del carico) scegli Target Groups (Gruppi di destinazione).

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

  4. SulDettagli del grupposcheda, nellaAttributisezione, scegliModifica.

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

    1. SelezionaViscosità.

    2. PerTipo di viscosità, selezionaCookie basato sull'applicazione.

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

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

      Non utilizzareAWSALB,AWSALBAPP, oppureAWSALBTGper il nome del cookie; sono riservati all'uso da parte del load balancer.

    5. Sceglie Save changes (Salva modifiche).

Per abilitare la viscosità basata sull'applicazione utilizzandoAWS CLI

Usa ilmodify-target-group-attributescomando con i seguenti attributi:

  • stickiness.enabled

  • stickiness.type

  • stickiness.app_cookie.cookie_name

  • stickiness.app_cookie.duration_seconds

Utilizzate il comando seguente per abilitare l'adesività 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

Il risultato dovrebbe essere simile al seguente esempio.

{ "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

In caso di ampliamento, se il numero di obiettivi aumenta considerevolmente, si può verificare una distribuzione ineguale del carico a causa della viscosità. In questo scenario, è possibile riequilibrare il carico sugli obiettivi utilizzando le due opzioni seguenti:

  • Imposta una scadenza per il cookie generato dall'applicazione che è 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 persistenza.

  • Imposta una durata molto breve per la configurazione di adesività basata sull'applicazione del load balancer, ad esempio 1 secondo. Ciò impone all'Application Load Balancer di ristabilire la persistenza anche se il cookie impostato dal target non è scaduto.