Google Cloud Well-Architected Framework: ottimizzazione delle prestazioni

Last reviewed 2025-02-14 UTC

Questo pilastro del Google Cloud Framework Well-Architected fornisce suggerimenti per ottimizzare il rendimento dei carichi di lavoro in Google Cloud.

Questo documento è rivolto 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 del backend di un'applicazione diminuisce, gli utenti beneficiano di 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, a volte l'ottimizzazione delle prestazioni può aiutarti a ridurre i costi. ​​Ad esempio, quando il carico aumenta, la scalabilità automatica può contribuire a fornire un rendimento prevedibile garantendo che le risorse di sistema non siano sovraccarcate. La scalabilità automatica ti aiuta anche a ridurre i costi rimuovendo le risorse non utilizzate durante i periodi di carico ridotto.

L'ottimizzazione delle prestazioni è un processo continuo, non un'attività una tantum. Il seguente diagramma mostra le fasi del processo di ottimizzazione del rendimento:

Procedura di ottimizzazione delle prestazioni

Il processo di ottimizzazione del rendimento è un ciclo continuo che include le seguenti fasi:

  1. Definire i requisiti: definisci requisiti di prestazioni granulari per ogni livello dello stack delle applicazioni prima di progettare e sviluppare le applicazioni. Per pianificare l'allocazione delle risorse, prendi in considerazione le caratteristiche principali del carico di lavoro e le aspettative relative al rendimento.
  2. Progettazione ed esecuzione del deployment: utilizza pattern di progettazione elastici e scalabili che possono aiutarti a soddisfare i tuoi requisiti di rendimento.
  3. Monitora e analizza: monitora continuamente le prestazioni utilizzando log, tracing, metriche e avvisi.
  4. Ottimizza: valuta potenziali riprogettazioni man mano che le applicazioni si evolvono. Scegli le risorse cloud di dimensioni adeguate e utilizza le nuove funzionalità per soddisfare i requisiti di prestazioni in evoluzione.

    Come mostrato nel diagramma precedente, continua il ciclo di monitoraggio, rivalutazione dei requisiti e modifica delle risorse cloud.

Per i principi e i consigli per l'ottimizzazione delle prestazioni specifici per i carichi di lavoro di AI e ML, consulta Punto di vista AI e ML: ottimizzazione delle prestazioni nel framework Well-Architected.

Principi fondamentali

I consigli nel pilastro di ottimizzazione del rendimento del framework Well-Architected sono mappati ai seguenti principi fondamentali:

Collaboratori

Autori:

Altri collaboratori:

Pianifica l'allocazione delle risorse

Questo principio del pilastro di ottimizzazione del rendimento del Google Cloud Framework Well-Architected 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 della tua attività, è importante definire i requisiti di prestazioni per le tue applicazioni prima della progettazione e dello sviluppo. Definisci questi requisiti il più granularmente 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 I/O al secondo (IOPS) di cui hanno bisogno le applicazioni.

Fin dall'inizio, pianifica i progetti delle applicazioni tenendo conto del rendimento e della scalabilità. Prendi in considerazione fattori quali il numero di utenti, il volume di dati e la crescita potenziale nel tempo.

I requisiti di prestazioni per ogni carico di lavoro variano e dipendono dal tipo di carica di lavoro. Ogni carico di lavoro può contenere una combinazione di sistemi e servizi di componenti che hanno set unici di caratteristiche di prestazioni. Ad esempio, un sistema responsabile dell'elaborazione batch periodica di set di dati di grandi dimensioni ha requisiti di prestazioni diversi rispetto a una soluzione di desktop virtuale interattiva. Le strategie di ottimizzazione devono soddisfare le esigenze specifiche di ciascun carico di lavoro.

Seleziona servizi e funzionalità in linea con gli obiettivi di rendimento di ogni workload. Per l'ottimizzazione del rendimento, non esiste una soluzione universale. Se ottimizzi ogni carico di lavoro, l'intero sistema può raggiungere prestazioni e efficienza ottimali.

Prendi in considerazione le seguenti caratteristiche del carico di lavoro che possono influire sui requisiti di prestazioni:

  • Archetipo di deployment: l'archetipo di deployment selezionato per un'applicazione può influire sulla scelta di prodotti e funzionalità, che a loro volta determinano il rendimento che puoi aspettarti dall'applicazione.
  • Posizionamento delle risorse: quando selezioni una Google Cloud regione per le risorse dell'applicazione, ti consigliamo di dare la priorità alla latenza bassa per gli utenti finali, di rispettare le normative sulla località dei dati e di garantire la disponibilità dei prodotti e dei servizi Google Cloud obbligatori.
  • Connettività di rete: scegli servizi di rete che ottimizzano l'accesso ai dati e la pubblicazione dei contenuti. Sfrutta la rete globale, le 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 il throughput possono avere un impatto significativo sul rendimento. Inoltre, all'inizio della fase di progettazione, devi prendere in considerazione le funzionalità di sicurezza appropriate e il loro impatto sulle risorse. Quando pianifichi le funzionalità di sicurezza, preparati a fare i compromessi necessari sul rendimento per evitare effetti imprevisti.

Consigli

Per garantire un'allocazione ottimale delle risorse, valuta i consigli riportati nelle seguenti sezioni.

Configurare e gestire le quote

Assicurati che l'applicazione utilizzi solo le risorse necessarie, come memoria, archiviazione e potenza di elaborazione. L'allocazione eccessiva può comportare spese non necessarie, mentre l'allocazione insufficiente potrebbe comportare un calo delle prestazioni.

Per supportare la scalabilità elastica e assicurarti che siano disponibili risorse adeguate, monitora regolarmente la capacità delle quote. Inoltre, monitora l'utilizzo della quota per identificare potenziali vincoli di scalabilità o problemi di sovraallocazione, e poi prendi decisioni informate sull'allocazione delle risorse.

Informare e promuovere la consapevolezza

Informa gli utenti sui requisiti di rendimento e fornisci risorse didattiche sulle tecniche di gestione del rendimento efficaci.

Per valutare i progressi e identificare le aree di miglioramento, documenta regolarmente il rendimento target e quello effettivo. Esegui un test di carico dell'applicazione per trovare potenziali breakpoint e capire come puoi scalarla.

Monitorare le metriche sul rendimento

Utilizza Cloud Monitoring per analizzare le tendenze delle metriche sul rendimento, per analizzare gli effetti degli esperimenti, per definire avvisi per le metriche critiche e per 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 ad adeguare l'allocazione delle risorse e migliorare il rendimento.

Sfrutta l'elasticità

Questo principio del pilastro di ottimizzazione del rendimento del Google Cloud Framework Well-Architected fornisce consigli per aiutarti a incorporare l'elasticità, ovvero la capacità di aggiustare le risorse in modo dinamico in base alle variazioni dei requisiti del carico di lavoro.

L'elasticità consente ai diversi componenti di un sistema di scalare in modo indipendente. Questo scaling mirato può contribuire a migliorare il rendimento e l'efficienza in termini di costi allocando le risorse esattamente dove sono necessarie, senza eseguire un overprovisioning o un underprovisioning delle risorse.

Panoramica del principio

I requisiti di prestazioni 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 dovrebbe gestire in base alla linea di base. Poi, devi determinare come vuoi che il sistema risponda agli aumenti e alle diminuzioni del carico.

Quando il carico aumenta, il sistema deve eseguire lo scale out orizzontale, lo scale up verticale o entrambi. Per la scalabilità orizzontale, aggiungi nodi replica per assicurarti che il sistema abbia una capacità complessiva sufficiente per soddisfare la domanda in aumento. Per la scalabilità verticale, sostituisci i componenti esistenti dell'applicazione con componenti che offrono una maggiore capacità, più memoria e più spazio di archiviazione.

Quando il carico diminuisce, il sistema deve eseguire lo scale down (orizzontalmente, verticalmente o entrambi).

Definisci le circostanze in cui il sistema aumenta o riduce le dimensioni. Pianifica di eseguire manualmente l'aumento della scalabilità dei sistemi per periodi noti di traffico elevato. Utilizza strumenti come la scalabilità automatica, che risponde agli aumenti o alle diminuzioni del carico.

Consigli

Per sfruttare l'elasticità, tieni presenti i consigli riportati nelle seguenti sezioni.

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 aumentare le dimensioni del sistema prima di periodi di traffico elevato noti. Ad esempio, se sei un'organizzazione di vendita al dettaglio, prevedi che la domanda aumenti durante i saldi stagionali. Ti consigliamo di eseguire manualmente lo scaling up o lo scaling out dei sistemi prima di queste vendite per assicurarti che il sistema possa gestire immediatamente l'aumento del carico o regolare 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 aumento improvviso della domanda o del traffico, puoi utilizzare le funzionalità di scalabilità automatica per attivare la scalabilità elastica in base alle metriche. Queste metriche possono includere l'utilizzo della CPU, la capacità di gestione del bilanciatore del carico, la latenza e persino le metriche personalizzate che definisci in Cloud Monitoring.

Ad esempio, considera un'applicazione che viene eseguita su un gruppo di istanze gestite (MIG) di Compute Engine. Questa applicazione richiede che ogni istanza funzioni in modo ottimale fino a quando l'utilizzo medio della CPU non raggiunge il 75%. In questo esempio, potresti definire un criterio di scalabilità automatica che crei 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 configurate per il gruppo di istanze gestite. Quando la domanda diminuisce, il piano di scalabilità automatica rimuove le istanze che non sono più necessarie.

Pianifica prenotazioni di slot di risorse in BigQuery o modifica i limiti per le configurazioni di scalabilità automatica in Spanner utilizzando il modulo di scalabilità automatica gestito.

Utilizzare la scalabilità predittiva

Se i componenti di sistema includono Compute Engine, devi valutare se il ridimensionamento automatico predittivo è adatto al tuo carico di lavoro. La scalabilità automatica predittiva prevede il carico futuro in base alle tendenze storiche delle tue metriche, ad esempio l'utilizzo della CPU. Le previsioni vengono ricalcolate ogni pochi minuti, quindi il gestore della scalabilità automatica adatta rapidamente la sua previsione alle variazioni molto 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 in tempo reale del carico osservate. La scalabilità automatica predittiva funziona sia con i dati in tempo reale sia con quelli storici per rispondere sia al carico attuale sia a quello previsto.

Implementare architetture serverless

Valuta la possibilità di implementare un'architettura serverless con servizi serverless che sono intrinsecamente elastici, ad esempio:

A differenza della scalabilità automatica in altri servizi che richiedono regole di ottimizzazione (ad esempio Compute Engine), la scalabilità automatica del serverless è istantanea e può ridurre le risorse a zero.

Utilizzare la modalità Autopilot per Kubernetes

Per le applicazioni complesse che richiedono un maggiore controllo su Kubernetes, valuta la modalità Autopilot in Google Kubernetes Engine (GKE). La modalità Autopilot offre automazione e scalabilità per impostazione predefinita. GKE scala automaticamente i nodi e le risorse in base al traffico. GKE gestisce i nodi, ne crea di nuovi per le tue applicazioni e configura upgrade e riparazioni automatici.

Promuovi il design modulare

Questo principio del pilastro di ottimizzazione del rendimento del Google Cloud Framework Well-Architected fornisce consigli per aiutarti a 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.

Il design 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.

La scalabilità mirata può contribuire a ottimizzare l'utilizzo delle risorse e a ridurre i costi nei seguenti modi:

  • Fornisce solo le risorse necessarie a ciascun componente e alloca meno risorse ai componenti meno esigenti.
  • 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 indipendenti sono più facili da comprendere, eseguire il debug e aggiornare, il che può portare a cicli di sviluppo più rapidi e a rischi ridotti.

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 overhead. Cerca di trovare un equilibrio tra modularità e rendimento. Un design altamente modulare potrebbe non essere adatto a tutti. Quando le prestazioni sono fondamentali, potrebbe essere appropriato un approccio più accoppiato. La progettazione di sistema è un processo iterativo, in cui esamini e perfezioni continuamente il design modulare.

Consigli

Per promuovere i design modulari, tieni presenti i consigli riportati nelle seguenti sezioni.

Progettare per un basso accoppiamento

Progetta un'architettura a basso accoppiamento. Componenti indipendenti con dipendenze minime possono aiutarti a creare applicazioni scalabili e resilienti. Quando pianifichi i confini dei 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 i guasti graduali per sottoprocessi o servizi meno importanti che non influiscono sul tempo di risposta dei servizi principali.

Progettazione per la concorrenza e il parallelismo

Progetta l'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 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:

Bilancia la modularità per l'allocazione flessibile delle risorse

Se 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 non necessari, mentre l'allocazione insufficiente delle risorse può compromettere le prestazioni.

Utilizza 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 dei livelli di traduzione o del traffico estraneo.

Utilizza 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 le procedure in corso.

Scegliere tecnologie complementari

Scegli tecnologie che completino il design modulare. Valuta i linguaggi di programmazione, i framework e i database per il loro supporto della modularità.

Per maggiori informazioni, consulta le seguenti risorse:

Monitora e migliora continuamente le prestazioni

Questo principio del pilastro di ottimizzazione delle prestazioni del Google Cloud Framework Well-Architected fornisce consigli per aiutarti a monitorare e migliorare continuamente il rendimento.

Dopo aver eseguito il deployment delle applicazioni, monitora continuamente il loro rendimento utilizzando log, monitoraggio, metriche e avvisi. Man mano che le applicazioni crescono ed evolvono, puoi utilizzare le tendenze di questi punti dati per rivalutare i requisiti di rendimento. Potresti dover ridisegnare parti delle tue applicazioni per mantenere o migliorare il loro rendimento.

Panoramica del principio

Il processo di miglioramento continuo del rendimento richiede strategie e strumenti di monitoraggio efficaci. Gli strumenti di osservabilità del cloud possono aiutarti a raccogliere indicatori chiave di prestazione (KPI) come latenza, throughput, tassi di errore e utilizzo delle risorse. Gli ambienti cloud offrono una serie di metodi per eseguire valutazioni granulari del rendimento nell'applicazione, nella rete e nell'esperienza dell'utente finale.

Il miglioramento del rendimento è un impegno continuo che richiede un approccio multiforme. I seguenti meccanismi e processi chiave possono aiutarti a migliorare il rendimento:

  • Per fornire indicazioni chiare e contribuire a monitorare i progressi, definisci scopi di rendimento in linea con i tuoi scopi commerciali. Imposta obiettivi SMART: specifici, misurabili, raggiungibili, pertinenti e vincolati nel tempo.
  • Per misurare il rendimento e identificare le aree di miglioramento, raccogli le metriche KPI.
  • Per monitorare continuamente i sistemi alla ricerca di problemi, utilizza i flussi di lavoro visualizzati negli strumenti di monitoraggio. Utilizza tecniche di mappatura dei processi dell'architettura per identificare ridondanze e inefficienze.
  • Per creare una cultura del miglioramento continuo, offri formazione e programmi che supportino la crescita dei tuoi dipendenti.
  • Per incoraggiare un miglioramento proattivo e continuo, incentiva i dipendenti e i clienti a fornire un feedback continuo sul rendimento della tua applicazione.

Consigli

Per promuovere i design modulari, tieni presenti i consigli riportati nelle seguenti sezioni.

Definisci obiettivi e metriche di rendimento chiari

Definisci obiettivi di rendimento chiari in linea con gli obiettivi della tua attività. Per farlo, è necessario comprendere a fondo l'architettura dell'applicazione e i requisiti di rendimento di ciascun componente dell'applicazione.

Come priorità, ottimizza i componenti più critici che influiscono direttamente sulle funzioni aziendali di base e sull'esperienza utente. Per contribuire a garantire che questi componenti continuino a funzionare in modo efficiente e a soddisfare le esigenze della tua attività, imposta obiettivi 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 ultima analisi, offrire un'esperienza fluida e ad alte prestazioni per i tuoi utenti.

Monitoraggio del rendimento

Monitora costantemente i tuoi sistemi cloud per rilevare eventuali problemi di prestazioni e configura degli avvisi per eventuali problemi potenziali. Il monitoraggio e gli avvisi possono aiutarti a rilevare e risolvere i problemi prima che si ripercuotano sugli utenti. Il profiling 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 un elevato consumo 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 ad alta latenza.

Incentiva il miglioramento continuo

Crea una cultura di miglioramento continuo che può essere vantaggiosa sia per l'applicazione sia per l'esperienza utente.

Offri ai tuoi dipendenti opportunità di formazione e sviluppo che migliorino le loro competenze e conoscenze sulle tecniche di miglioramento delle prestazioni nei servizi cloud. Crea una community of practice (CoP) e offri programmi di mentoring e coaching per supportare la crescita dei dipendenti.

Per evitare una gestione delle prestazioni reattiva e incoraggiare una gestione proattiva, sollecita un feedback continuo da parte dei dipendenti, dei clienti e degli stakeholder. Puoi prendere in considerazione la possibilità di rendere il processo più coinvolgente monitorando i KPI sul rendimento e presentando queste metriche ai team su base frequente 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 a raccogliere i 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 sugli utenti, approfondimenti strategici e una chiara comprensione degli obiettivi.