Progettare per soddisfare i requisiti di capacità
Erogare una fornitura sufficiente per soddisfare la domanda prevista. |
---|
È importante misurare in modo proattivo le prestazioni. La misurazione delle prestazioni comporta la misurazione delle linee di base e la comprensione preliminare di quali componenti del sistema potrebbero comportare delle sfide. È possibile svolgerla senza eseguire un test completo delle prestazioni o tramite un'ottimizzazione granulare. Eseguendo questi passaggi iniziali, si stabilisce una base per una gestione efficace delle prestazioni all'inizio del ciclo di vita dello sviluppo.
Esaminare il sistema nel suo complesso, invece di concentrarsi sui singoli componenti. Evitare l'ottimizzazione in questa fase. Un miglioramento granulare delle prestazioni comporta compromessi in altre aree. Man mano che si procede nel ciclo di vita e si iniziano i test di accettazione dell'utente o si passa alla produzione, è possibile identificare rapidamente quali aree richiedono un'ulteriore ottimizzazione.
Scenario di esempio
Contoso Manufacturing ha sviluppato un'app di microservizi basata su Java Spring usata a livello interno per monitorare e ottimizzare i processi di produzione. Il team del carico di lavoro sta eseguendo la migrazione dell'app, attualmente ospitata in locale, ad Azure.
L'app ospitata in Azure si baserà su Azure Spring Apps, Database di Azure per MySQL e Hub IoT di Azure. Contoso ha una connessione ExpressRoute ad Azure.
Progettare il carico di lavoro in modo efficace
Scegliere le risorse appropriate nello stack di tecnologie, che consente di soddisfare gli obiettivi di prestazioni e di eseguire l'integrazione con il sistema. Prendere in considerazione le funzionalità che possono soddisfare i requisiti di scalabilità e trovare il giusto equilibrio tra allocazione delle risorse e requisiti di sistema, per gestire in modo efficiente picchi imprevisti.
Analizzando le diverse funzionalità delle risorse, si garantisce che ogni componente contribuisca alla funzionalità e alle prestazioni complessive del sistema e si possa identificare le funzionalità di ridimensionamento di cui è possibile avvalersi.
Le risorse di ridimensionamento corrette possono soddisfare le variazioni della domanda senza effettuare provisioning eccessivo, con un risparmio sui costi.
Sfida di Contoso
- L'infrastruttura dell'ambiente dell'app locale esistente è completamente gestita da Contoso, con un conseguente notevole carico di lavoro per il team. Attualmente effettuano il provisioning e la gestione di server, reti e archiviazione, oltre a configurare e aggiornare il runtime del servizio Java Spring e tutte le dipendenze.
- Il team è in attesa di eseguire la migrazione a un modello PaaS con Azure Spring Apps, che consentirà al team di concentrarsi maggiormente sull'assicurarsi che l'applicazione fornisca il valore aziendale previsto e dedicare meno tempo alla gestione dell'infrastruttura.
- Questa applicazione è fondamentale per il business di Contoso ed è soggetta a requisiti di prestazioni rigorosi, per cui è necessario assicurarsi che le scelte tecnologiche effettuate nell'ambito della migrazione consentano di soddisfare tali requisiti.
Applicazione dell'approccio e risultati
- Dopo aver confrontato i diversi piani disponibili, il team sceglie il piano Standard di Azure Spring Apps, che fornisce un servizio completamente gestito per le app Spring Boot, ottimizzato per il traffico di produzione. Con un massimo di 500 istanze per app, il piano Standard è in grado di fornire capacità di calcolo sufficienti per l'utilizzo previsto massimo.
- Inoltre, è possibile configurare il servizio per aumentare il numero di istanze in base alle esigenze e ridimensiona le risorse di calcolo quando non occorre capacità aggiuntiva.
- Il team ha preso in esame il piano Enterprise, che è in grado di aumentare fino a 1000 istanze per app, ma ha deciso di non avere al momento bisogno di tale quantità di capacità. È inoltre certo di non avere bisogno del livello di supporto offerto dal piano Enterprise o del resto delle sue funzionalità esclusive.
Prevedere correttamente le esigenze di capacità
Eseguire la pianificazione della capacità in base alla domanda e alla capacità delle risorse selezionate per arricchire il modello di prestazioni. Usare tecniche di modellazione predittiva per prevedere le modifiche previste nella capacità che possono avere luogo in caso di variazioni prevedibili e non. Definire obiettivi di prestazioni che è possibile convertire in requisiti tecnici.
Adottando questo approccio, è possibile usare in modo efficiente le risorse e soddisfare la domanda senza effettuare un provisioning eccessivo, evitando così costi non necessari. Consente inoltre di comprendere in che modo le scelte di progettazione influiscono sulle prestazioni.
Sfida di Contoso
- Per ottimizzare l'uso efficiente dei macchinari di produzione, la linea di produzione di Contoso opera sulla base di una pianificazione ciclica, fabbricando prodotti diversi in momenti differenti della giornata.
- Ogni prodotto richiede operazioni diverse e quindi esigenze di calcolo differenti dall'applicazione di controllo. Durante la modifica tra i prodotti, l'applicazione di controllo deve eseguire un'ampia gamma di attività che richiedono una maggiore capacità di calcolo, ad esempio l'analisi dei dati relativi all'esecuzione della produzione precedente e l'aggiornamento degli algoritmi di controllo per i computer.
Applicazione dell'approccio e risultati
- Per soddisfare la domanda più elevata durante i periodi di transizione, il team identifica innanzitutto i flussi che gestiscono la funzionalità di transizione, documentando i requisiti di prestazioni e stimando i volumi delle transazioni in base alla versione locale dell'applicazione. Con questi dati, il team procede alla stima della capacità di calcolo necessaria dai microservizi che fanno parte dei flussi di destinazione.
- La scalabilità automatica è configurata per questi componenti, garantendo che risorse aggiuntive siano sottoposte a provisioning prima del periodo di transizione e rilasciate al termine delle attività.
- Le impostazioni di scalabilità automatica verranno regolate prima di distribuire l'app nell'ambiente di produzione, in base alle prestazioni effettive nel nuovo ambiente.
Distribuzione del modello di verifica
Implementare un modello di verifica (POC) che convalida i requisiti tecnici e le scelte di progettazione.
Un modello di verifica è fondamentale per convalidare la progettazione e determinare se il sistema sia in grado di soddisfare gli obiettivi di prestazioni e se tali obiettivi siano realistici. In base al carico previsto, è possibile verificare se la capacità prevista sia in grado di soddisfare gli obiettivi di prestazioni.
Verificare anche le implicazioni in termini di costi delle scelte di progettazione.
Sfida di Contoso
- Durante lo sviluppo, il team esegue test estesi sul carico e sulle prestazioni delle funzionalità dell'applicazione avvalendosi di simulatori di dispositivi e utilizza queste informazioni per ottimizzare la configurazione della scalabilità automatica.
- Un aspetto che può influire sull'efficacia della configurazione della scalabilità automatica è la potenziale latenza di rete delle comunicazioni dall'ambiente Azure Spring Apps ai dispositivi IoT nel piano di produzione, che è connesso ad Azure tramite ExpressRoute. Il team ipotizza che la latenza sarà superiore in Azure rispetto a quanto lo sia per la versione locale dell'app e tale latenza potrebbe anche essere influenzata da altri fattori, ad esempio l'ora del giorno o la posizione del dispositivo.
- È probabile che un aumento della latenza abbia un impatto sul volume delle transazioni che ogni istanza di microservizio sarebbe in grado di elaborare.
Applicazione dell'approccio e risultati
- Il team decide di distribuire un modello di verifica in Azure per convalidare le proprie ipotesi e raccogliere le metriche che è possibile usare per ottimizzare la configurazione. Crea un'Azure Spring App di test per comunicare con i dispositivi IoT distribuiti nel piano di produzione. I dispositivi IoT sono connessi alla rete locale e vengono registrati con l'Hub IoT di Azure. L'applicazione di test si connette in modo casuale ai dispositivi durante tutto il giorno inviando un semplice ping e registra il tempo necessario per ricevere una risposta.
- I dati acquisiti durante questo modello di verifica, combinati con i risultati dei test di carico, consentiranno al team di stimare in modo più accurato la capacità di calcolo necessaria durante la preparazione per il lancio iniziale della produzione.
- Il team sta anche valutando modi per migliorare ulteriormente i test case usati per i test di carico per simulare tempi di risposta più realistici in base alle informazioni apprese dal modello di verifica.