Consigli per l'ottimizzazione continua delle prestazioni

Si applica a questa raccomandazione per l'efficienza delle prestazioni di Azure Well-Architected Framework:

PE:12 Ottimizzare continuamente le prestazioni. Concentrarsi sui componenti che mostrano un peggioramento delle prestazioni nel tempo, ad esempio database e funzionalità di rete.

Questa guida descrive le raccomandazioni per l'ottimizzazione continua delle prestazioni. L'ottimizzazione continua delle prestazioni è il processo di monitoraggio costante, analisi e miglioramento dell'efficienza delle prestazioni. L'efficienza delle prestazioni si adatta agli aumenti e alle riduzioni della domanda. L'ottimizzazione delle prestazioni deve essere un'attività in corso durante tutta la durata del carico di lavoro. Le prestazioni del carico di lavoro spesso diminuiscono o diventano eccessive nel tempo e i fattori da considerare includono modifiche ai modelli di utilizzo, alla domanda, alle funzionalità e al debito tecnico.

Definizioni

Termine Definizione
Suddivisione in livelli dati Strategia di archiviazione che prevede la categorizzazione dei dati in base alla frequenza di accesso e all'archiviazione nei livelli di archiviazione di conseguenza.
Debito tecnico Le inefficienze accumulate, le scelte di progettazione non ottimali o i collegamenti intenzionalmente eseguiti durante il processo di sviluppo per fornire il codice più velocemente.
Time-To-Live Meccanismo che imposta una scadenza per i dati.

Strategie di progettazione chiave

L'efficienza delle prestazioni è quando la capacità del carico di lavoro è allineata all'utilizzo effettivo. Un carico di lavoro che supera le prestazioni è problematico come quello che supera le prestazioni.A workload that overperforms is as problematic as one that underperforms. I compromessi differiscono. L'overperformance influisce sull'ottimizzazione dei costi. Le prestazioni scarse influiscono sugli utenti. La chiave per l'efficienza delle prestazioni è il monitoraggio, la regolazione e il test nel tempo. È necessario esaminare regolarmente le metriche delle prestazioni e apportare modifiche in base alle esigenze per garantire che il carico di lavoro sia efficiente. Per raggiungere gli obiettivi di prestazioni, è necessario testare tutte le modifiche pre e post-implementazione.

Sviluppare impostazioni cultura delle prestazioni

Una cultura delle prestazioni è un ambiente in cui è previsto un miglioramento continuo e il team apprende dalla produzione. L'ottimizzazione delle prestazioni richiede competenze specializzate. I team del carico di lavoro hanno bisogno delle competenze e della mentalità appropriate per ottimizzare le prestazioni per soddisfare aumenti e riduzioni della domanda. È anche necessario allocare il tempo necessario per supportare il monitoraggio e la correzione necessari dei problemi di prestazioni quando si verificano. Questi team necessitano di aspettative chiare. Ad esempio, gli obiettivi di prestazioni, le baseline e le soglie di deviazione (quanto lontano dalla baseline è accettabile) devono essere altamente visibili e socializzati.

Compromesso: le ottimizzazioni continue delle prestazioni richiedono un team con le competenze e il tempo giusti per trovare e risolvere i problemi di prestazioni. Dedicare il personale alle prestazioni aggiunge costi operativi. Se si dispone di risorse del personale limitate, l'ottimizzazione continua delle prestazioni potrebbe richiedere tempo ad altre attività operative.

Valutare le nuove funzionalità della piattaforma

La valutazione di nuove funzionalità della piattaforma comporta l'esame delle nuove funzionalità e degli strumenti di una piattaforma che può migliorare l'efficienza delle prestazioni, ad esempio soluzioni di archiviazione ottimizzate, meccanismi di memorizzazione nella cache o strumenti di gestione delle risorse. Le nuove funzionalità della piattaforma possono aprire strade per migliorare l'efficienza delle prestazioni. Mantenere aggiornata la piattaforma e gli strumenti per assicurarsi di usare le innovazioni e le procedure consigliate più recenti. Monitorare in modo coerente le metriche di feedback e prestazioni di queste nuove aggiunte per perfezionare l'approccio.

Assegnare priorità alle attività di ottimizzazione

L'ottimizzazione proattiva delle prestazioni significa adottare misure proattive per migliorare e migliorare le prestazioni del carico di lavoro prima che si verifichino problemi di prestazioni. L'uso di misure proattive comporta l'identificazione di potenziali colli di bottiglia, il monitoraggio delle metriche delle prestazioni e l'implementazione di ottimizzazioni per garantire che il carico di lavoro funzioni in modo efficiente e soddisfi gli obiettivi di prestazioni desiderati. In base all'analisi dei componenti deteriorati, dei flussi critici e del debito tecnico, è possibile implementare ottimizzazioni delle prestazioni specifiche per ogni area. I miglioramenti possono comportare modifiche al codice, modifiche dell'infrastruttura o aggiornamenti della configurazione.

Classificare in ordine di priorità i componenti deteriorati

Un carico di lavoro ha spesso componenti come database e componenti di rete soggetti a riduzioni delle prestazioni nel tempo. Man mano che il carico di lavoro evolve e cambiano i modelli di utilizzo, queste modifiche spesso influiscono sulle prestazioni dei singoli componenti nel carico di lavoro. L'aumento dei dati nei database può comportare tempi di esecuzione delle query più lunghi e un recupero dei dati più lento. Le modifiche apportate ai modelli di utilizzo potrebbero comportare una progettazione di query non ottimale. Le query una volta efficienti possono diventare inefficienti man mano che il carico di lavoro si evolve. Le query inefficienti possono utilizzare risorse eccessive e ridurre le prestazioni del database. Un aumento dell'utilizzo del carico di lavoro può causare un traffico di rete superiore, causando problemi di congestione e latenza.

È importante eseguire sforzi continui per ottimizzare le prestazioni di questi componenti. Identificare e risolvere in modo proattivo i problemi di prestazioni nel carico di lavoro. Assegnando priorità ai componenti di deterioramento noti, è possibile risolvere in modo proattivo potenziali problemi di prestazioni e garantire il corretto funzionamento del carico di lavoro. Può comportare l'implementazione di tecniche di ottimizzazione delle prestazioni, l'ottimizzazione dell'allocazione delle risorse o l'aggiornamento di componenti hardware o software in base alle esigenze.

Classificare in ordine di priorità i flussi critici

I flussi critici sono i processi o i flussi di lavoro più importanti e ad alta priorità nel carico di lavoro. Assegnando priorità a questi flussi critici, assicurarsi che le parti più essenziali del carico di lavoro siano ottimizzate per le prestazioni. Sapere quali flussi sono fondamentali consente di classificare in ordine di priorità le attività di ottimizzazione. L'ottimizzazione dell'efficienza delle prestazioni delle aree più importanti dell'applicazione offre il massimo ritorno sugli investimenti. È consigliabile monitorare i flussi critici e le pagine più diffuse. Cercare modi per renderli più efficienti.

Automatizzare l'ottimizzazione delle prestazioni

L'automazione può eliminare processi manuali ripetitivi e dispendiosi in termini di tempo, consentendo loro di essere eseguiti in modo efficiente. L'automazione riduce le probabilità di errore umano e garantisce coerenza nelle attività di ottimizzazione in esecuzione. Automatizzando queste attività, è anche possibile liberare le persone per concentrarsi su attività e attività più complesse che aggiungono valore. È possibile applicare l'automazione a varie attività, ad esempio test delle prestazioni, distribuzione e monitoraggio:

  • Test automatizzato delle prestazioni: usare strumenti di test delle prestazioni automatizzati come JMeter, K6 o Selenium per simulare carichi di lavoro e scenari diversi.

  • Distribuzione automatizzata: implementare processi di distribuzione automatizzati per garantire distribuzioni coerenti e senza errori. Usare gli strumenti CI/CD per automatizzare il processo di distribuzione. Questi strumenti consentono di identificare i colli di bottiglia delle prestazioni durante l'uso per testare gli endpoint, controllare gli stati HTTP e persino convalidare la qualità e le variazioni dei dati.

  • Monitoraggio e avvisi: configurare sistemi automatizzati di monitoraggio e avvisi per monitorare continuamente le metriche delle prestazioni e rilevare eventuali deviazioni o anomalie. Quando vengono rilevati problemi di prestazioni, è possibile attivare avvisi automatizzati per notificare ai team o alle persone appropriate.

  • Gestione degli eventi imprevisti: implementare un sistema di gestione degli eventi imprevisti automatizzato in grado di ricevere avvisi, creare ticket e assegnare ticket ai team appropriati per la risoluzione. Questi passaggi consentono di garantire che i problemi di prestazioni vengano risolti e assegnati tempestivamente alle risorse appropriate.

  • Diagnostica automatizzata: sviluppare script o strumenti di diagnostica automatizzati in grado di analizzare i dati sulle prestazioni e identificare le cause principali dei problemi di prestazioni. Questi strumenti consentono di individuare aree o componenti specifici del sistema che causano problemi di prestazioni.

  • Azioni di correzione automatizzate: definire e implementare azioni di correzione automatizzate che possono essere attivate quando vengono rilevati problemi di prestazioni specifici. Queste azioni possono includere il riavvio dei servizi, la regolazione dell'allocazione delle risorse, la cancellazione delle cache o l'implementazione di altre tecniche di ottimizzazione delle prestazioni.

  • Sistemi di riparazione automatica: creare funzionalità di riparazione automatica nel sistema automatizzando il processo di ripristino per problemi di prestazioni noti. Questa funzionalità può comportare la correzione o la regolazione automatica della configurazione del sistema per ripristinare prestazioni ottimali.

Risolvere il debito tecnico

Il debito tecnico si riferisce alle inefficienze accumulate, alle scelte di progettazione non ottimali o ai collegamenti eseguiti durante il processo di sviluppo che possono influire sulle prestazioni. Il debito tecnico, il codice poco chiaro e le implementazioni eccessivamente complesse possono rendere l'efficienza delle prestazioni più difficile da raggiungere. Affrontare il debito tecnico comporta l'identificazione e la risoluzione di questi problemi per migliorare le prestazioni complessive e la gestibilità del carico di lavoro. Questo lavoro può includere il refactoring del codice, l'ottimizzazione delle query di database, il miglioramento della progettazione dell'architettura o l'implementazione di procedure consigliate. Forse è stato introdotto un debito tecnico per soddisfare una scadenza, ma è necessario affrontare il debito tecnico man mano che si ottimizza l'efficienza delle prestazioni nel tempo.

Ottimizzare i database

L'ottimizzazione continua dei database comporta l'identificazione e l'implementazione di ottimizzazioni per garantire che i database possano gestire i carichi, fornire tempi di risposta rapidi e ridurre al minimo l'utilizzo delle risorse. Ottimizzando regolarmente i database, è possibile migliorare le prestazioni dell'applicazione, ridurre i tempi di inattività e migliorare l'esperienza utente complessiva.

  • Ottimizzare le query di database: le istruzioni SQL scritte in modo non corretto possono ridurre le prestazioni del database. Le condizioni JOIN inefficienti possono causare l'elaborazione dei dati non richieste. Le sottoquery complesse, le query annidate e le funzioni eccessive possono ridurre la velocità di esecuzione. Le query che recuperano troppi dati devono essere riscritte. È consigliabile identificare le query di database più comuni o critiche e ottimizzarle. L'ottimizzazione consente di garantire query più veloci.

  • Gestire gli indici: valutare la strategia di indicizzazione per assicurarsi che gli indici siano progettati e gestiti correttamente. La manutenzione dell'indice include l'identificazione di indici inutilizzati o ridondanti e la creazione di indici allineati ai modelli di query. Gli indici di database consentono di accelerare le operazioni di recupero dei dati. Per i database relazionali, è necessario monitorare la frammentazione dell'indice. È necessario ricompilare o riorganizzare regolarmente gli indici. Per i database non relazionali, è necessario selezionare i criteri di indicizzazione corretti per il carico di lavoro. Usare l'ottimizzazione automatica nei database in cui è disponibile. Queste funzionalità includono la creazione automatica di indici mancanti, l'eliminazione di indici inutilizzati e la correzione del piano. Per altre informazioni, vedere Gestione degli indici per migliorare le prestazioni.

  • Esaminare la progettazione del modello: esaminare il modello di dati per assicurarsi di ottimizzarlo per i requisiti specifici dell'applicazione. Il miglioramento delle prestazioni delle query e il recupero dei dati possono comportare la denormalizzazione, il partizionamento o altre tecniche.

  • Ottimizzare la configurazione del database: ottimizzare le impostazioni di configurazione del database, ad esempio l'allocazione della memoria, l'I/O del disco e le impostazioni di concorrenza per ottimizzare le prestazioni e l'utilizzo delle risorse.

Ottimizzare l'efficienza dei dati

L'ottimizzazione dell'efficienza dei dati è il processo di garantire che i dati vengano archiviati, elaborati e accessibili nel modo più efficiente possibile. I livelli di dati e l'uso di TTL (time-to-live) sono tecniche che possono essere usate per ottimizzare l'efficienza dei dati. È possibile applicare queste tecniche in vari scenari di archiviazione dati, ad esempio database, file system o archiviazione oggetti.

  • Usare la suddivisione in livelli dati: il livello dati prevede la classificazione dei dati in base all'importanza o alla frequenza di accesso e l'archiviazione dei dati in livelli diversi di conseguenza. La configurazione del livello dati consente un uso più efficiente delle risorse di archiviazione e migliora le prestazioni. I dati con accesso frequente o critico possono essere archiviati in livelli ad alte prestazioni, mentre i dati meno frequentemente accessibili o meno critici possono essere archiviati in livelli di costo inferiore. L'obiettivo è esaminare l'utilizzo dei dati nel tempo per assicurarsi che i dati siano nel livello corretto. Quando le priorità dei dati cambiano, i dati devono passare da un livello a un altro.

  • Implementare la durata: il tempo da usare è un meccanismo che imposta un'ora di scadenza per i dati. Il tempo di esecuzione consente di eliminare o archiviare automaticamente i dati dopo un determinato periodo, riducendo i requisiti di archiviazione e migliorando la gestione dei dati. Impostando una durata appropriata, è possibile rimuovere i dati non necessari, liberare spazio di archiviazione e migliorare l'efficienza complessiva. I dati di sessione, i file temporanei e i dati della cache sono destinazioni frequenti per il tempo necessario. Le voci del database possono anche avere un tempo in tempo reale.

Rischio: un tempo da vivere troppo breve può creare problemi di prestazioni.

Facilitazione di Azure

Automazione dell'ottimizzazione delle prestazioni: Azure Advisor offre consigli automatici sulle prestazioni in base ai dati di telemetria del carico di lavoro. È consigliabile esaminare e risolvere regolarmente questi consigli. Monitoraggio di Azure offre informazioni dettagliate in tempo reale sulle prestazioni del sistema e consente di configurare avvisi in base a metriche di prestazioni specifiche. Azure Log Analytics offre diagnostica e analisi automatizzate sui log e le metriche raccolte. Gli strumenti come applicazione Azure Insights forniscono informazioni dettagliate e consigli per ottimizzare le prestazioni.

Per automatizzare la correzione, usare gli strumenti di automazione o gli script per eseguire automaticamente le azioni di correzione quando vengono attivati gli avvisi. È possibile usare Automazione di Azure, Funzioni di Azure o soluzioni di automazione personalizzate.

Azure consente di testare le prestazioni per simulare diversi scenari utente e carichi di lavoro. I test automatizzati consentono di identificare i colli di bottiglia delle prestazioni e ottimizzare di conseguenza il sistema. Strumenti come Azure DevOps possono automatizzare i test delle prestazioni.

Ottimizzazione dei database: la famiglia di prodotti SQL include molte funzionalità predefinite che consentono di monitorare e correggere le prestazioni del database SQL. È consigliabile usare queste funzionalità per mantenere le prestazioni del database. Azure SQL database ha una funzionalità di ottimizzazione automatica che monitora e migliora continuamente le query. È consigliabile usare questa funzionalità per migliorare automaticamente le query SQL.

È possibile personalizzare i criteri di indicizzazione usando le funzionalità di Azure Cosmos DB. Personalizzare i criteri per soddisfare le esigenze di prestazioni del carico di lavoro.

Ottimizzazione dell'efficienza dei dati: il livello dati consente di archiviare i dati in livelli diversi in base alla frequenza di accesso e all'importanza. Consente di ottimizzare i costi e le prestazioni dell'archiviazione. Azure offre livelli di archiviazione diversi, ad esempio livelli di archiviazione ad accesso frequente, ad accesso sporadico e archivio per i dati BLOB. I livelli ad accesso frequente sono ottimizzati per i dati con accesso frequente, i livelli ad accesso sporadico sono per i dati a cui si accede raramente e i livelli di archiviazione sono per i dati a cui si accede raramente. Usando il livello di accesso all'archiviazione più adatto ai dati, è possibile garantire un'efficiente archiviazione e recupero dei dati.

Elenco di controllo dell'efficienza delle prestazioni

Fare riferimento al set completo di raccomandazioni.