Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La scalabilità automatica è il processo di allocazione dinamica delle risorse in base ai requisiti di corrispondenza delle prestazioni. Con l'aumentare della domanda, l'infrastruttura del workload potrebbe dover fornire più risorse per mantenere le prestazioni e soddisfare gli obiettivi del livello di servizio (SLO). Man mano che la domanda diminuisce, la scalabilità automatica può deallocare risorse non necessarie per ridurre i costi.
La scalabilità automatica sfrutta la flessibilità degli ambienti ospitati nel cloud, semplificando nel contempo la gestione. Riduce la necessità che un operatore monitori continuamente le prestazioni di un sistema e prenda decisioni sull'aggiunta o la rimozione di risorse.
È possibile scalare un'applicazione in due modi principali:
Il ridimensionamento verticale, detto anche aumento e riduzione, significa modificare la capacità di una risorsa. Ad esempio, è possibile spostare un'applicazione in una macchina virtuale di dimensioni maggiori. La scalabilità verticale richiede spesso che il sistema non sia temporaneamente disponibile durante la ridistribuzione. Di conseguenza, è meno comune automatizzare la scalabilità verticale.
Il ridimensionamento orizzontale, detto anche scalare orizzontalmente verso l'esterno e l'interno, significa aggiungere o rimuovere istanze di una risorsa. Le istanze esistenti possono continuare a gestire le richieste durante l'avvio delle nuove istanze, ma la continuità dipende dalla progettazione dell'applicazione, dal routing del traffico e dalla rimozione sicura delle istanze. Quando il carico diminuisce, ridimensionare verso il basso solo quando le istanze rimanenti possono gestire il carico e le istanze in dismissione possono terminare o trasferire in sicurezza il proprio lavoro.
Molti sistemi basati sul cloud, tra cui Microsoft Azure, supportano la scalabilità orizzontale automatica. Il resto di questo articolo è incentrato sul ridimensionamento orizzontale.
Annotazioni
Questo articolo è incentrato sul ridimensionamento orizzontale delle risorse di calcolo. Valutare separatamente la capacità degli archivi dati dipendenti e dei servizi di messaggistica. I modelli e i limiti di scalabilità possono differire da quelli dei servizi di calcolo e possono comportare il partizionamento dei dati.
Componenti di scalabilità automatica
Una strategia di scalabilità automatica prevede in genere i componenti seguenti:
I sistemi di strumentazione e monitoraggio acquisiscono metriche chiave a livello di applicazione, servizio e infrastruttura. Queste metriche includono tempi di risposta, lunghezze delle code, utilizzo della CPU e utilizzo della memoria.
La logica decisionale valuta queste metriche di utilizzo in tempo reale rispetto a soglie o pianificazioni predefinite e decide se ridimensionare.
I componenti e i meccanismi eseguono l'azione di ridimensionamento. Idealmente, questi componenti e meccanismi devono essere separati dal codice del carico di lavoro stesso e gestiti come processo esterno. Il codice inattivo oppure sovraccaricato non dovrebbe essere responsabile dell'autoscalamento.
Le funzionalità di test, monitoraggio e ottimizzazione consentono di verificare che la strategia di scalabilità automatica funzioni come previsto.
Azure offre meccanismi di scalabilità automatica predefiniti che consentono di gestire scenari comuni. Se un particolare servizio o tecnologia non dispone di funzionalità di scalabilità automatica predefinite o se si hanno requisiti di scalabilità automatica specifici oltre le relative funzionalità, prendere in considerazione un'implementazione personalizzata. Un'implementazione personalizzata raccoglie le metriche operative e di sistema, analizza le metriche e ridimensiona le risorse di conseguenza.
Funzionalità di scalabilità automatica nei servizi di calcolo Azure
Azure servizi di calcolo offrono meccanismi di scalabilità automatica diversi.
Le macchine virtuali di Azure usano set di scalabilità di macchine virtuali per essere ridimensionate come gruppo. Usare Monitoraggio di Azure Autoscale per regolare il numero di istanze in base a metriche o pianificazioni. Per altre informazioni, vedere Scalabilità automatica con set di scalabilità di macchine virtuali.
App contenitore di Azure offre scalabilità predefinita tramite la scalabilità automatica basata su eventi di Kubernetes (KEDA). Ridimensiona in base al traffico HTTP, alle origini eventi o all'utilizzo della CPU e della memoria. Il ridimensionamento a zero dipende dalle regole configurate e dal numero minimo di repliche. Per altre informazioni, vedere Impostare le regole di ridimensionamento in App contenitore di Azure.
Servizio app di Azure supporta due meccanismi di ridimensionamento distinti. La scalabilità automatica di Monitoraggio di Azure usa metriche o pianificazioni per ridimensionare un piano di App Service, che influisce su tutte le app del piano. Il ridimensionamento automatico di App Service risponde al traffico HTTP e supporta le impostazioni di ridimensionamento per app. Usare un solo metodo di ridimensionamento per un piano di App Service. Per altre informazioni, vedere Configurare la scalabilità automatica di Monitoraggio di Azure e la scalabilità automatica in App Service.
Funzioni di Azure ridimensionamento dipende dal piano di hosting. I piani Flex Consumption e Premium offrono scalabilità guidata dagli eventi. Le App per le funzioni in un piano dedicato usano le funzionalità di scalabilità automatica o manuale del piano di Servizio app. Per altre informazioni, vedere Funzioni di Azure opzioni di hosting.
Servizio Azure Kubernetes (AKS) separa il ridimensionamento del carico di lavoro dal ridimensionamento dei nodi. Usare Horizontal Pod Autoscaler per regolare le repliche dei pod. Usare il provisioning automatico del nodo (NAP) per gestire la capacità del pool di nodi quando i pod non possono essere schedulati o i nodi possono essere rimossi. Per altre informazioni, vedere Provisioning automatico dei nodi in AKS e opzioni di ridimensionamento di AKS.
Prima di creare un controller di scalabilità personalizzato, verificare se il servizio supporta le metriche o le regole guidate dagli eventi necessarie. Ad esempio, la scalabilità automatica di Monitoraggio di Azure può usare le metriche dell'applicazione supportate pubblicate in Application Insights. Se i meccanismi predefiniti non sono in grado di soddisfare i requisiti, un controller personalizzato può valutare le metriche dell'applicazione e usare le API di gestione del servizio di destinazione per regolare la capacità. Tenere conto dello sforzo necessario per implementare, operare e mantenere tale controller. Concedi al controller solo le autorizzazioni necessarie per le operazioni di ridimensionamento, limitate alle risorse che gestisce.
Usare le funzionalità di scalabilità automatica predefinite quando soddisfano i tuoi requisiti. I requisiti che potrebbero giustificare un controller personalizzato includono un controllo più preciso sulle decisioni di ridimensionamento, eventi trigger diversi, scalabilità tra sottoscrizioni o ridimensionamento di altri tipi di risorse.
Utilizzare la funzionalità di autoscaling di Monitoraggio di Azure
La funzionalità di scalabilità automatica di Monitoraggio di Azure supporta risorse come set di scalabilità di macchine virtuali e piani di servizio app. Ridimensionare in base a una pianificazione o in base a una metrica supportata dalla risorsa, ad esempio l'utilizzo della CPU.
Si considerino gli esempi seguenti:
Ridimensionare fino a 10 istanze nei giorni feriali e ridimensionare a quattro istanze il sabato e la domenica.
Aumentare il numero di istanze di un'istanza se l'utilizzo medio della CPU è superiore a 70%e aumentare di un'istanza se l'utilizzo della CPU scende al di sotto di 50%.
Scalare di un'istanza se il numero di messaggi in una coda supera una certa soglia.
Aumentare il numero di istanze quando il carico aumenta per mantenere la capacità e ridurre il numero di istanze quando la domanda diminuisce per ridurre i costi. Configurare le regole di scalabilità orizzontale e di scalabilità verticale. In caso contrario, la scalabilità automatica agisce in una sola direzione fino a raggiungere il numero massimo o minimo di istanze del profilo.
Selezionare un numero di istanze predefinito sicuro per il carico di lavoro. Se Monitoraggio di Azure non è in grado di leggere le metriche delle risorse e il numero di istanze corrente è inferiore al valore predefinito, la scalabilità automatica aumenta il numero di istanze fino al valore predefinito. Non viene ingrandito se il conteggio corrente è superiore. Configurare separatamente il numero minimo e massimo di istanze per definire l'intervallo di scalabilità consentito.
Per un elenco delle metriche predefinite, vedere Metriche comuni per il ridimensionamento automatico di Monitoraggio di Azure. È anche possibile usare metriche personalizzate pubblicate tramite Application Insights. Per le metriche personalizzate di Application Insights, la scalabilità automatica di Monitoraggio di Azure supporta solo le metriche negli spazi dei nomi Standard e Azure.ApplicationInsights.
Configurare la scalabilità automatica di Monitoraggio di Azure usando PowerShell, il interfaccia della riga di comando di Azure, un modello di Azure Resource Manager o il portale di Azure. Per la gestione a livello di codice delle impostazioni di scalabilità automatica, usare l'API REST di scalabilità automatica Monitoraggio di Azure.
Mantenere le regole di ridimensionamento, le pianificazioni e i limiti di capacità nel controllo della versione insieme alla configurazione dell'infrastruttura. Esaminare e testare le modifiche prima di distribuirle. Se si modificano le impostazioni nel portale, aggiornare la configurazione soggetta a controllo di versione in modo che le distribuzioni successive non sovrascrivano tali modifiche.
Quando si usa la scalabilità automatica, tenere presente quanto segue:
Usare la scalabilità automatica pianificata per le variazioni prevedibili della domanda e la scalabilità automatica basata su metriche per modifiche imprevedibili. È possibile combinare questi approcci.
Ad esempio, pianificare l'avvio delle istanze prima di un periodo occupato, consentendo il tempo per il provisioning e l'avvio dell'applicazione. Includi le regole basate sulle metriche nel profilo pianificato per gestire la domanda imprevista durante tale periodo.
Per i carichi di lavoro di set di scalabilità di macchine virtuali con modelli di utilizzo ciclico della CPU, valutare la scalabilità automatica predittiva. Iniziare in modalità di sola previsione e confrontare l'utilizzo stimato con l'utilizzo effettivo. Se le stime sono abbastanza accurate per il carico di lavoro, abilitare la scalabilità automatica predittiva per aumentare il numero di istanze fino a un'ora prima dell'aumento della domanda stimato. Integrare questo approccio con regole basate su metriche per la domanda imprevista e il ridimensionamento.
Spesso è difficile comprendere la relazione tra metriche e requisiti di capacità, soprattutto quando un'applicazione viene inizialmente distribuita. Configurare un piccolo margine di capacità aggiuntiva all'inizio e quindi monitorare e ottimizzare le regole di scalabilità automatica per avvicinare la capacità al carico effettivo.
Monitorare le prestazioni dell'applicazione dopo aver configurato le regole di scalabilità automatica e usare i risultati per ottimizzarle. Tenere conto del tempo necessario per rilevare le variazioni della domanda e completare le azioni di ridimensionamento.
Configurare la finestra di lookback della metrica e l'aggregazione per distinguere le variazioni sostenute della domanda dai picchi temporanei. Configurare un cooldown per ogni regola di ridimensionamento per consentire la stabilizzazione delle metriche dopo un'azione di ridimensionamento. Monitoraggio di Azure valuta il cooldown di ogni regola in modo indipendente, in base al tempo trascorso dall'azione di ridimensionamento più recente.
Queste impostazioni servono a scopi diversi:
- La finestra lookback determina quali campioni delle metriche vengono valutati.
- Il cooldown determina quando una regola può avviare un'altra azione di ridimensionamento.
Misura il tempo di provisioning e di avvio dell'applicazione e verifica il ritardo combinato prima di scegliere soglie e intervalli.
Evitare il flapping, dove le azioni di scalabilità orizzontale e verticale continuano ad alternarsi. Si supponga che siano presenti due istanze. Il limite massimo è 80% CPU e il limite inferiore è 60%. Quando il carico è a 85%, viene aggiunta un'altra istanza. Dopo qualche tempo, il carico diminuisce a 60%. Prima che il servizio di scalabilità automatica venga ridimensionato, calcola la distribuzione del carico totale (di tre istanze) quando un'istanza viene rimossa, portandola a 90%. Sarebbe necessario scalare nuovamente immediatamente. Pertanto, evita il ridimensionamento e potrebbe non visualizzare mai il risultato di ridimensionamento previsto.
Scegliere un margine adeguato tra le soglie scale-out e scale-in per evitare il flapping.
La scalabilità automatica ripristina i conteggi delle istanze impostati manualmente che non rientrano nell'intervallo configurato. Ad esempio, se l'intervallo è da tre a sei istanze, la scalabilità automatica aumenta un conteggio da uno a tre e riduce un conteggio da otto a sei all'esecuzione successiva. Aggiornare le impostazioni di scalabilità automatica se è necessario modificare l'intervallo consentito.
Il motore di scalabilità automatica seleziona un profilo per l'ora corrente, controlla i profili a data fissa, i profili ricorrenti e il profilo predefinito in tale ordine. Valuta quindi le regole del profilo selezionato. Mantenere le regole di scalabilità di base nel profilo predefinito per i periodi che i profili pianificati non coprono. All'interno di un profilo, la scalabilità automatica aumenta se viene soddisfatta una regola di scalabilità orizzontale e si riduce solo se vengono soddisfatte tutte le regole di riduzione.
Per altre informazioni sulla scalabilità di Monitoraggio di Azure, vedere Informazioni sulle impostazioni di scalabilità automatica e sulle procedure consigliate per la scalabilità automatica.
Usare metriche personalizzate quando le metriche predefinite non riflettono la domanda che determina le decisioni di scalabilità. Ad esempio, misurare le richieste al secondo o specifici processi aziendali e usare queste metriche da sole o insieme alle metriche predefinite.
Quando si attivano più regole, la scalabilità automatica risolve i conflitti come segue:
Le operazioni di scalabilità orizzontale hanno sempre la precedenza sulle operazioni di riduzione di scala.
Quando le operazioni di ridimensionamento orizzontale sono in conflitto, la regola che comporta l'aumento maggiore del numero di istanze ha la precedenza.
Quando le operazioni di ridimensionamento sono in conflitto, la regola che avvia la riduzione minima del numero di istanze ha la precedenza.
Considerazioni sulla progettazione delle applicazioni
La scalabilità automatica non è una soluzione immediata. L'aggiunta di risorse a un sistema o l'esecuzione di più istanze di un processo non garantisce prestazioni migliorate. Quando si progetta una strategia di scalabilità automatica, tenere presente quanto segue:
Progettare l'applicazione per scalare orizzontalmente. Evitare dipendenze da un'istanza specifica e non presupporre che le richieste provenienti dalla stessa origine raggiungano sempre la stessa istanza. Progettare i servizi senza stato, se possibile. Per l'elaborazione basata su coda, non presupporre quale istanza gestisce un messaggio: la scalabilità automatica può aggiungere consumer man mano che aumenta la domanda. Vedi il pattern Competing Consumers.
Impostare la capacità minima per soddisfare i requisiti di domanda e affidabilità di base. Mantenere una capacità di riserva sufficiente per gestire la domanda mentre si avviano nuove istanze. Se la latenza di avvio viola gli obiettivi di tempo di risposta, mantenere le istanze attive anziché basarsi sul ridimensionamento da zero. Per altre informazioni, vedere Progettare una strategia di scalabilità affidabile.
Tenere conto del ciclo di vita dell'istanza. Inizializzare nuove istanze prima di instradare il traffico a tali istanze. Durante il ridimensionamento, interrompere l'assegnazione di un nuovo lavoro alle istanze in partenza e svuotare le connessioni o creare un checkpoint del lavoro in corso.
Identificare il collo di bottiglia prima di aggiungere capacità di calcolo. Un database, un broker di messaggi o un'API downstream potrebbero limitare la velocità effettiva anche quando sono disponibili più istanze di calcolo. Definire quali componenti devono scalare insieme e controllare i limiti di capacità. Per altre informazioni, vedere Pianificazione della capacità.
Testare il ridimensionamento in un ambiente simile all'ambiente di produzione prima di basarsi su di esso. Includi aumenti graduali del carico, picchi improvvisi, domanda sostenuta e ridimensionamento verso l'interno. Misura il tempo di risposta, la velocità effettiva, gli errori, il backlog della coda e il ritardo fino a quando la nuova capacità non può soddisfare le richieste. Controllare se istanze aggiuntive sovraccaricano le dipendenze. Per altre informazioni, vedere Scalabilità dei test.
Progettare attività a esecuzione prolungata per supportare la scalabilità orizzontale e la riduzione della capacità. Un'attività può impedire che un'istanza venga arrestata in modo pulito o far perdere i progressi se l'istanza viene terminata forzatamente. Laddove possibile, suddividere l'attività in unità di lavoro più piccole e discrete. Per un esempio, vedere il modello Pipe e Filtri.
Se non è possibile dividere un'attività a esecuzione prolungata, rendere persistenti i checkpoint nell'archiviazione durevole a cui un'altra istanza può accedere. Registrare lo stato di avanzamento sufficiente per riprendere dall'ultimo checkpoint completato e tenere conto del lavoro che potrebbe essere rieseguito dopo un'interruzione. Rendere l'elaborazione idempotente in modo che i tentativi o il recapito duplicato dei messaggi non ripetano effetti collaterali. Interruzione e ripristino dei test.
Quando i worker in background vengono eseguiti in istanze di calcolo separate, usare i criteri di ridimensionamento che riflettono la domanda di ogni componente. Ad esempio, potrebbero essere necessarie più istanze dell'interfaccia utente senza aumentare il numero di worker in background o il contrario. Se si offrono livelli di servizio diversi, ad esempio basic e Premium, allineare i criteri di ridimensionamento di ogni componente con gli obiettivi di prestazioni e disponibilità corrispondenti.
Altri criteri di ridimensionamento
Per l'elaborazione basata su coda, monitorare la profondità della coda e la frequenza di arrivo e completamento dei messaggi. Selezionare i segnali di ridimensionamento correlati agli obiettivi del tempo di elaborazione. Se i messaggi arrivano più velocemente di quanto i consumer li completino, il backlog aumenta e aumenta la latenza.
- Un breve burst potrebbe non richiedere più consumer se la capacità esistente può svuotare il backlog entro l'obiettivo di tempo di elaborazione.
- Una crescita sostenuta del backlog può richiedere un maggior numero di consumer, ma occorre limitare la velocità di elaborazione combinata per evitare l'overload dei servizi downstream. Se questi servizi non possono accettare più lavoro, applicare backpressure sulla richiesta in ingresso anziché spostare il collo di bottiglia.
Per altre informazioni, vedere il modello di livellamento del caricoQueue-Based.
Correlare le metriche aziendali ai requisiti di capacità di calcolo prima di usarle per guidare la scalabilità. Gli esempi includono gli ordini effettuati per ora o la durata media di una transazione. Una modifica in una metrica aziendale potrebbe richiedere il ridimensionamento di diversi componenti.
Impostare un numero massimo di istanze per limitare l'uso delle risorse. Controllare i limiti del servizio, le quote di sottoscrizione e la capacità downstream prima di scegliere quel valore massimo. Un valore massimo configurato non garantisce che l'applicazione o le relative dipendenze possano supportare il carico corrispondente. Se la domanda supera la capacità che è possibile fornire in modo sicuro, limitare il lavoro in ingresso o ridurre in modo controllato le funzionalità non essenziali.
Valutare i costi di ridimensionamento rispetto al lavoro utile e agli obiettivi di servizio. Confrontare il costo per richiesta o per operazione completata quando si ottimizzano le dimensioni, i conteggi e le soglie di ridimensionamento delle istanze. Per altre informazioni, vedere Ottimizzare i costi di ridimensionamento.
Un picco di domanda potrebbe passare prima che le nuove istanze siano pronte. Usare il throttling per controllare la domanda mentre la capacità è limitata. Per altre informazioni, vedere il modello di limitazione.
Se gli obiettivi di tempo di risposta non consentono alle richieste di attendere lo scaling, effettuare il provisioning della capacità in anticipo rispetto alla domanda prevedibile. Per una domanda imprevedibile, mantenere un margine di capacità.
Registrare le decisioni di ridimensionamento, i trigger, le modifiche di capacità richieste, i tempi di completamento e gli errori. Correla questi eventi con le prestazioni dell'applicazione per verificare se il ridimensionamento raggiunge il risultato previsto.
Avvisa gli operatori quando il ridimensionamento ha esito negativo, le metriche richieste non sono disponibili o l'applicazione raggiunge il valore massimo configurato. Per altre informazioni, vedere Procedure consigliate per la scalabilità automatica.
Passaggio successivo
Verifica la strategia di scalabilità automatica con carico realistico. Iniziare con un test di carico che misura se il carico di lavoro soddisfa gli obiettivi di prestazioni quando cambia la domanda.
" output is necessary.)
I modelli e le indicazioni seguenti potrebbero essere rilevanti anche per lo scenario durante l'implementazione della scalabilità automatica:
Il modello di limitazione descrive come un'applicazione può continuare a funzionare e soddisfare i contratti di servizio quando un aumento della domanda comporta un carico estremo sulle risorse. La limitazione può essere utilizzata con l'autoscaling per evitare che un sistema venga sovraccaricato durante l'espansione del sistema.
Il modello dei consumatori concorrenti descrive come implementare un pool di istanze di servizio capaci di gestire messaggi provenienti da qualsiasi istanza applicativa. La scalabilità automatica può avviare e arrestare le istanze del servizio per soddisfare la domanda. Questo approccio supporta l'elaborazione simultanea dei messaggi per migliorare la velocità effettiva, la scalabilità e la disponibilità.
Il monitoraggio e la diagnostica, inclusa la strumentazione e le metriche, sono fondamentali per raccogliere le informazioni che possono guidare il processo di scalabilità automatica.