Modello di consolidamento delle risorse di calcolo

Servizio app di Azure
Servizio Azure Kubernetes

Consolidare più attività o operazioni in un'unica unità di calcolo. Ciò può aumentare l'uso delle risorse di calcolo e ridurre il sovraccarico di gestione e i costi associati all'esecuzione di elaborazioni di calcolo in applicazioni ospitate nel cloud.

Contesto e problema

Un'applicazione cloud spesso implementa una serie di operazioni. In alcune soluzioni è opportuno seguire il principio di progettazione della separazione delle problematiche inizialmente e dividere queste operazioni in unità di calcolo separate ospitate e distribuite singolarmente (ad esempio, come app Web separate servizio app o Macchine virtuali separate). Tuttavia, sebbene questa strategia consente di semplificare la progettazione logica della soluzione, la distribuzione di un numero elevato di unità di calcolo come parte della stessa applicazione può aumentare i costi di host di runtime e rendere più complessa la gestione del sistema.

La figura mostra un esempio di struttura semplificata di una soluzione ospitata dal cloud implementata tramite più unità di calcolo. Ogni unità di calcolo viene eseguita nel proprio ambiente virtuale. Ogni funzione è stata implementata come attività separata, denominata attività da A a E, in esecuzione in una specifica unità di calcolo.

Esecuzione di attività in un ambiente cloud tramite un set di unità di calcolo dedicate

Ogni unità di calcolo usa risorse addebitabili, anche quando è inattiva o poco usata. Pertanto, questa non è sempre la soluzione più conveniente.

In Azure questo problema si applica alle servizio app, alle app contenitore e alle Macchine virtuali. Questi elementi vengono eseguiti nel proprio ambiente. L'esecuzione di una raccolta di siti Web, microservizi o macchine virtuali separate progettate per eseguire un set di operazioni ben definite, ma che devono comunicare e cooperare come parte di una singola soluzione può essere un uso inefficiente delle risorse.

Soluzione

Per ridurre i costi, aumentare l'uso, migliorare la velocità di comunicazione e ridurre la gestione è possibile consolidare più attività o operazioni in una singola unità di calcolo.

Le attività possono essere raggruppate secondo criteri basati sulle funzionalità fornite dall'ambiente e ai costi ad esse associati. Un approccio comune consiste nel cercare attività con un profilo simile per quanto riguarda i requisiti di elaborazione, durata e scalabilità. Raggruppando insieme queste funzioni è possibile scalarle come un'unità. L'elasticità fornita da molti ambienti cloud consente di avviare e arrestare istanze aggiuntive di un'unità di calcolo in base al carico di lavoro. Azure offre ad esempio la scalabilità automatica che è possibile applicare alle servizio app e alle set di scalabilità di macchine virtuali. Per altre informazioni, vedere Indicazioni sulla scalabilità automatica.

Come esempio di contatore per illustrare come usare la scalabilità per determinare quali operazioni non devono essere raggruppate, considerare le due attività seguenti:

  • L'attività 1 esegue il poll per messaggi poco frequenti indipendenti dall'orario inviati a una coda.
  • L'attività 2 consente di gestire picchi di volumi elevati di traffico di rete.

La seconda attività richiede l'elasticità che può implicare l'avvio e arresto di un numero elevato di istanze dell'unità di calcolo. Applicare la stessa scalabilità alla prima attività semplicemente darà origine a più attività in attesa di messaggi non frequenti nella stessa coda e rappresenta uno spreco di risorse.

In molti ambienti cloud è possibile specificare le risorse disponibili per un'unità di calcolo in termini di numero di core CPU, memoria, spazio su disco e così via. In genere, più sono le risorse specificate, maggiore è il costo. Per risparmiare, è importante ottimizzare il lavoro eseguito da un'unità di calcolo costosa e non lasciarla inattiva per un lungo periodo.

Se sono presenti attività che richiedono molta potenza della CPU in picchi brevi, provare a consolidare queste attività in un'unica unità di calcolo che fornisca la potenza necessaria. Tuttavia, è importante equilibrare la necessità di mantenere occupate le risorse costose anche in base al conflitto che si potrebbe verificare se vengono sovraccaricate. Attività con esecuzione prolungata ad elevato utilizzo di calcolo, ad esempio, non dovrebbero condividere la stessa unità di calcolo.

Considerazioni e problemi

Prima di implementare questo modello, considerare quanto segue:

Scalabilità ed elasticità. Molte soluzioni cloud implementano la scalabilità e l'elasticità al livello dell'unità di calcolo avviando e arrestando istanze di unità. Evitare di raggruppare attività che hanno requisiti di scalabilità in conflitto nella stessa unità di calcolo.

Durata. L'infrastruttura cloud ricicla periodicamente l'ambiente virtuale che ospita un'unità di calcolo. Quando sono presenti molte attività a esecuzione prolungata all'interno di un'unità di calcolo, potrebbe essere necessario configurare l'unità per impedire che venga riciclata fino al completamento queste attività. In alternativa, è possibile progettare le attività usando un approccio checkpoint che consente loro di arrestarsi normalmente e continuare dal punto di interruzione quando l'unità di calcolo viene riavviata.

Versioni. Se l'implementazione o la configurazione di un'attività viene modificata di frequente, potrebbe essere necessario arrestare l'unità di calcolo che ospita il codice aggiornato, riconfigurare e ridistribuire l'unità e quindi riavviarla. Questo processo richiederà inoltre che tutte le altre attività all'interno della stessa unità di calcolo siano arrestate, ridistribuite e riavviate.

Protezione. Le attività nella stessa unità di calcolo possono condividere lo stesso contesto di protezione ed essere in grado di accedere alle stesse risorse. Deve essere presente un elevato livello di attendibilità tra le attività e la sicurezza che un'attività non danneggia o influisce negativamente su un'altra. Inoltre, aumentando il numero di attività in esecuzione in un'unità di calcolo si aumenta la superficie di attacco dell'unità. Ciascuna attività è protetta nello stesso modo di una particolarmente vulnerabile.

Tolleranza di errore. Se un'attività in un'unità di calcolo non riesce o si comporta in modo anomalo, può influire sulle altre attività in esecuzione nella stessa unità. Se ad esempio un'attività non viene avviata correttamente, può causare un errore di tutta la logica di avvio dell'unità di calcolo e impedire l'esecuzione di altre attività nella stessa unità.

Contesa. Evitare di introdurre contese tra le attività che si contendono le risorse nella stessa unità di calcolo. In teoria, le attività che condividono la stessa unità di calcolo devono presentare caratteristiche di uso diverso delle risorse. Ad esempio, due attività a elevato utilizzo di calcolo probabilmente non dovrebbero trovarsi nella stessa unità di calcolo, così come due attività che usano grandi quantità di memoria. Tuttavia, combinare un'attività a elevato utilizzo di calcolo con un'attività che richiede una grande quantità di memoria è una combinazione utilizzabile.

Nota

Valutare la possibilità di consolidare le risorse di calcolo solo per un sistema in produzione per un periodo di tempo, in modo che gli operatori e gli sviluppatori possano monitorare il sistema e creare una mappa termica che identifichi il modo in cui ogni attività usa risorse diverse. Questa mappa consente di determinare quali attività sono candidati validi per la condivisione delle risorse di calcolo.

Complessità. La combinazione di più attività in una singola unità di calcolo aggiunge complessità al codice dell'unità, rendendolo più difficile da testare, eseguire il debug e gestire.

Architettura logica stabile. Progettare e implementare il codice in ogni attività in modo che non siano necessarie modifiche, anche se viene modificato l'ambiente fisico che in cui viene eseguita l'attività.

Altre strategie. Il consolidamento delle risorse di calcolo è solo un modo per ridurre i costi associati all'esecuzione di più attività contemporaneamente. Richiede un'attenta pianificazione e monitoraggio per verificare che continui a essere un approccio efficace. Altre strategie potrebbero essere più appropriate, a seconda della natura delle attività e a dove si trovano gli utenti che eseguono queste attività. La scomposizione funzionale del carico di lavoro, ad esempio, (come descritto in Compute Partitioning Guidance (Indicazioni per il partizionamento dei servizi di calcolo)) potrebbe essere un'opzione migliore.

Quando usare questo modello

Usare questo modello per attività che non sono convenienti se eseguite nelle rispettive unità di calcolo. Se un'attività è inattiva per molto tempo, l'esecuzione dell'attività in un'unità dedicata può essere costosa.

Questo modello potrebbe non essere adatto per le attività che eseguono operazioni a tolleranza di errore critica o attività che elaborano dati altamente sensibili o riservati e richiedono un proprio contesto di protezione. Queste attività devono essere eseguite nel proprio ambiente isolato, in un'unità di calcolo separata.

Progettazione del carico di lavoro

Un architetto deve valutare il modo in cui il modello di consolidamento delle risorse di calcolo può essere usato nella progettazione del carico di lavoro per soddisfare gli obiettivi e i principi trattati nei pilastri di Azure Well-Architected Framework. Ad esempio:

Concetto fondamentale Come questo modello supporta gli obiettivi di pilastro
L'ottimizzazione dei costi è incentrata sul mantenimento e sul miglioramento del ritorno del carico di lavoro sugli investimenti. Questo modello ottimizza l'utilizzo delle risorse di calcolo evitando capacità di provisioning inutilizzata tramite l'aggregazione di componenti o persino carichi di lavoro interi in un'infrastruttura in pool.

- CONSOLIDAMENTO CO:14
L'eccellenza operativa consente di offrire la qualità del carico di lavoro attraverso processi standardizzati e coesione del team. Il consolidamento può portare a una piattaforma di calcolo più omogenea, che può semplificare la gestione e l'osservabilità, ridurre approcci diversi alle attività operative e ridurre la quantità di strumenti necessari.

- Sistema di monitoraggio OE:07
- Progettazione di Automazione di OE:10
L'efficienza delle prestazioni consente al carico di lavoro di soddisfare in modo efficiente le richieste tramite ottimizzazioni in termini di scalabilità, dati, codice. Il consolidamento ottimizza l'utilizzo delle risorse di calcolo usando la capacità del nodo di riserva e riducendo la necessità di overprovisioning. Le istanze di calcolo di grandi dimensioni (ridimensionate verticalmente) vengono spesso usate nel pool di risorse per queste infrastrutture.

- PE:02 Pianificazione della capacità
- PE:03 Selezione dei servizi

Come per qualsiasi decisione di progettazione, prendere in considerazione eventuali compromessi rispetto agli obiettivi degli altri pilastri che potrebbero essere introdotti con questo modello.

Scelte della piattaforma dell'applicazione

Questo modello può essere ottenuto in modi diversi, a seconda del servizio di calcolo usato. Vedere i servizi di esempio seguenti:

  • app Azure Servizio e Funzioni di Azure: distribuire piani di servizio app condivisi, che rappresentano l'infrastruttura del server di hosting. È possibile configurare una o più app da eseguire nelle stesse risorse di calcolo o nello stesso piano di servizio app.
  • App Azure Container: distribuire app contenitore negli stessi ambienti condivisi, soprattutto in situazioni in cui è necessario gestire i servizi correlati o distribuire applicazioni diverse nella stessa rete virtuale.
  • servizio Azure Kubernetes (servizio Azure Kubernetes): il servizio Azure Kubernetes è un'infrastruttura di hosting basata su contenitori in cui è possibile configurare più applicazioni o componenti dell'applicazione per l'esecuzione condivisa nelle stesse risorse di calcolo (nodi), raggruppate in base ai requisiti di calcolo, ad esempio esigenze di CPU o memoria (pool di nodi).
  • Macchine virtuali: distribuire un singolo set di macchine virtuali per tutti i tenant da usare, in questo modo i costi di gestione vengono condivisi tra i tenant. set di scalabilità di macchine virtuali è una funzionalità che supporta la gestione delle risorse condivise, il bilanciamento del carico e il ridimensionamento orizzontale di Macchine virtuali.

Per l'implementazione di questo modello possono risultare utili i modelli e le informazioni aggiuntive seguenti:

  • Scalabilità automatica. La scalabilità automatica consente di avviare e arrestare le istanze del servizio che ospita le risorse di calcolo, a seconda delle necessità di elaborazione previste.

  • Compute Partitioning Guidance (Indicazioni per il partizionamento dei servizi di calcolo) Descrive come allocare i servizi e i componenti in un servizio cloud in modo da ridurre al minimo i costi operativi mantenendo la scalabilità, le prestazioni, la disponibilità e la sicurezza del servizio.

  • Approcci architetturali per il calcolo in soluzioni multi-tenant. Fornisce indicazioni sulle considerazioni e sui requisiti essenziali per gli architetti di soluzioni, quando pianificano i servizi di calcolo di una soluzione multi-tenant.