Questo pilastro del Google Cloud framework Well-Architected fornisce suggerimenti per ottimizzare il rendimento dei carichi di lavoro in Google Cloud.
Questo documento è destinato ad architetti, sviluppatori e amministratori che pianificano, progettano, eseguono il deployment e gestiscono i carichi di lavoro in Google Cloud.
I consigli di questo pilastro possono aiutare la tua organizzazione a operare in modo efficiente, migliorare la soddisfazione dei clienti, aumentare le entrate e ridurre i costi. Ad esempio, quando il tempo di elaborazione backend di un'applicazione diminuisce, gli utenti sperimentano tempi di risposta più rapidi, il che può portare a una maggiore fidelizzazione degli utenti e a maggiori entrate.
Il processo di ottimizzazione delle prestazioni può comportare un compromesso tra prestazioni e costi. Tuttavia, l'ottimizzazione delle prestazioni a volte può aiutarti a ridurre i costi. Ad esempio, quando il carico aumenta, la scalabilità automatica può contribuire a fornire prestazioni prevedibili assicurando che le risorse di sistema non siano sovraccariche. La scalabilità automatica ti aiuta anche a ridurre i costi rimuovendo le risorse inutilizzate durante i periodi di carico ridotto.
L'ottimizzazione del rendimento è un processo continuo, non un'attività una tantum. Il seguente diagramma mostra le fasi del processo di ottimizzazione del rendimento:
Il processo di ottimizzazione del rendimento è un ciclo continuo che include le seguenti fasi:
- Definisci i requisiti: definisci requisiti di rendimento granulari per ogni livello dello stack di applicazioni prima di progettare e sviluppare le tue applicazioni. Per pianificare l'allocazione delle risorse, considera le caratteristiche principali del carico di lavoro e le aspettative di rendimento.
- Progettazione e deployment: utilizza pattern di progettazione elastici e scalabili che possono aiutarti a soddisfare i requisiti di rendimento.
- Monitora e analizza: monitora continuamente il rendimento utilizzando log, tracciamento, metriche e avvisi.
Ottimizza: valuta potenziali riprogettazioni man mano che le tue applicazioni si evolvono. Ridimensiona correttamente le risorse cloud e utilizza nuove funzionalità per soddisfare i requisiti di prestazioni in continua evoluzione.
Come mostrato nel diagramma precedente, continua il ciclo di monitoraggio, rivalutazione dei requisiti e aggiustamento delle risorse cloud.
Per principi e consigli di ottimizzazione delle prestazioni specifici per i carichi di lavoro di AI e ML, consulta Prospettiva AI e ML: ottimizzazione delle prestazioni nel Well-Architected Framework.
Principi fondamentali
I consigli del pilastro dell'ottimizzazione del rendimento del Well-Architected Framework sono mappati ai seguenti principi fondamentali:
- Pianificare l'allocazione delle risorse
- Sfruttare l'elasticità
- Promuovere la progettazione modulare
- Monitorare e migliorare continuamente il rendimento
Collaboratori
Autori:
- Daniel Lees | Cloud Security Architect
- Gary Harmson | Principal Architect
- Luis Urena | Developer Relations Engineer
- Zach Seils | Specialista di networking
Altri collaboratori:
- Filipe Gracio, PhD | Customer Engineer
- Jose Andrade | Customer Engineer per l'infrastruttura aziendale
- Kumar Dhanagopal | Sviluppatore di soluzioni cross-product
- Marwan Al Shawi | Partner Customer Engineer
- Nicolas Pintaux | Customer Engineer, specialista in modernizzazione delle applicazioni
- Ryan Cox | Principal Architect
- Radhika Kanakam | Senior Program Manager, Cloud GTM
- Samantha He | Technical Writer
- Wade Holmes | Global Solutions Director
Pianificare l'allocazione delle risorse
Questo principio del pilastro dell'ottimizzazione del rendimento del Google Cloud Well-Architected Framework fornisce consigli per aiutarti a pianificare le risorse per i tuoi carichi di lavoro in Google Cloud. Sottolinea l'importanza di definire requisiti granulari prima di progettare e sviluppare applicazioni per il deployment o la migrazione nel cloud.
Panoramica del principio
Per soddisfare i requisiti aziendali, è importante definire i requisiti di rendimento delle applicazioni prima della progettazione e dello sviluppo. Definisci questi requisiti nel modo più granulare possibile per l'applicazione nel suo complesso e per ogni livello dello stack dell'applicazione. Ad esempio, nel livello di archiviazione devi considerare il throughput e le operazioni di I/O al secondo (IOPS) di cui hanno bisogno le applicazioni.
Fin dall'inizio, progetta le applicazioni con un occhio di riguardo alle prestazioni e alla scalabilità. Considera fattori come il numero di utenti, il volume di dati e la potenziale crescita nel tempo.
I requisiti di prestazioni per ogni workload variano e dipendono dal tipo di workload. Ogni workload può contenere un mix di sistemi e servizi di componenti che hanno insiemi unici di caratteristiche di rendimento. Ad esempio, un sistema responsabile dell'elaborazione batch periodica di set di dati di grandi dimensioni ha esigenze di rendimento diverse rispetto a una soluzione di virtualizzazione interattiva del desktop. Le strategie di ottimizzazione devono soddisfare le esigenze specifiche di ogni carico di lavoro.
Seleziona servizi e funzionalità in linea con gli obiettivi di rendimento di ogni carico di lavoro. Per l'ottimizzazione del rendimento, non esiste una soluzione universale. Quando ottimizzi ogni workload, l'intero sistema può raggiungere prestazioni ed efficienza ottimali.
Considera le seguenti caratteristiche del workload che possono influenzare i tuoi requisiti di prestazioni:
- Archetipo di deployment: l'archetipo di deployment che selezioni per un'applicazione può influenzare la tua scelta di prodotti e funzionalità, che a loro volta determinano il rendimento che puoi aspettarti dalla tua applicazione.
- Posizionamento delle risorse: quando selezioni una Google Cloud regione per le risorse dell'applicazione, ti consigliamo di dare la priorità alla bassa latenza per gli utenti finali, rispettare le normative sulla località dei dati e garantire la disponibilità dei prodotti e servizi Google Cloud richiesti.
- Connettività di rete: scegli servizi di rete che ottimizzano l'accesso ai dati e la distribuzione dei contenuti. Sfrutta la rete globale, i backbone ad alta velocità, le località di interconnessione e i servizi di memorizzazione nella cache di Google Cloud.
- Opzioni di hosting delle applicazioni: quando selezioni una piattaforma di hosting, devi valutare i vantaggi e gli svantaggi in termini di prestazioni di ogni opzione. Ad esempio, considera le piattaforme bare metal, le macchine virtuali, i container e le piattaforme serverless.
- Strategia di archiviazione: scegli una strategia di archiviazione ottimale in base ai tuoi requisiti di rendimento.
- Configurazioni delle risorse: il tipo di macchina, le IOPS e la velocità effettiva possono influire in modo significativo sul rendimento. Inoltre, all'inizio della fase di progettazione, devi considerare le funzionalità di sicurezza appropriate e il loro impatto sulle risorse. Quando pianifichi le funzionalità di sicurezza, preparati ad accettare i compromessi necessari in termini di prestazioni per evitare effetti imprevisti.
Consigli
Per garantire un'allocazione ottimale delle risorse, prendi in considerazione i consigli riportati nelle sezioni seguenti.
Configurare e gestire le quote
Assicurati che la tua applicazione utilizzi solo le risorse necessarie, come memoria, spazio di archiviazione e potenza di elaborazione. Una sovra-allocazione può comportare spese non necessarie, mentre una sotto-allocazione potrebbe comportare un peggioramento delle prestazioni.
Per supportare lo scaling elastico e garantire la disponibilità di risorse adeguate, monitora regolarmente la capacità delle quote. Inoltre, monitora l'utilizzo della quota per identificare potenziali vincoli di scalabilità o problemi di sovra-allocazione e poi prendere decisioni informate sull'allocazione delle risorse.
Educare e promuovere la consapevolezza
Informa gli utenti dei requisiti di rendimento e fornisci risorse didattiche sulle tecniche efficaci di gestione del rendimento.
Per valutare i progressi e identificare le aree di miglioramento, documenta regolarmente le prestazioni target e quelle effettive. Esegui test di carico sulla tua applicazione per trovare potenziali punti di interruzione e capire come scalare l'applicazione.
Monitorare le metriche sul rendimento
Utilizza Cloud Monitoring per analizzare le tendenze nelle metriche di rendimento, gli effetti degli esperimenti, definire avvisi per le metriche critiche ed eseguire analisi retrospettive.
Active Assist è un insieme di strumenti che possono fornire approfondimenti e consigli per ottimizzare l'utilizzo delle risorse. Questi consigli possono aiutarti a modificare l'allocazione delle risorse e a migliorare il rendimento.
Sfruttare l'elasticità
Questo principio del pilastro dell'ottimizzazione del rendimento del Google Cloud Well-Architected Framework fornisce consigli per aiutarti a incorporare l'elasticità, ovvero la capacità di modificare le risorse in modo dinamico in base alle variazioni dei requisiti del carico di lavoro.
L'elasticità consente di scalare in modo indipendente i diversi componenti di un sistema. Questo scalabilità mirata può contribuire a migliorare il rendimento e l'efficienza dei costi allocando le risorse esattamente dove sono necessarie, senza un provisioning eccessivo o insufficiente delle risorse.
Panoramica del principio
I requisiti di rendimento di un sistema influiscono direttamente su quando e come il sistema viene scalato verticalmente o orizzontalmente. Devi valutare la capacità del sistema e determinare il carico che il sistema dovrebbe gestire a livello di base. A questo punto, devi determinare come vuoi che il sistema risponda agli aumenti e alle diminuzioni del carico.
Quando il carico aumenta, il sistema deve fare lo scale out, verticalmente o entrambi. Per lo scaling orizzontale, aggiungi nodi di replica per assicurarti che il sistema abbia una capacità complessiva sufficiente a soddisfare l'aumento della domanda. Per lo scaling verticale, sostituisci i componenti esistenti dell'applicazione con componenti che contengono più capacità, più memoria e più spazio di archiviazione.
Quando il carico diminuisce, il sistema deve fare lo scale down (orizzontalmente, verticalmente o in entrambi i modi).
Definisci le circostanze in cui il sistema esegue lo scale up o lo scale down. Pianifica di scalare manualmente i sistemi per i periodi noti di traffico elevato. Utilizza strumenti come la scalabilità automatica, che risponde agli aumenti o alle riduzioni del carico.
Consigli
Per sfruttare l'elasticità, tieni presente i consigli nelle sezioni seguenti.
Pianifica i periodi di picco di carico
Devi pianificare un percorso di scalabilità efficiente per eventi noti, ad esempio periodi previsti di aumento della domanda dei clienti.
Valuta la possibilità di scalare il sistema prima dei periodi noti di traffico elevato. Ad esempio, se sei un'organizzazione di vendita al dettaglio, prevedi un aumento della domanda durante i saldi stagionali. Ti consigliamo di aumentare o ridurre manualmente le risorse dei tuoi sistemi prima di queste vendite per assicurarti che il tuo sistema possa gestire immediatamente il carico maggiore o adeguare immediatamente i limiti esistenti. In caso contrario, il sistema potrebbe impiegare diversi minuti per aggiungere risorse in risposta alle modifiche in tempo reale. La capacità della tua applicazione potrebbe non aumentare abbastanza rapidamente e causare ritardi per alcuni utenti.
Per eventi sconosciuti o imprevisti, come un improvviso aumento della domanda o del traffico, puoi utilizzare le funzionalità di scalabilità automatica per attivare lo scaling elastico basato sulle metriche. Queste metriche possono includere l'utilizzo della CPU, la capacità di gestione del bilanciatore del carico, la latenza e persino metriche personalizzate che definisci in Cloud Monitoring.
Ad esempio, considera un'applicazione eseguita su un gruppo di istanze gestite di Compute Engine. Questa applicazione ha un requisito che prevede che ogni istanza funzioni in modo ottimale finché l'utilizzo medio della CPU non raggiunge il 75%. In questo esempio, potresti definire una policy di scalabilità automatica che crea più istanze quando l'utilizzo della CPU raggiunge la soglia. Queste istanze appena create contribuiscono ad assorbire il carico, il che contribuisce a garantire che l'utilizzo medio della CPU rimanga a un tasso ottimale fino al raggiungimento del numero massimo di istanze configurato per il MIG. Quando la domanda diminuisce, la norma di scalabilità automatica rimuove le istanze che non sono più necessarie.
Pianifica le prenotazioni di slot di risorse in BigQuery o regola i limiti per le configurazioni di scalabilità automatica in Spanner utilizzando lo scaler automatico gestito.
Utilizzare la scalabilità predittiva
Se i componenti del sistema includono Compute Engine, devi valutare se la scalabilità automatica predittiva è adatta al tuo workload. La scalabilità automatica predittiva prevede il carico futuro in base alle tendenze storiche delle metriche, ad esempio l'utilizzo della CPU. Le previsioni vengono ricalcolate ogni pochi minuti, quindi il gestore della scalabilità automatica adatta rapidamente le sue previsioni alle variazioni più recenti del carico. Senza la scalabilità automatica predittiva, un gestore della scalabilità automatica può scalare un gruppo solo in modo reattivo, in base alle variazioni del carico osservate in tempo reale. La scalabilità automatica predittiva funziona sia con i dati in tempo reale sia con i dati storici per rispondere al carico attuale e a quello previsto.
Implementare architetture serverless
Valuta la possibilità di implementare un'architettura serverless con servizi serverless intrinsecamente elastici, ad esempio:
A differenza della scalabilità automatica in altri servizi che richiedono regole di ottimizzazione (ad esempio Compute Engine), la scalabilità automatica serverless è istantanea e può fare lo scale down fino a zero risorse.
Utilizzare la modalità Autopilot per Kubernetes
Per le applicazioni complesse che richiedono un maggiore controllo su Kubernetes, valuta la possibilità di utilizzare la modalità Autopilot in Google Kubernetes Engine (GKE). La modalità Autopilot offre automazione e scalabilità per impostazione predefinita. GKE esegue automaticamente lo scale dei nodi e delle risorse in base al traffico. GKE gestisce i nodi, crea nuovi nodi per le tue applicazioni e configura gli upgrade e le riparazioni automatici.
Promuovere la progettazione modulare
Questo principio del pilastro dell'ottimizzazione del rendimento del Google Cloud Well-Architected Framework fornisce consigli per promuovere un design modulare. Componenti modulari e interfacce chiare possono consentire una scalabilità flessibile, aggiornamenti indipendenti e la separazione futura dei componenti.
Panoramica del principio
Comprendi le dipendenze tra i componenti dell'applicazione e i componenti del sistema per progettare un sistema scalabile.
La progettazione modulare consente flessibilità e resilienza, indipendentemente dal fatto che sia stata inizialmente implementata un'architettura monolitica o di microservizi. Se scomponi il sistema in moduli indipendenti e ben definiti con interfacce chiare, puoi scalare i singoli componenti per soddisfare esigenze specifiche.
Lo scaling mirato può contribuire a ottimizzare l'utilizzo delle risorse e a ridurre i costi nei seguenti modi:
- Esegue il provisioning solo delle risorse necessarie per ogni componente e alloca meno risorse ai componenti meno impegnativi.
- Aggiunge più risorse durante i periodi di traffico elevato per mantenere l'esperienza utente.
- Rimuove le risorse sottoutilizzate senza compromettere il rendimento.
La modularità migliora anche la manutenibilità. Le unità più piccole e autonome sono più facili da comprendere, eseguire il debug e aggiornare, il che può portare a cicli di sviluppo più rapidi e a una riduzione dei rischi.
Sebbene la modularità offra vantaggi significativi, devi valutare i potenziali compromessi in termini di prestazioni. L'aumento della comunicazione tra i moduli può introdurre latenza e sovraccarico. Cerca un equilibrio tra modularità e prestazioni. Un design altamente modulare potrebbe non essere adatto a tutti. Quando le prestazioni sono fondamentali, potrebbe essere appropriato un approccio più strettamente accoppiato. La progettazione del sistema è un processo iterativo, in cui rivedi e perfezioni continuamente la progettazione modulare.
Consigli
Per promuovere i design modulari, prendi in considerazione i consigli riportati nelle seguenti sezioni.
Progettazione per il basso accoppiamento
Progetta un'architettura a basso accoppiamento. Componenti indipendenti con dipendenze minime possono aiutarti a creare applicazioni scalabili e resilienti. Quando pianifichi i limiti per i tuoi servizi, devi considerare i requisiti di disponibilità e scalabilità. Ad esempio, se un componente ha requisiti diversi dagli altri componenti, puoi progettarlo come servizio autonomo. Implementa un piano per errori controllati per servizi o sottoprocessi meno importanti che non influiscono sul tempo di risposta dei servizi principali.
Progettazione per la concorrenza e il parallelismo
Progetta la tua applicazione in modo che supporti più attività contemporaneamente, ad esempio l'elaborazione di più richieste utente o l'esecuzione di job in background mentre gli utenti interagiscono con il tuo sistema. Suddividi le attività di grandi dimensioni in blocchi più piccoli che possono essere elaborati contemporaneamente da più istanze di servizio. La concorrenza delle attività ti consente di utilizzare funzionalità come la scalabilità automatica per aumentare l'allocazione delle risorse in prodotti come i seguenti:
Bilanciare la modularità per un'allocazione flessibile delle risorse
Ove possibile, assicurati che ogni componente utilizzi solo le risorse necessarie (come memoria, spazio di archiviazione e potenza di elaborazione) per operazioni specifiche. L'allocazione eccessiva delle risorse può comportare costi inutili, mentre l'allocazione insufficiente delle risorse può compromettere le prestazioni.
Utilizzare interfacce ben definite
Assicurati che i componenti modulari comunichino in modo efficace tramite interfacce chiare e standardizzate (come API e code di messaggi) per ridurre il sovraccarico dovuto ai livelli di traduzione o al traffico estraneo.
Utilizzare modelli stateless
Un modello stateless può aiutarti a gestire ogni richiesta o interazione con il servizio indipendentemente dalle richieste precedenti. Questo modello facilita la scalabilità e il recupero, perché puoi aumentare, ridurre o riavviare il servizio senza perdere i dati necessari per le richieste o i processi in corso.
Scegliere tecnologie complementari
Scegli tecnologie che completino il design modulare. Valuta linguaggi di programmazione, framework e database in base al supporto della modularità.
Per maggiori informazioni, consulta le seguenti risorse:
Monitorare e migliorare continuamente le prestazioni
Questo principio del pilastro dell'ottimizzazione delle prestazioni del Google Cloud Well-Architected Framework fornisce consigli per aiutarti a monitorare e migliorare continuamente le prestazioni.
Dopo aver eseguito il deployment delle applicazioni, monitorane continuamente il rendimento utilizzando log, tracciamento, metriche e avvisi. Man mano che le tue applicazioni crescono ed evolvono, puoi utilizzare le tendenze di questi punti dati per rivalutare i requisiti di rendimento. Potresti dover riprogettare alcune parti delle tue applicazioni per mantenere o migliorare le loro prestazioni.
Panoramica del principio
Il processo di miglioramento continuo delle prestazioni richiede strumenti e strategie di monitoraggio robusti. Gli strumenti di osservabilità del cloud possono aiutarti a raccogliere indicatori chiave di prestazione (KPI) come latenza, velocità effettiva, tassi di errore e utilizzo delle risorse. Gli ambienti cloud offrono una serie di metodi per condurre valutazioni granulari delle prestazioni nell'applicazione, nella rete e nell'esperienza utente finale.
Il miglioramento del rendimento è un impegno costante che richiede un approccio multidimensionale. I seguenti meccanismi e processi chiave possono aiutarti a migliorare il rendimento:
- Per fornire indicazioni chiare e monitorare i progressi, definisci obiettivi di rendimento in linea con i tuoi obiettivi commerciali. Imposta obiettivi SMART: specifici, misurabili, attuabili, pertinenti e in un tempo definito.
- Per misurare il rendimento e identificare le aree di miglioramento, raccogli le metriche KPI.
- Per monitorare continuamente i tuoi sistemi per rilevare problemi, utilizza i flussi di lavoro visualizzati negli strumenti di monitoraggio. Utilizza le tecniche di mappatura dei processi di architettura per identificare ridondanze e inefficienze.
- Per creare una cultura del miglioramento continuo, fornisci formazione e programmi che supportino la crescita dei tuoi dipendenti.
- Per incoraggiare il miglioramento proattivo e continuo, incentiva i tuoi dipendenti e clienti a fornire feedback continui sul rendimento della tua applicazione.
Consigli
Per promuovere i design modulari, prendi in considerazione i consigli riportati nelle seguenti sezioni.
Definisci obiettivi e metriche di rendimento chiari
Definisci obiettivi di rendimento chiari e in linea con i tuoi obiettivi aziendali. Questo richiede una profonda comprensione dell'architettura della tua applicazione e dei requisiti di rendimento di ogni componente dell'applicazione.
Come priorità, ottimizza i componenti più critici che influenzano direttamente le funzioni aziendali principali e l'esperienza utente. Per garantire che questi componenti continuino a funzionare in modo efficiente e a soddisfare le tue esigenze aziendali, imposta target di rendimento specifici e misurabili. Questi target possono includere tempi di risposta, tassi di errore e soglie di utilizzo delle risorse.
Questo approccio proattivo può aiutarti a identificare e risolvere potenziali colli di bottiglia, ottimizzare l'allocazione delle risorse e, in definitiva, offrire un'esperienza fluida e ad alte prestazioni per i tuoi utenti.
Monitoraggio del rendimento
Monitora continuamente i tuoi sistemi cloud per rilevare problemi di prestazioni e configura avvisi per eventuali problemi potenziali. Il monitoraggio e gli avvisi possono aiutarti a rilevare e risolvere i problemi prima che si ripercuotano sugli utenti. La profilazione delle applicazioni può aiutarti a identificare i colli di bottiglia e a ottimizzare l'utilizzo delle risorse.
Puoi utilizzare strumenti che facilitano la risoluzione dei problemi e l'ottimizzazione della rete. Utilizza Google Cloud Observability per identificare le aree con consumo elevato di CPU, memoria o rete. Queste funzionalità possono aiutare gli sviluppatori a migliorare l'efficienza, ridurre i costi e migliorare l'esperienza utente. Network Intelligence Center mostra visualizzazioni della topologia dell'infrastruttura di rete e può aiutarti a identificare i percorsi a latenza elevata.
Incentivare il miglioramento continuo
Crea una cultura del miglioramento continuo che possa avvantaggiare sia l'applicazione sia l'esperienza utente.
Offri ai tuoi dipendenti opportunità di formazione e sviluppo che migliorino le loro competenze e conoscenze nelle tecniche di rendimento nei servizi cloud. Crea una community di pratica (CoP) e offri programmi di mentoring e coaching per supportare la crescita dei dipendenti.
Per evitare la gestione delle prestazioni reattiva e incoraggiare quella proattiva, incoraggia il feedback continuo da parte di dipendenti, clienti e stakeholder. Puoi valutare di gamificare il processo monitorando i KPI sul rendimento e presentando queste metriche ai team con frequenza sotto forma di classifica.
Per comprendere il rendimento e la soddisfazione degli utenti nel tempo, ti consigliamo di misurare il feedback degli utenti in modo quantitativo e qualitativo. Il framework HEART può aiutarti ad acquisire il feedback degli utenti in cinque categorie:
- Soddisfazione
- Coinvolgimento
- Adozione
- Conservazione
- Successo dell'attività
Utilizzando un framework di questo tipo, puoi incentivare gli ingegneri con feedback basati sui dati, metriche incentrate sull'utente, approfondimenti pratici e una chiara comprensione degli obiettivi.