PERF04-BP04 Utilizzo del bilanciamento del carico per distribuire il traffico su più risorse
Distribuisci il traffico tra varie risorse o servizi affinché il carico di lavoro possa trarre vantaggio dall’elasticità fornita dal cloud. Puoi anche utilizzare il bilanciamento del carico per la terminazione dell’offloading della crittografia al fine di migliorare le prestazioni, l’affidabilità e gestire e instradare il traffico in modo efficiente.
Anti-pattern comuni:
-
Scelta del tipo di sistema di bilanciatore del carico senza tenere conto dei requisiti del carico di lavoro.
-
Mancato utilizzo delle funzionalità del bilanciatore del carico per l’ottimizzazione delle prestazioni.
-
Esposizione diretta del carico di lavoro a Internet senza un bilanciatore del carico.
-
Instradi tutto il traffico Internet attraverso i bilanciatori del carico esistenti.
-
Utilizzi il bilanciamento del carico TCP generico e fai in modo che ogni nodo di calcolo gestisca la crittografia SSL.
Vantaggi dell’adozione di questa best practice: un bilanciatore del carico gestisce il carico variabile del traffico dell’applicazione in una o più zone di disponibilità e consente alta disponibilità, dimensionamento automatico e un migliore utilizzo del carico di lavoro.
Livello di rischio associato se questa best practice non fosse adottata: elevato
Guida all’implementazione
I bilanciatori del carico operano come punto di ingresso per il carico di lavoro, dal quale distribuiscono il traffico alle destinazioni di backend, come istanze di calcolo o container per migliorarne l’utilizzo.
La scelta del tipo corretto di bilanciatore del carico è il primo passaggio per ottimizzare l’architettura. Per iniziare, elenca le caratteristiche del carico di lavoro, tra cui protocollo (TCP, HTTP, TLS o WebSocket), tipo di destinazione (istanze, container o servizi serverless), requisiti dell’applicazione (connessioni a esecuzione prolungata, autenticazione utente o persistenza) e ubicazione (regione, zona locale, Outpost o isolamento zonale).
AWS fornisce diversi modelli di bilanciamento del carico per le tue applicazioni. Application Load Balancer è l’ideale per il bilanciamento del carico del traffico HTTP e HTTPS. Inoltre, offre l’instradamento avanzato delle richieste, dedicato alla distribuzione delle architetture applicative moderne, fra cui microservizi e container.
Network Load Balancer è l’ideale per il bilanciamento del carico del traffico TCP, in cui sono richieste prestazioni elevatissime. È in grado di gestire milioni di richieste al secondo, mantenendo al contempo latenze ridottissime. Inoltre, è ottimizzato per la gestione degli schemi di traffico improvvisi e incostanti.
Elastic Load Balancing
Dopo aver scelto il bilanciatore del carico appropriato, puoi iniziare a utilizzarne le funzionalità per ridurre la quantità di attività che deve svolgere il backend per distribuire il traffico.
Ad esempio, usando Application Load Balancer (ALB) e Network Load Balancer (NLB), puoi eseguire l’offload della crittografia SSL/TLS, il che costituisce un’opportunità per evitare il completamento dell’handshake TLS a elevato utilizzo di CPU da parte delle destinazioni e migliorare anche la gestione dei certificati.
Se configurato nel bilanciatore del carico, l’offload SSL/TLS diventa responsabile della crittografia del traffico da e verso i client, distribuendo il traffico non crittografato ai backend, liberando le risorse backend e migliorando il tempo di risposta per i client.
Application Load Balancer può anche distribuire traffico HTTP/2 senza che questo debba essere supportato nelle destinazioni. Questa semplice decisione può migliorare il tempo di risposta dell’applicazione, in quanto HTTP/2 usa connessioni TCP in modo più efficiente.
Nel definire l’architettura, è bene tenere conto dei requisiti di latenza del carico di lavoro. Ad esempio, se un’applicazione è sensibile alla latenza, è possibile scegliere di usare Network Load Balancer, che offre latenze estremamente ridotte. In alternativa, è possibile decidere di avvicinare il carico di lavoro ai clienti sfruttando Application Load Balancer nelle zone locali AWS
Un altro aspetto di cui tenere conto per i carichi di lavoro sensibili alla latenza è il bilanciamento del carico tra zone. Con il bilanciamento del carico tra zone, ogni nodo del bilanciatore del carico distribuisce il traffico tra le destinazioni registrate in tutte le zone di disponibilità autorizzate.
Usa Amazon EC2 Auto Scaling integrato con il bilanciatore del carico. Uno degli aspetti principali di un sistema con prestazioni efficienti riguarda il dimensionamento corretto delle risorse backend. A questo scopo, puoi utilizzare integrazioni dei bilanciatori del carico per le risorse di destinazione backend. Usando l’integrazione dei bilanciatori del carico con gruppi Amazon EC2 Auto Scaling, le destinazioni vengono aggiunte o rimosse dal bilanciatore del carico in base alle esigenze, in risposta al traffico in ingresso. I bilanciatori del carico possono integrarsi anche con Amazon ECS e Amazon EKS per carichi di lavoro distribuiti in container.
Passaggi dell’implementazione
-
Definisci i tuoi requisiti di bilanciamento del carico, tra cui volume di traffico, disponibilità e scalabilità delle applicazioni.
-
Scegli il tipo di sistema di bilanciatore del carico giusto per la tua applicazione.
-
Utilizza Application Load Balancer per i carichi di lavoro HTTP/HTTPS.
-
Utilizza Network Load Balancer per carichi di lavoro non HTTP in esecuzione su TCP o UDP.
-
Usa una combinazione dei due sistemi (ALB come destinazione di NLB
) per sfruttare le funzionalità di entrambi i prodotti. Ad esempio, puoi scegliere questa opzione se vuoi usare gli indirizzi IP statici dell’NLB insieme all’instradamento basato su intestazione HTTP dell’ALB, oppure se vuoi esporre il carico di lavoro HTTP a un AWS PrivateLink. -
Per un confronto completo dei bilanciatori del carico, consulta la tabella di confronto dei prodotti ELB
.
-
-
Se possibile, utilizza l’offload SSL/TLS.
-
Configura gli ascoltatori HTTPS/TLS con Application Load Balancer e Network Load Balancer integrati con AWS Certificate Manager
. -
Alcuni carichi di lavoro possono richiedere la crittografia end-to-end per motivi di conformità. In questo caso, è necessario consentire la crittografia nelle destinazioni.
-
Per le best practice in materia di sicurezza, consulta SEC09-BP02 Applicazione della crittografia dei dati in transito.
-
-
Seleziona l’algoritmo di instradamento corretto (solo ALB)
-
L’algoritmo di instradamento può fare la differenza per quanto riguarda l’uso corretto delle destinazioni backend e, di conseguenza, l’impatto sulle prestazioni. Ad esempio, ALB offre due opzioni per gli algoritmi di instradamento:
-
Numero minimo di richieste in sospeso: usa questa opzione per ottenere una migliore distribuzione del carico nelle destinazioni backend nei casi in cui le richieste per l’applicazione variano per complessità o le destinazioni variano per capacità di elaborazione.
-
Round robin: usa questa opzione quando le richieste e le destinazioni sono simili o se devi distribuire equamente le richieste tra le destinazioni.
-
-
Valuta se usare l’isolamento tra zone o quello zonale.
-
Disattiva l’isolamento tra zone (usando l’isolamento zonale) per migliorare la latenza e in caso di domini con errori di zona. La funzione è disattivata per impostazione predefinita in NLB e in ALB è possibile disattivarla per gruppo di destinazione.
-
Attiva l’isolamento tra zone per ottenere disponibilità e flessibilità maggiori. L’isolamento tra zone è disattivato per impostazione predefinita in ALB e in NLB è possibile attivarlo per gruppo di destinazione.
-
-
Attiva keep-alive HTTP per i carichi di lavoro HTTP (solo ALB). Con questa funzionalità, il bilanciatore del carico può riutilizzare le connessioni backend fino allo scadere del timeout del keep-alive, migliorando la richiesta HTTP e il tempo di risposta e riducendo anche l’utilizzo delle risorse nelle destinazioni backend. Per informazioni sulla configurazione per Apache e Nginx, consulta Quali sono le impostazioni ottimali per utilizzare Apache o NGINX come server di backend per ELB?
-
Attiva il monitoraggio del tuo bilanciatore del carico.
-
Attiva i log di accesso per Application Load Balancer e Network Load Balancer.
-
I campi principali da considerare per l’ALB sono
request_processing_time,request_processing_timeeresponse_processing_time. -
I campi principali da considerare per l’NLB sono
connection_timeetls_handshake_time. -
Preparati a eseguire query sui log quando necessario. Puoi usare Amazon Athena per eseguire query sui log ALB e sui log NLB.
-
Crea allarmi per metriche correlate alle prestazioni, come
TargetResponseTimeper ALB.
-
Risorse
Documenti correlati:
Video correlati:
Esempi correlati: