Scalabilità
La scalabilità è la capacità del tuo carico di lavoro di soddisfare le richieste aziendali quasi in tempo reale senza interrompere la qualità del servizio. La capacità aggiuntiva è stata tradizionalmente assegnata in anticipo per consentire picchi prevedibili nel traffico, mentre vengono monitorati picchi imprevisti nel traffico e vengono pubblicati avvisi per aumentare la capacità, in un approccio reattivo.
L'upscaling e il downscaling richiedono un intervento manuale e sono soggetti a calcoli variabili per la quantità di modifica della capacità e la durata da gestire. Diventa più noioso gestire i requisiti quando i picchi sono frequenti e imprevedibili.
Questi tipi di scenari sono stati in genere gestiti con una capacità di upscale permanente per il carico di lavoro, il che aiuta a soddisfare il carico, ma comporta costi più elevati per l'esecuzione di carichi di lavoro a lungo termine. A differenza delle soluzioni on-premise in cui la capacità hardware viene acquisita indipendentemente dall'uso, la gestione di questo tipo di capacità nel cloud non richiede investimenti permanenti nell'infrastruttura e non è necessario alcun aggiornamento dell'hardware per rimanere aggiornati.
Il carico di lavoro può aumentare la capacità della domanda nella CPU, nella memoria, nello storage e nell'input/output (I/O), dove la CPU e la memoria sono parametri primari che fluttuano drasticamente. La capacità può essere ridimensionata e ridimensionata in due modi:
- Ridimensionamento orizzontale: viene aggiunta la capacità parallela per consentire un carico aggiuntivo.
- Scalabilità verticale: aumenta e diminuisce la CPU e la memoria, senza modificare il conteggio dell'infrastruttura.
La scalabilità orizzontale è facile da ottenere mettendo i load balancer davanti all'infrastruttura backend. Il caricamento viene distribuito senza influire sulle transazioni esistenti e in corso. La scalabilità verticale richiede lo scale-up o lo scale-down dell'infrastruttura. Il provisioning della capacità desiderata viene eseguito in parallelo e il carico di lavoro viene trasferito alla nuova capacità. Il carico di lavoro trasferito alla nuova capacità può causare un impatto minimo o nullo sulle transazioni esistenti se il sistema applicativo è progettato per gestire questi tipi di scenari.
Quando si ridimensiona un'applicazione, è importante considerare non solo il carico di lavoro dell'applicazione stessa, ma anche il meccanismo di comunicazione che la collega ad altre applicazioni. Un meccanismo di comunicazione è una componente essenziale di qualsiasi applicazione distribuita, che consente a diverse parti del sistema di scambiare informazioni e lavorare insieme per raggiungere obiettivi comuni. Con l'aumentare del carico di lavoro di un'applicazione, aumenta anche la domanda sul suo meccanismo di comunicazione. Se il meccanismo di comunicazione non è progettato per la scalabilità, può diventare un collo di bottiglia, limitando le prestazioni complessive dell'applicazione. Ciò può causare una user experience peggiorata, una maggiore latenza e persino errori di sistema.
La progettazione di un'applicazione di architettura per la scalabilità elastica richiede un'attenta considerazione di tutti gli aspetti dei limiti di calcolo, memoria, storage, rete, throughput e limitazione. Le informazioni riportate di seguito descrivono scenari comuni per la progettazione di un sistema scalabile ad alte prestazioni. Determina il tuo approccio in base alle tue esigenze organizzative, ai valori aziendali e alle priorità per l'esecuzione e la distribuzione del tuo carico di lavoro in OCI.
Scala su richiesta
La scalabilità su richiesta è una funzione del cloud computing che ti consente di regolare automaticamente le risorse allocate alla tua applicazione o servizio in base alla domanda corrente. Puoi aumentare o ridurre il numero di server, storage e altre risorse che utilizzi in tempo reale, in base al carico di lavoro. Ad esempio, OCI Compute regola il numero di istanze di computazione in un pool di istanze in base alle metriche e alla pianificazione per soddisfare la capacità desiderata in base alla configurazione.
Scale-in e scale-out
Lo scale-in si riferisce alla riduzione del numero di risorse allocate a un'applicazione o a un servizio, mentre lo scale-out si riferisce all'aumento del numero di risorse. È possibile utilizzare entrambi i tipi di ridimensionamento per gestire i picchi di carico. Ad esempio, le istanze espandibili OCI sono progettate per scenari in cui un'istanza è in genere inattiva o ha un utilizzo ridotto della CPU con picchi occasionali. Al termine di una suddivisione, viene eseguito lo scale-in dell'istanza alla capacità baseline.
Limiti e quote del servizio
Progetta il tuo carico di lavoro in modo che sia bilanciato tra diversi moduli di un'applicazione per ridimensionarsi rispettivamente. Inoltre, considera i limiti del servizio sulla tenancy e le quote del compartimento. Ad esempio, puoi creare 50 load balancer e 5000 MBps per un modello di sottoscrizione agli Oracle Universal Credit (a partire da oggi, il che potrebbe cambiare in futuro). Alcuni limiti del servizio sono dinamici e possono essere aumentati nel tempo in base all'uso. Fai riferimento al tuo modello di prezzi OCI per conoscere limiti e quote diversi.
High Availability
Elimina i singoli punti di errore e progetta il tuo carico di lavoro per garantire il massimo potenziale di uptime e accessibilità. OCI fornisce funzionalità di alta disponibilità come domini di errore e domini di disponibilità per garantire la ridondanza nel carico di lavoro.
Ad esempio, la distribuzione dell'infrastruttura applicativa a più domini di errore garantisce un livello di anti-affinità in modo che il carico di lavoro non si trovi sullo stesso hardware fisico all'interno del data center. Un dominio di disponibilità aggiunge un ulteriore livello di affidabilità in quanto diversi data center nella stessa area sono isolati l'uno dall'altro, sono tolleranti agli errori ed è improbabile che si guastino contemporaneamente. I data center all'interno di un'area sono connessi tra loro con bassa latenza e larghezza di banda elevata che riduce i problemi di latenza.
Disaster recovery
In caso di guasto catastrofico da disastri naturali o causati dall'uomo, è essenziale disporre di un piano di emergenza nel carico di lavoro per replicarlo in un'altra regione. Un processo di ripristino è l'unica opzione in questo tipo di scenario e il livello di ripristino deve essere progettato in base alla criticità dell'applicazione, all'obiettivo del tempo di ripristino associato (RTO) e all'obiettivo del punto di ripristino (RPO). OCI fornisce diversi metodi per l'approccio DR (disaster recovery) in base alla durabilità dei dati, all'RTO e all'RPO.
Ad esempio, puoi ricreare il tuo sistema in un'altra area da un'infrastruttura di backup e provisioning del database con infrastructure as a service (IaaS) e DevOps per un'implementazione DR a basso costo, ma una maggiore perdita e indisponibilità dei dati. Un sistema attivo/attivo con replica in tempo reale e condivisione del carico ha costi più elevati, ma quasi nessuna perdita di dati e tempi di inattività.
Capacity Planning
Determina le risorse necessarie per supportare le esigenze attuali e future del tuo carico di lavoro in base ai requisiti di performance e alle proiezioni di crescita per allocare la giusta quantità di risorse e il ridimensionamento automatico. È possibile utilizzare le metriche monitorate cronologiche per le proiezioni.
Ad esempio, devi eseguire in anticipo il provisioning di forma e dimensioni per lo storage del database in base alla capacità lineare anziché su richiesta. Sfruttare l'uso statistico storico può aiutarti a definire la capacità per evitare il ridimensionamento ad hoc.
Controllo prestazioni
Misura, monitora e analizza le prestazioni delle statistiche delle risorse e delle applicazioni cloud per la tua applicazione per garantire che soddisfino i requisiti di performance e offrano prestazioni ottimali agli utenti. Il monitoraggio delle prestazioni è importante perché l'applicazione sia in grado di identificare i problemi relativi alle prestazioni e di intraprendere azioni correttive prima di influire sugli utenti. OCI Application Performance Monitoring offre un set completo di funzioni per monitorare le applicazioni e diagnosticare i problemi di prestazioni.
Ad esempio, Application Performance Monitoring offre una visibilità approfondita sulle prestazioni e consente di diagnosticare rapidamente i problemi, mentre ti concentri sull'offerta dei processi aziendali di base. OCI si occupa del monitoraggio di più componenti e della logica delle applicazioni distribuite tra client, servizi di terze parti e livelli di elaborazione backend, on premise o nel cloud.
Principi prestazioni
Le applicazioni devono essere progettate per scalare su diversi moduli e componenti. Per raggiungere questo obiettivo, è essenziale che la tua applicazione sia progettata per sfruttare le best practice OCI per lo scale-up con tempi di inattività quasi nulli.
Ad esempio, se la tua applicazione è già suddivisa in microservizi sottili, può essere facilmente distribuita e ridimensionata per scenari ad alte prestazioni su Oracle Kubernetes Engine (OKE) o OCI Container Instances. In alternativa, è necessario prendere in considerazione anche gli approcci all'implementazione, quali i load balancer, Scatter-Gather (pooling e scollegamento), la cache dei risultati, lo spazio condiviso (arricchimento delle informazioni), la pipe e il filtro, MapReduce (batch join per il collo di bottiglia di I/O), il parallelo sincrono di massa, l'orchestratore di esecuzione e così via. Esistono modelli di progettazione ben noti come Caching, Command Query Responsibility Segregation (CQRS), Anti-Corruption, Circuit Breaker, Event Sourcing, Publisher Subscriber, Sharding, Strangler, Saga, Throttling e così via, per rendere l'applicazione performante in modo nativo.
Costo rispetto a capacità
La capacità nel cloud può essere aumentata o ridotta aggiungendo o rimuovendo l'infrastruttura. È importante utilizzare la capacità di cui è già stato eseguito il provisioning in modo efficiente per ridurre i costi operativi totali. Esistono alcuni scenari in cui le applicazioni business-critical prevedono eccezioni per il provisioning anticipato della capacità per evitare violazioni degli SLA, il che è giustificato. Prendi decisioni in base alle esigenze e alle priorità aziendali prima di decidere sulla capacità in quanto le esigenze di performance sono proporzionali all'aumento dei costi.
efficienza
Un aspetto della progettazione delle applicazioni cloud per la scalabilità consiste nel gestire l'aumento del carico o del traffico in modo conveniente. Le applicazioni devono essere progettate e implementate per massimizzare l'efficienza per l'uso delle risorse e i costi. È necessario monitorare l'uso delle risorse e automatizzare il più possibile per la scalabilità automatica, considerando al contempo l'ottimizzazione dei costi e il miglioramento delle prestazioni. OCI fornisce funzionalità di ridimensionamento automatico nella maggior parte dei nostri servizi, con la configurazione. Alcuni servizi cloud possono essere automatizzati con sistemi di terze parti.
Scambi
I trade-off rappresentano una considerazione importante per le applicazioni e la scalabilità cloud. Consentono di prendere decisioni su quali aspetti di un'applicazione dare priorità per ottenere la scalabilità. Man mano che le applicazioni crescono e diventano più complesse, diventa sempre più difficile ottimizzare tutti gli aspetti dell'applicazione contemporaneamente. Pertanto, è necessario fare compromessi per ottenere una scalabilità ottimale.
Alcuni compromessi comuni che devi considerare sono:
- Prestazioni e costi
- Flessibilità e complessità
- Resilienza rispetto ai costi
- Scalabilità e sicurezza
- Time to market rispetto alla scalabilità
Utilizzo di serverless e container
L'uso di serverless e container può migliorare notevolmente la scalabilità in OCI. Ciò consente di suddividere le applicazioni in componenti più piccoli ed efficienti che possono essere facilmente ridimensionati in base alle esigenze. In OCI, puoi scegliere tra OCI Container Engine for Kubernetes (OKE) per la distribuzione dei container per ridimensionare i microservizi in modo indipendente. Inoltre, prendi in considerazione OCI Functions e OCI Container Instances per sfruttare l'architettura elastica della piattaforma serverless per servizi altamente scalabili per distribuire il tuo carico di lavoro.
Considerazioni sul database
I dati sono la parte più importante di qualsiasi applicazione. L'intero sistema si basa su integrità e informazioni. È importante considerare il tipo di database giusto per soddisfare le tue esigenze aziendali e applicative.
C'era un tempo in cui le informazioni venivano conservate nei sistemi di gestione di database relazionali (RDBMS). Ora nel cloud, puoi scegliere tra varie opzioni di database e provider. Oggi, i database soddisfano esigenze aziendali uniche e vanno dalle micro dimensioni alla capacità incredibilmente grande per la gestione dei dati.
Ad esempio, Oracle Autonomous Database è la soluzione migliore per i dati transazionali, mentre MySQL è più adatto per gli analytics e il machine learning. A sua volta, il database Oracle NoSQL è adatto per dati semplici, ma fornisce risposte prevedibili a latenza in millisecondi a singola cifra per query semplici. Puoi prendere in considerazione l'infrastruttura Exadata per esigenze più sicure, ad alte prestazioni e di isolamento.
Considerazioni sullo storage
I dati sono disponibili in molti formati, dimensioni e frequenza di accesso, ma richiedono sempre spazio per lo storage. Esistono opzioni dall'area di memorizzazione degli oggetti, dall'area di memorizzazione dei blocchi e dall'area di memorizzazione dei file per memorizzare i dati, ma ognuna ha uno scopo specifico. OCI Object Storage è progettato per qualsiasi tipo di contenuto da memorizzare come storage standard, non frequente e di archivio. OCI File Storage è progettato per fornire un file system tradizionale che può essere attivato come storage di rete o NFS. Volume a blocchi OCI è destinato al collegamento a un'istanza e può essere utilizzato come volume di avvio e volume a blocchi.
Baseline prestazioni
Questo approccio viene utilizzato per determinare il livello di prestazioni baseline per l'esecuzione di un'applicazione nel cloud da sostenere rispetto al carico previsto. Stabilisce un punto di prestazione di riferimento. Questo punto viene utilizzato per i punti di riferimento futuri nelle modifiche necessarie al ridimensionamento per soddisfare il livello di prestazioni desiderato.
Load e stress test
Il test del carico simula carichi utente quasi reali per misurare le prestazioni della risposta dell'applicazione all'aumento del traffico. Ciò controlla se un sistema è in grado di gestire i carichi utente previsti senza deteriorare le prestazioni o arresti anomali. Inoltre, convalida la scalabilità di un sistema rispetto al carico variabile sull'applicazione. Ciò consente al comportamento delle risposte di identificare i colli di bottiglia e aiuta a ottimizzare la configurazione del sistema e la pianificazione della capacità.
Lo stress test va oltre il carico previsto dell'utente e convalida la capacità di un'applicazione di gestire picchi improvvisi di traffico o carichi insoliti. Consente inoltre di verificare se un sistema è in grado di gestire carichi insoliti e imprevisti senza abbattere il sistema o ridurre drasticamente le prestazioni. Ciò spinge i limiti del sistema per identificare i punti deboli nell'architettura o nella capacità del sistema, il che aiuta a ottimizzare la scalabilità e la resilienza del sistema.
Identifica bottiglie-colli
Nelle applicazioni cloud, è fondamentale garantire la scalabilità e le prestazioni di un'applicazione per identificare i colli di bottiglia e gestire il degrado delle prestazioni in cascata. Identifica i punti del sistema in cui il flusso di dati o di elaborazione è limitato o rallentato, diminuendo le prestazioni e potenzialmente causando il guasto del sistema rispetto alla capacità desiderata. I colli di bottiglia possono verificarsi in varie aree, tra cui rete, storage, elaborazione e accesso al database.
Approccio basato sui dati
Utilizza gli strumenti di monitoraggio e l'analisi dei dati per raccogliere e analizzare i dati per le prestazioni del sistema, i modelli di utilizzo e il comportamento degli utenti per implementare l'approccio logico e gli insight sui dati per ottimizzare le prestazioni, la capacità e la scalabilità del sistema. Ciò porta a una migliore user experience e a un maggiore valore aziendale. Ecco alcuni passaggi chiave per implementare un approccio basato sui dati:
- Consente di raccogliere e analizzare dati.
- Identifica modelli e tendenze.
- Ottimizza la capacità del sistema in base agli insight.
- Monitora e regola continuamente le prestazioni del sistema.
Monitoraggio dello stato
Il monitoraggio dello stato delle applicazioni per le applicazioni cloud è fondamentale per garantire la scalabilità e le prestazioni desiderate. Un'applicazione sana funziona in modo efficiente e soddisfa le richieste degli utenti. Un'applicazione in cattivo stato presenta problemi, come tempi di risposta lenti, elevato tasso di errore e crash. Il monitoraggio e l'azione sullo stato delle applicazioni possono determinare l'individuazione precoce dei problemi, ottimizzare le prestazioni, migliorare la user experience e ridurre i costi. Il monitoraggio OCI monitora attivamente e passivamente le risorse cloud utilizzando le metriche e la funzione di allarme per raccogliere e agire sulle configurazioni.
Risoluzione dei problemi di prestazioni
I problemi di prestazioni richiedono approcci diversi per la risoluzione dei problemi negli ambienti cloud. I livelli di accesso nel cloud potrebbero essere diversi dal sistema locale o dall'infrastruttura on premise. Di seguito sono riportati i passi che possono aiutarti a risolvere i problemi relativi alle prestazioni nel cloud.
- Definire il problema.
- Raccogliere i dati.
- Analizzare i dati.
- Identificare le cause dei problemi.
- Prova e isola.
- Risolvere il problema.
- Monitorare e convalidare.
Prendi in considerazione la possibilità di esaminare i passi comuni di risoluzione dei problemi forniti con ogni servizio OCI.
Identifica i limiti del servizio
È importante considerare i limiti dei singoli servizi cloud per rendere il sistema altamente scalabile e ottenere la massima capacità. Conoscendo i limiti delle prestazioni, puoi progettare il tuo sistema in modo che funzioni entro i limiti e aiutarti a evitare colli di bottiglia delle prestazioni o interruzioni del servizio. Ad esempio, un'istanza di computazione OCI con un bare metal o una virtual machine ha sempre limiti noti e problemi da considerare. Puoi utilizzare OCI Load Balancer per aumentare le prestazioni distribuendo capacità aggiuntiva dietro il load balancer.
SLA servizio indipendente
La progettazione di un sistema ad alte prestazioni e scalabile richiede un'attenta considerazione di ogni SLA del servizio cloud per ridurre i tempi di inattività, anche in caso di calamità. Ogni servizio nel cloud ha un SLA e obiettivi del livello di servizio (SLO) ben definiti. Potrebbe essere necessario prendere in considerazione la ridondanza nel sistema per soddisfare o battere la disponibilità di singoli servizi o servizi con il minor tempo SLA. OCI ha definito l'obiettivo del livello di servizio per i servizi cloud pubblici PaaS e SaaS da considerare nella progettazione e nell'architettura.
Note di rilascio
OCI aggiorna costantemente i servizi con nuove funzioni, funzionalità e patch. Tenere a mente le ultime modifiche può contribuire a migliorare le applicazioni e implementare nuove funzionalità. Gli aggiornamenti contengono anche correzioni di bug e aggiornamenti di sicurezza, interruzioni del servizio e tempi di inattività, modifiche ai prezzi e ai piani di servizio, conformità e modifiche normative. Le Note di rilascio OCI forniscono una vista consolidata per consentire ai servizi cloud di rimanere aggiornati su annunci e modifiche.
Analisi dei costi rispetto alla capacità
Per la scalabilità, è importante considerare i requisiti di dimensioni e forma e aggiungere un ulteriore limite. È anche importante considerare il servizio cloud adatto alle tue esigenze rispetto alla semplice scelta di servizi costosi senza motivi che giustifichino il costo. Evita di utilizzare servizi non necessari e di aggiungere livelli al sistema per ridurre costi e latenza. Un'analisi accurata dei costi, delle caratteristiche e della disponibilità dei servizi cloud è fondamentale per progettare un sistema altamente conveniente.