PERF05-BP04 Sfruttamento del bilanciamento del carico e dell'offloading della crittografia - Framework AWS Well-Architected

PERF05-BP04 Sfruttamento del bilanciamento del carico e dell'offloading della crittografia

Usa sistemi di bilanciamento del carico per ottenere prestazioni ottimali delle risorse di destinazione e migliorare la velocità di risposta del sistema.

Risultato desiderato: riduzione del numero di risorse di calcolo per la distribuzione del traffico. Eliminazione degli squilibri nel consumo di risorse nelle destinazioni. Offload di attività con uso elevato di risorse di calcolo nel sistema di bilanciamento del carico. Utilizzo dell'elasticità e della flessibilità del cloud per migliorare le prestazioni e ottimizzare l'architettura.

Anti-pattern comuni:

  • Scelta del tipo di sistema di bilanciamento del carico senza tenere conto dei requisiti del carico di lavoro.

  • Mancato utilizzo delle funzionalità del sistema di bilanciamento del carico per l'ottimizzazione delle prestazioni.

  • Esposizione diretta del carico di lavoro a Internet senza un sistema di bilanciamento del carico.

Livello di rischio associato alla mancata adozione di questa best practice: elevato

Guida all'implementazione

I sistemi di bilanciamento del carico operano come punto di ingresso per il carico di lavoro, da cui distribuiscono il traffico alle destinazione back-end, ad esempio le istanze di calcolo o i container. La scelta del tipo corretto di sistema di bilanciamento 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).

Dopo aver scelto il sistema di bilanciamento del carico appropriato, puoi iniziare a utilizzarne le funzionalità per ridurre la quantità di attività che deve svolgere il back-end per distribuire il traffico.

Ad esempio, usando un Application Load Balancer (ALB) e un Network Load Balancer (NLB), puoi eseguire l'offload della crittografia SSL/TLS, 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 sistema di bilanciamento del carico, l'offload SSL/TLS diventa responsabile della crittografia del traffico da e verso i client, distribuendo il traffico non crittografato ai back-end, liberando le risorse back-end e migliorando il tempo di risposta per i client.

L'Application Load Balancer può anche distribuire traffico HTTP2 senza che questo debba essere supportato nelle destinazioni. Questa semplice decisione può migliorare il tempo di risposta dell'applicazione, in quanto HTTP2 usa connessioni TCP in modo più efficiente.

È possibile usare sistemi di bilanciamento del carico anche per rendere l'architettura più flessibile distribuendo il traffico tra tipi di back-end diversi, come container e servizi serverless. Ad esempio, l'Application Load Balancer può essere configurato con regole di ascolto che inoltrano il traffico a gruppi di destinazioni diversi in base ai parametri della richiesta, come intestazione, metodo o modello.

Nel definire l'architettura, è bene tenere conto anche dei requisiti di latenza del carico di lavoro. Ad esempio, se un'applicazione è sensibile alla latenza, è possibile scegliere di usare un Network Load Balancer, che offre latenze estremamente ridotte. In alternativa, è possibile decidere di avvicinare il carico di lavoro ai clienti utilizzando l'Application Load Balancer in zone locali AWS o anche in AWS Outposts.

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 sistema di bilanciamento del carico distribuisce il traffico tra le destinazioni registrate in tutte le zone di disponibilità abilitate. Questo comportamento migliora la disponibilità, ma aggiunge un millisecondo a cifra singola alla latenza di round trip.

Infine, l'ALB e l'NLB offrono risorse di monitoraggio come log e metriche. La corretta configurazione del monitoraggio può semplificare la raccolta di informazioni dettagliate sulle prestazioni dell'applicazione. Ad esempio, puoi usare log di accesso dell'ALB per individuare le richieste con tempi di risposta più lunghi o le destinazioni back-end che causano problemi di prestazioni.

Passaggi dell'implementazione

  1. Scegli il sistema di bilanciamento del carico corretto per il tuo carico di lavoro.

    1. Usa un Application Load Balancer per carichi di lavoro HTTP/HTTPS.

    2. Use un Network Load Balancer per carichi di lavoro non HTTP in esecuzione su TCP o UDP.

    3. Usa una combinazione dei due sistemi (un ALB come destinazione di un NLB) se vuoi usufruire delle 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 AWS PrivateLink.

    4. Per un confronto completo dei sistemi di bilanciamento del carico, consulta la tabella di confronto dei prodotti ELB.

  2. Usa l'offload SSL/TLS.

    1. Configura ascoltatori HTTPS/TLS con un Application Load Balancer e un Network Load Balancer integrati con AWS Certificate Manager.

    2. Alcuni carichi di lavoro possono richiedere la crittografia end-to-end per motivi di conformità. In questo caso, è necessario abilitare la crittografia nelle destinazioni.

    3. Per le best practice per la sicurezza, consulta SEC09-BP02 Applicazione della crittografia dei dati in transito.

  3. Seleziona l'algoritmo di instradamento corretto.

    1. L'algoritmo di instradamento può fare la differenza per quanto riguarda l'uso corretto delle destinazioni back-end e, di conseguenza, l'impatto sulle prestazioni. Ad esempio, l'ALB offre due opzioni per gli algoritmi di instradamento:

    2. Numero minimo di richieste in sospeso: usa questa opzione per ottenere una migliore distribuzione del carico nelle destinazioni back-end nei casi in cui le richieste per l'applicazione variano per complessità o le destinazioni variano per capacità di elaborazione.

    3. Round robin: usa questa opzione quando le richieste e le destinazioni sono simili o se devi distribuire equamente le richieste tra le destinazioni.

  4. Valuta se usare l'isolamento tra zone o quello zonale.

    1. Disattiva l'isolamento tra zone (usando l'isolamento zonale) per migliorare la latenza e in caso di errori di zona. È disattivato per impostazione predefinita nell'NLB, mentre nell'ALB puoi disattivarlo per ogni gruppo di destinazioni.

    2. Attiva l'isolamento tra zone per ottenere disponibilità e flessibilità maggiori. Per impostazione predefinita, l'isolamento tra zone è disattivato per l'ALB, mentre nell'NLB puoi attivarlo per ogni gruppo di destinazioni.

  5. Attiva keep-alive HTTP per i carichi di lavoro HTTP.

    1. Per i carichi di lavoro HTTP, attiva il keep-alive HTTP nelle impostazioni del server Web per le destinazioni back-end. Con questa funzionalità, il sistema di bilanciamento del carico può riutilizzare le connessioni back-end fino alla scadere del timeout del keep-alive, migliorando la richiesta HTTP e il tempo di risposta e riducendo anche l'utilizzo delle risorse nelle destinazioni back-end. Per informazioni sulla configurazione per Apache e Nginx, consulta la pagina relativa alle impostazioni ottimali per l'uso di Apache o NGINX come server back-end per l'ELB.

  6. Usa integrazioni Elastic Load Balancing per una migliore orchestrazione delle risorse di calcolo.

    1. Usa Auto Scaling integrato con il sistema di bilanciamento del carico. Uno degli aspetti principali di un sistema con prestazioni efficienti riguarda il dimensionamento corretto delle risorse back-end. A questo scopo, puoi utilizzare integrazioni dei sistemi di bilanciamento del carico per le risorse di destinazione back-end. Usando l'integrazione dei sistemi di bilanciamento del carico con gruppi con Auto Scaling, le destinazioni vengono aggiunte o rimosse nel e dal sistema di bilanciamento del carico in base alle esigenze, in risposta al traffico in ingresso.

    2. I sistemi di bilanciamento del carico possono integrarsi anche con Amazon ECS e Amazon EKS per carichi di lavoro distribuiti in container.

  7. Monitora il sistema di bilanciamento del carico per individuare i colli di bottiglia delle prestazioni.

    1. Abilita i log di accesso per l'Application Load Balancer e l'Network Load Balancer.

    2. I campi principali da considerare per l'ALB sono request_processing_time, request_processing_timee response_processing_time.

    3. I campi principali da considerare per l'NLB sono connection_time e tls_handshake_time.

    4. Preparati a eseguire query sui log quando necessario. Puoi usare Amazon Athena per eseguire query su log dell'ALB e log dell'NLB.

    5. Crea allarmi per metriche correlate alle prestazioni come TargetResponseTime per l'ALB.

Risorse

Best practice correlate:

Documenti correlati:

Video correlati:

Esempi correlati: