Principi di progettazione dell'efficienza delle prestazioni

L'efficienza delle prestazioni è la capacità del carico di lavoro di adattarsi alle modifiche nelle richieste. Un carico di lavoro deve essere in grado di gestire un aumento del carico senza compromettere l'esperienza utente. Al contrario , quando si verifica una riduzione del carico, il carico di lavoro deve conservare le risorse. La capacità, che indica la disponibilità delle risorse (CPU e memoria), è un fattore significativo.

La progettazione del carico di lavoro non deve solo basarsi sulla capacità pre-provisioning, che garantisce prestazioni fino a un determinato limite. Se tale limite viene superato, il carico di lavoro potrebbe avere problemi di prestazioni o anche interruzioni. Quando il carico è inferiore a tale limite, le risorse continuano a essere eseguite inutilmente, in base ai costi.

È necessaria una strategia completa per sostenere gli obiettivi di prestazioni nel tempo. Le considerazioni sulle prestazioni non devono essere considerate dopo il processo di progettazione, solo per essere risolte quando si verificano problemi nell'ambiente di produzione. Adottare invece una mentalità in cui le prestazioni sono una considerazione fondamentale dalle prime fasi della progettazione. Inizialmente, compilare il sistema senza destinazioni di prestazioni specifiche. Ma da qui, testare e misurare le prestazioni in ogni fase dello sviluppo per garantire lo stato di avanzamento e l'efficacia. L'ottimizzazione continua di questi obiettivi durante il processo e l'incorporazione di lezioni apprese dalla produzione possono ridurre significativamente i potenziali problemi in anticipo.

Questi principi di progettazione possono aiutare a creare la strategia per la gestione della capacità delle risorse in modo da soddisfare sufficientemente i requisiti aziendali per l'utilizzo previsto. Inoltre, ridurre i rifiuti durante le ore di punta. Dopo aver deciso una strategia, consolidare la progettazione usando l'elenco di controllo Efficienza prestazioni.

L'efficienza delle prestazioni riguarda l'uso efficace delle risorse del carico di lavoro. Senza una buona strategia, potrebbe non essere possibile prevedere e soddisfare le esigenze degli utenti. Potrebbe essere necessario ricorrere a un approccio di previsione a lungo termine e capacità pre-provisioning, che non consente di sfruttare al meglio la piattaforma cloud.

Negoziare obiettivi di prestazioni realistici

Icona obiettivo L'esperienza utente prevista è definita e esiste una strategia per sviluppare un benchmark e misurare le destinazioni rispetto ai requisiti aziendali predefiniti.

Dal punto di vista delle prestazioni, è ideale avere obiettivi di prestazioni ben definiti per avviare il processo di progettazione. Per impostare tali obiettivi, è necessario avere una buona comprensione dei requisiti aziendali e della qualità prevista del servizio che il carico di lavoro deve fornire. Definire le aspettative in collaborazione con gli stakeholder aziendali. Invece di concentrarsi solo sulle metriche tecniche, determinare gli effetti accettabili sull'esperienza utente per i flussi chiave.

Esiste una dipendenza circolare. Non è possibile misurare ciò che non è stato definito e non è possibile definire senza misurazione. È quindi importante misurare le prestazioni del carico di lavoro fino a raggiungere una definizione soddisfacente della soglia accettabile con contratto collettivo.

Esiste una forte correlazione tra obiettivi di prestazioni e affidabilità, che consentono di determinare la qualità del servizio in termini di prestazioni, disponibilità e resilienza. Senza una definizione chiara, è difficile misurare, avvisare e testare le prestazioni. Dopo aver stabilito le destinazioni e identificare i numeri effettivi tramite test nel tempo, è possibile implementare l'automazione per i test continui rispetto a queste destinazioni.

Rispettare le procedure consigliate per definire le destinazioni a livello di macro, anche se sono approssimative o all'interno di un intervallo.

Approccio Vantaggi
Preparare la negoziazione efficace comprendendo i concetti tecnici, esplorando le possibilità di progettazione con l'infrastruttura disponibile e usando risultati dalla sperimentazione concreta, se disponibile.

Usare i dati cronologici per ottenere visibilità su modelli di utilizzo e colli di bottiglia.

Portare informazioni dettagliate da fattori esterni, ad esempio input da analisi di mercato, esperti e standard del settore.
È possibile prendere decisioni informate in base alle informazioni pratiche.

Gli obiettivi di prestazioni sono incentrati sull'esperienza utente basata su ciò che è possibile, sulle procedure consigliate del settore e sulle tendenze correnti del mercato.
Collaborare con i proprietari aziendali per comprendere le promesse degli utenti, in termini di conformità qualitativa e normativa, se applicabile.

Mantenere una prospettiva ampia ed evitare di immergersi in dettagli granulari in questa fase.

Essere espliciti su ciò che rappresenta prestazioni accettabili, in base agli investimenti.

Comprendere il contesto aziendale e prevedere la crescita.
Si evitare di fare presupposti che potrebbero non allinearsi agli obiettivi aziendali. Determina anche chiarezza e motivazione all'interno del team del carico di lavoro.

La presenza di un contesto aziendale sui requisiti funzionali e non funzionali potrebbe scoprire le modifiche di progettazione in altri pilastri di Azure Well-Architected e aiutare a rendere informati i compromessi.

La definizione dei parametri in anticipo consente di evitare costi associati a potenziali riprogettazioni della soluzione in un secondo momento.

Consente di garantire che le destinazioni di prestazioni coprono le proiezioni future, in modo da poter allineare gli sforzi correnti con obiettivi a lungo termine.
Identificare i flussi di carico di lavoro e assegnare priorità ai flussi nel diagramma dell'architettura.

Definire la tolleranza di prestazioni di ogni flusso come intervallo tra aspirazione e prestazioni inaccettabili.

Valutare i punti di ingresso e uscita per ogni flusso, considerando la criticità del percorso, la frequenza di utilizzo e l'intensità dell'architettura.
Assegnando priorità ai flussi, è possibile concentrarsi sulle risorse su aree critiche che hanno l'effetto maggiore sui risultati utente e aziendale.

Suddividendo il sistema nelle relative parti e dipendenze, si comprende la funzione di ogni componente e l'influenza sulle prestazioni. Si diventa anche consapevoli di potenziali problemi.

Consente di stabilire una baseline di prestazioni e un'ottimizzazione dell'unità.
Iniziare a creare un modello di prestazioni Valutare se i modelli di utilizzo mostrano variazioni stagionali o giornaliere. Fattore del costo, delle operazioni e della criticità per l'azienda.

Usare gli standard del settore per quantificare le metriche e i metodi di aggregazione , ad esempio l'uso di percentile.

Valutare le aspettative e le limitazioni della domanda e dell'offerta che i vincoli aziendali impongono.

Incorporare prospettive di crescita.
Un modello di prestazioni fornisce informazioni dettagliate sull'uso ottimale delle risorse e consente di pianificare strategicamente.

Gli standard del settore consentono di eseguire il benchmarking.

La correzione futura garantisce che gli obiettivi delle prestazioni rimangano rilevanti e possano adattarsi alle modifiche.

Progettare per soddisfare i requisiti di capacità

Icona obiettivo Fornire un'offerta sufficiente per affrontare la domanda prevista.

È importante misurare in modo proattivo le prestazioni. La misurazione delle prestazioni comporta la misurazione delle baseline e la conoscenza preliminare dei componenti del sistema è probabile che si verifichino problemi. È possibile ottenerlo senza eseguire un test completo delle prestazioni o tramite un'ottimizzazione granulare. Eseguendo questi passaggi iniziali, si stabilisce una base per la gestione effettiva delle prestazioni all'inizio del ciclo di vita dello sviluppo.

Esaminare il sistema nel suo complesso, anziché concentrarsi sui singoli componenti. Evitare di ottimizzazione in questa fase. Il miglioramento delle prestazioni granulari comporta un compromesso in altre aree. Man mano che si passa attraverso il ciclo di vita e si iniziano i test di accettazione degli utenti o si passa verso l'ambiente di produzione, è possibile identificare rapidamente quali aree richiedono un'ulteriore ottimizzazione.

Approccio Vantaggi
Valutare le richieste di elasticità per i flussi identificati.

Esplorare i modelli di progettazione che possono essere implementati nello stack di tecnologie, considerando l'applicazione e i livelli di calcolo e dati sottostanti.
È possibile definire i requisiti di scalabilità nei componenti esistenti che richiedono una maggiore capacità e le aree in cui sono necessari componenti aggiuntivi per distribuire il carico.

Si è consapevoli di potenziali colli di bottiglia nel sistema e progettare controlli di compensazione, ad esempio l'aggiunta di funzionalità di memorizzazione nella cache per ridurre la latenza e il carico di sistema.
Scegliere le risorse appropriate nello stack di tecnologie, che consente di soddisfare gli obiettivi di prestazioni e di integrarsi con il sistema.

Prendere in considerazione le funzionalità che possono soddisfare i requisiti di scalabilità.

Trovare il giusto equilibrio tra allocazione delle risorse e requisiti di sistema, per gestire in modo efficiente i picchi imprevisti.
Analizzando le diverse funzionalità delle risorse, si garantisce che ogni componente contribuisca alla funzionalità complessiva e alle prestazioni del sistema.

È possibile sfruttare le funzionalità predefinite che attivano automaticamente le operazioni di ridimensionamento.

Il ridimensionamento corretto delle risorse può soddisfare le modifiche apportate alla domanda senza sovraprovisioning, che comporta un risparmio sui costi.
Eseguire la pianificazione della capacità in base alla domanda e alla capacità delle risorse selezionate per arricchire il modello di prestazioni.

Usare le tecniche di modellazione predittiva per prevedere le modifiche previste nella capacità che possono verificarsi con modifiche prevedibili e impreviste.

Definire obiettivi di prestazioni che possono essere convertiti in requisiti tecnici.
È possibile usare in modo efficiente le risorse e soddisfare la domanda senza sovraprovisioning, evitando così costi non necessari.

Si capisce come le scelte di progettazione influiscono sulle prestazioni.
Implementare un concetto di prova che convalida i requisiti tecnici e le scelte di progettazione. Una prova del concetto è fondamentale per convalidare la progettazione per determinare se il sistema può soddisfare gli obiettivi di prestazioni e se tali destinazioni sono realistice. In base al carico previsto, è possibile convalidare se la capacità prevista può soddisfare le destinazioni di prestazioni.

Verificare inoltre le implicazioni dei costi delle scelte di progettazione.
Documentare la strategia di test delle prestazioni.

Includere casi d'uso, metodologie diverse e cadenza dei piani di test.

Definire un processo per l'operazione descritta dal piano di test delle prestazioni.

Valutazione e priorità dei test case nel piano. Concentrarsi sui casi che offrono informazioni dettagliate preziose sulle destinazioni di prestazioni e allineare la pianificazione della capacità.
Assicurarsi che gli aspetti corretti del sistema siano testati.

È possibile allocare le risorse in modo efficace e condurre test in modo che si allineano alle priorità e ai requisiti aziendali.
Documentare la strategia di monitoraggio delle prestazioni.

Valutare le metriche a livelli di astrazione diversi per ogni flusso identificato.
È possibile tenere traccia dello stato di avanzamento verso il raggiungimento degli obiettivi di prestazioni durante il ciclo di sviluppo.

Ottenere e sostenere le prestazioni

Icona obiettivo Proteggere dal degrado delle prestazioni mentre il sistema è in uso e man mano che si evolve.

Lo sviluppo non è un impegno one-time. È un processo in corso. Aspettarsi modifiche alle prestazioni quando le funzionalità cambiano. Esistono varianza nei modelli e nei profili utente, anche le modifiche apportate da ottimizzazioni in altri pilastri di Azure Well-Architected. Qualsiasi modifica può filtrare le risorse del carico di lavoro.

Proteggere il sistema dalle modifiche in modo che non venga eseguito il rollback sulle destinazioni di prestazioni. Integrare test e monitoraggio nel processo di sviluppo. Testare le prestazioni del sistema in produzione con carico reale e simulare il carico con test automatizzati prima della produzione. In entrambi i casi è necessario disporre di procedure di monitoraggio per scopi di verifica.

Durante il ciclo di vita dello sviluppo, eseguire vari tipi di test in fasi diverse. Nelle fasi iniziali testare la prova del concetto per assicurarsi che i risultati delle prestazioni non siano completamente imprevisti. Man mano che lo sviluppo procede, condurre test manuali e a basso sforzo per stabilire i benchmark. Nella fase di compilazione iniziare a sviluppare test di prestazioni di routine automatizzati che valutano latenza, livelli di stress, capacità di carico e altre caratteristiche definite nei piani di test.

Il monitoraggio deve essere parte integrante di tale sforzo, anziché essere un esercizio isolato. È possibile vedere come il sistema e le relative risorse eseguono nel tempo. È quindi possibile ottimizzare i valori per ottimizzare il valore e assicurarsi che continuino a soddisfare gli standard di prestazioni.

Tenere presente che le destinazioni di prestazioni variano nel tempo, in risposta alle modifiche. Aggiornare il modello di prestazioni in base alle metriche testate e monitorate. Indica chiaramente un aumento, una riduzione o nessun effetto sulle prestazioni dei flussi.

Essere sempre pronti a rinegoziare e reimpostare le aspettative con gli stakeholder aziendali.

Approccio Vantaggi
Integrare i test delle prestazioni di routine in Azure Pipelines.

Scegliere pipeline che possono integrare i test. Al contrario, scegliere strumenti di test che possono essere integrati nelle pipeline.
I test automatizzati risparmiano tempo e forniscono coerenza che semplifica il rilevamento delle regressioni o dei miglioramenti.

Questi artefatti consentono il monitoraggio continuo di qualsiasi deviazione o deriva nel tempo, in modo da mantenere prestazioni e qualità coerenti.
Formalizzare i test delle prestazioni come cancelli di qualità che possono approvare o negare la promozione del rilascio e la distribuzione finale all'ambiente di produzione. Questi checkpoint garantiscono che ogni fase della distribuzione soddisfi gli standard di prestazioni necessari prima di procedere alla successiva. I checkpoint consentono di evitare la regressione delle prestazioni imprevista.

Ad esempio, se le prestazioni sono significativamente inferiori alle aspettative, è possibile bloccare una versione fino a quando non vengono apportati miglioramenti.
Configurare un processo ripetibile per il monitoraggio delle transazioni reali in produzione e deviazioni rispetto alle destinazioni di prestazioni.

Usare transazioni sintetiche nell'ambiente di produzione.

Configurare gli avvisi di monitoraggio sulle regressioni delle prestazioni.
Si desidera ottenere informazioni dettagliate sulle prestazioni effettive del sistema sotto il carico reale che non è stato possibile simulare tramite test.

È quindi possibile identificare in modo proattivo i problemi e le aree di miglioramento, ad esempio potenziali colli di bottiglia, risorse sottoutilizzate e altre preoccupazioni.
Esaminare i risultati dei test delle prestazioni e il monitoraggio dei dati meticolosamente e ottimizzare finché non si soddisfano le destinazioni di prestazioni.

Assegnare priorità alle azioni derivate da tali revisioni e aggiungerle al backlog per l'esecuzione pianificata.
In base ai risultati dei test, è possibile acquisire e confrontare i dati e avviare l'analisi delle tendenze.

Le attività di ottimizzazione sono guidate dai dati.
Creare competenze di codifica che si concentrano sulle prestazioni.

Avere standard di codifica che esemplificano i modelli di codifica basati sulle prestazioni.
Il codice che non presenta problemi di prestazioni può rendere più efficienti i cicli di test perché i test possono essere incentrati su problemi più significativi.

I modelli di codifica consentono di evitare di rielaborare e mantenere coerente lo stile di codifica.
Risolvere l'erosione delle prestazioni quando l'utilizzo aumenta, le funzionalità cambiano e i dati si accumulano nel tempo per sostenere le prestazioni.

Reimpostare le aspettative e stabilire nuove destinazioni, se l'ottimizzazione consente di ottimizzare solo i vantaggi a breve termine.
È possibile mantenere lo stato delle prestazioni prima che il degrado si verifichi in problemi che influiscono negativamente sull'esperienza utente oltre l'intervallo accettabile.

La modifica delle destinazioni reimposta il modello di prestazioni e non si perde tempo nell'ottimizzazione del sistema che ha già raggiunto la capacità.

Migliorare l'efficienza tramite l'ottimizzazione

Icona obiettivo Migliorare l'efficienza del sistema all'interno delle destinazioni di prestazioni definite per aumentare il valore del carico di lavoro.

Le destinazioni impostate durante la fase iniziale si basano su un livello ragionevole di esperienza utente, considerando vari vincoli. È consigliabile rivalutare e modificare le destinazioni per migliorare ulteriormente l'esperienza. Per migliorare ulteriormente l'esperienza, richiede una chiara comprensione del modo in cui viene usato il sistema, come si è evoluto e come la piattaforma o la tecnologia è cambiata nel tempo. Il ciclo di monitoraggio, ottimizzazione, test e distribuzione è un processo continuo.

Gli sforzi di ottimizzazione dell'efficienza consentono a un carico di lavoro di lavorare con un consumo di risorse inferiore. Possono causare che il carico di lavoro si trova in uno stato sovraprovisionato con capacità di riserva. Usare tale capacità per migliorare l'affidabilità del sistema. Eliminare la capacità di migliorare il costo del sistema. Oppure riproporre la capacità di supportare nuove funzionalità di prodotto sulle risorse esistenti.

Quando il sistema ottiene efficienza, sfruttare l'opportunità di impostare e mantenere nuove destinazioni di prestazioni.

Approccio Vantaggi
Allocare cicli dedicati per l'ottimizzazione delle prestazioni per soddisfare i requisiti e le ottimizzazioni non funzionali nelle aree funzionali. Le destinazioni per questa ottimizzazione sono risorse, codice, conservazione dei dati, query di database e altri. È possibile creare una cultura dell'ottimizzazione basata sulle prestazioni. Si mantiene il team responsabile per monitorare in modo proattivo i modelli di prestazioni e ottimizzare anche l'applicazione.
Migliorare l'architettura con nuovi modelli di progettazione e componenti, che possono migliorare le prestazioni, in modo da non considerare in precedenza a causa di tempi limitati o budget. Nuovi componenti e progettazione possono ottimizzare il sistema, portando a un'esperienza utente migliore. Ad esempio, è possibile usare la memorizzazione nella cache o l'aggiunta di un componente di rete per la distribuzione del contenuto.

Può anche portare a vantaggi di costo a lungo termine.
Usare gli strumenti di monitoraggio per analizzare le tendenze storiche e identificare i percorsi di implementazione dei flussi e del codice che traggono vantaggio dal maggior numero di sforzi di ottimizzazione delle prestazioni. Per questo scopo è consigliabile usare strumenti e profiler per il monitoraggio delle prestazioni dell'applicazione.

Identificare i percorsi di accesso frequente delle operazioni e altri potenziali colli di bottiglia nel sistema.
Quando si identificano le aree problematiche ricorrenti, il team può concentrarsi sul punto in cui i guadagni sono i più alti.
Ottenere le novità attuali e rimanere aggiornate con le innovazioni tecnologiche che possono migliorare le prestazioni.

Sfruttare le nuove versioni rilasciate per i framework e le librerie dipendenti.

Analogamente, usare le nuove funzionalità per le risorse della piattaforma durante l'aggiornamento e l'applicazione di patch.
L'adozione di nuove tecnologie può spesso essere il fattore motivante per cercare opportunità di migliorare.

Il codice che potrebbe essere stato lento in passato può diventare più veloce con questi aggiornamenti. Si vuole anche essere consapevoli del modo in cui determinati aggiornamenti influiscono negativamente sulle prestazioni.

Passaggi successivi