Quando esegui uno stack di applicazioni su risorse distribuite nel cloud, il traffico di rete deve essere indirizzato in modo efficiente alle risorse disponibili in più località. Questa parte della guida all'affidabilità dell'infrastruttura Google Cloud descrive le tecniche di gestione del traffico e del carico che puoi utilizzare per contribuire a migliorare l'affidabilità dei tuoi carichi di lavoro cloud.
Pianificazione della capacità
Per assicurarti che l'applicazione di cui è stato eseguito il deployment in Google Cloud disponga di risorse di infrastruttura adeguate, devi stimare la capacità richiesta e gestire la capacità di cui è stato eseguito il deployment. Questa sezione fornisce linee guida per aiutarti a pianificare e gestire la capacità.
Prevedi il carico dell'applicazione
Quando prevedi il carico, prendi in considerazione fattori quali il numero di utenti e la frequenza con cui l'applicazione potrebbe ricevere richieste. Nelle previsioni, prendi in considerazione le tendenze storiche di caricamento, le variazioni stagionali, i picchi di caricamento durante gli eventi speciali e la crescita dovuta a cambiamenti aziendali come l'espansione in nuove regioni geografiche.
Stimare i requisiti di capacità
In base all'architettura di deployment e tenendo conto degli obiettivi di prestazioni e affidabilità della tua applicazione, stima la quantità di risorse Google Cloud necessarie per gestire il carico previsto. Ad esempio, se prevedi di utilizzare i gruppi di istanze gestite (MIG) di Compute Engine, decidi le dimensioni di ogni MIG, il tipo di macchina VM e il numero, il tipo e le dimensioni dei dischi permanenti. Puoi utilizzare il Calcolatore prezzi di Google Cloud per stimare il costo delle risorse Google Cloud.
Pianifica una ridondanza adeguata
Quando stimi i requisiti di capacità, fornisci una ridondanza adeguata per ogni componente dello stack dell'applicazione. Ad esempio, per ottenere la redundanza N+1, ogni componente dello stack di applicazioni deve avere almeno un componente ridondante oltre il minimo necessario per gestire il carico previsto.
Esegui il benchmark dell'applicazione
Esegui test di carico per determinare l'efficienza delle risorse della tua applicazione. L'efficienza delle risorse è la relazione tra il carico sull'applicazione e le risorse come CPU e memoria che l'applicazione consuma. L'efficienza delle risorse di un'applicazione può peggiorare quando il carico è eccezionalmente elevato e può cambiare nel tempo. Esegui i test di carico sia per le condizioni di carico normale che di picco e ripeti i test di benchmarking a intervalli regolari.
Gestisci quote
Le quote dei servizi Google Cloud sono limiti per progetto che ti aiutano a controllare il consumo delle risorse cloud. Esistono due tipi di quote: le quote delle risorse sono le risorse massime che puoi creare, ad esempio il numero di cluster Google Kubernetes Engine (GKE) regionali in una regione. Le quote di frequenza limitano il numero di richieste API che possono essere inviate a un servizio in un determinato periodo. Le quote possono essere a livello di zona, di regione o globali. Esamina le quote di risorse e le quote di frequenza API correnti per i servizi che prevedi di utilizzare nei tuoi progetti. Assicurati che le quote siano sufficienti per la capacità di cui hai bisogno. Se necessario, puoi richiedere una quota maggiore.
Riservare la capacità di calcolo
Per assicurarti che la capacità per le risorse Compute Engine sia disponibile quando necessario, puoi creare prenotazioni. Una prenotazione garantisce la capacità in una zona specifica per un numero specificato di VM di un tipo di macchina scelto. Una prenotazione può essere specifica per un progetto o condivisa tra più progetti. Per ulteriori informazioni sulle prenotazioni, inclusi i considerazioni sulla fatturazione, consulta Prenotazioni di risorse a livello di zona di Compute Engine.
Monitora l'utilizzo e rivaluta periodicamente i requisiti
Dopo aver implementato le risorse richieste, monitora l'utilizzo della capacità. Potresti trovare opportunità per ottimizzare i costi rimuovendo le risorse inattive. Rivaluta periodicamente i requisiti di capacità e prendi in considerazione eventuali modifiche al comportamento dell'applicazione, agli obiettivi di prestazioni e affidabilità, al carico utente e al budget IT.
Scalabilità automatica
Quando esegui un'applicazione su risorse distribuite su più sedi, l'applicazione rimane disponibile durante le interruzioni in una delle sedi. Inoltre, la ridondanza contribuisce a garantire agli utenti un comportamento coerente delle applicazioni. Ad esempio, quando si verifica un picco di carico, le risorse ridondanti assicurano che l'applicazione continui a funzionare a un livello prevedibile. Tuttavia, quando il carico sull'applicazione è basso, la ridondanza può portare a un utilizzo inefficiente delle risorse cloud.
Ad esempio, il componente del carrello degli acquisti di un'applicazione di e-commerce potrebbe dover elaborare i pagamenti per il 99,9% degli ordini entro 200 millisecondi dalla conferma dell'ordine. Per soddisfare questo requisito durante i periodi di carico elevato, potresti eseguire il provisioning di capacità di calcolo e archiviazione ridondanti. Tuttavia, quando il carico sull'applicazione è ridotto, una parte della capacità fornita in provisioning potrebbe rimanere inutilizzata o sottoutilizzata. Per rimuovere le risorse inutilizzate, devi monitorare l'utilizzo e regolare la capacità. La scalabilità automatica ti aiuta a gestire la capacità del cloud e a mantenere il livello di disponibilità richiesto senza il sovraccarico operativo della gestione delle risorse ridondanti. Quando il carico dell'applicazione aumenta, la scalabilità automatica contribuisce a migliorare la disponibilità dell'applicazione eseguendo il provisioning automatico di risorse aggiuntive. Durante i periodi di carico ridotto, la scalabilità automaticarimuove le risorse non utilizzate e contribuisce a ridurre i costi.
Alcuni servizi Google Cloud, come Compute Engine, ti consentono di configurare la scalabilità automatica per le risorse di cui esegui il provisioning. I servizi gestiti come Cloud Run possono scalare automaticamente la capacità senza che tu debba configurare nulla. Di seguito sono riportati alcuni esempi di servizi Google Cloud che supportano la scalabilità automatica. Questo elenco non è esaustivo.
- Compute Engine: i gruppi di istanze gestite ti consentono di scalare automaticamente le applicazioni stateless di cui è stato eseguito il deployment sulle VM di Compute Engine in modo che la capacità corrisponda al carico corrente. Per ulteriori informazioni, consulta Gruppi di istanze a scalabilità automatica.
- GKE: puoi configurare i cluster GKE in modo che ridimensionino automaticamente i pool di nodi in base al carico corrente. Per ulteriori informazioni, consulta Cluster Autoscaler. Per i cluster GKE di cui esegui il provisioning in modalità Autopilot, GKE esegue automaticamente la scalabilità dei nodi e dei carichi di lavoro in base al traffico.
- Cloud Run: i servizi di cui esegui il provisioning in Cloud Run eseguono automaticamente lo scale out in base al numero di istanze container necessarie per gestire il carico corrente. Quando l'applicazione non ha alcun carico, il servizio riduce automaticamente a zero il numero di istanze container. Per ulteriori informazioni, consulta Informazioni sulla scalabilità automatica delle istanze contenitore.
- Funzioni Cloud Run:ogni richiesta a una funzione viene assegnata a un'istanza della funzione. Se il volume delle richieste in entrata supera il numero di istanze di funzione esistenti, Cloud Run avvia automaticamente nuove istanze della funzione. Per ulteriori informazioni, consulta Ambiente di esecuzione delle funzioni Cloud Run.
- Bigtable:quando crei un cluster in un'istanza Bigtable, puoi configurarlo in modo che si espanda automaticamente. Bigtable monitora il carico della CPU e dello spazio di archiviazione e regola il numero di nodi nel cluster per mantenere i tassi di utilizzo target specificati. Per ulteriori informazioni, consulta Scalabilità automatica di Bigtable.
- Dataproc Serverless: quando invii un carico di lavoro batch Apache Spark, Dataproc Serverless scala dinamicamente le risorse del carico di lavoro, ad esempio il numero di executor, per eseguirlo in modo efficiente. Per ulteriori informazioni, consulta Scalabilità automatica di Dataproc Serverless per Spark.
Bilanciamento del carico
Il bilanciamento del carico contribuisce a migliorare l'affidabilità delle applicazioni instradando il traffico solo alle risorse disponibili e garantendo che le singole risorse non siano sovraccaricate.
Prendi in considerazione i seguenti consigli di progettazione relativi all'affidabilità quando scegli e configuri i bilanciatori del carico per il tuo deployment sul cloud.
Bilanciare il traffico interno
Configura il bilanciamento del carico anche per il traffico tra i livelli dello stack dell'applicazione, non solo per il traffico tra i client esterni e l'applicazione. Ad esempio, in uno stack di applicazioni web a 3 livelli, puoi utilizzare un bilanciatore del carico interno per una comunicazione affidabile tra i livelli web e app.
Scegli un tipo di bilanciatore del carico appropriato
Per bilanciare il carico del traffico esterno verso un'applicazione distribuita in più regioni, puoi utilizzare un bilanciatore del carico globale o più bilanciatori del carico regionali. Per ulteriori informazioni, consulta Vantaggi e rischi del bilanciamento del carico globale per i deployment multi-regione.
Se i backend si trovano in un'unica regione e non hai bisogno delle funzionalità del bilanciamento del carico globale, puoi utilizzare un bilanciatore del carico a livello di regione, che è resiliente alle interruzioni di servizio nelle zone.
Quando scegli il tipo di bilanciatore del carico, prendi in considerazione altri fattori oltre alla disponibilità, ad esempio il controllo geografico sulla terminazione TLS, le prestazioni, il costo e il tipo di traffico. Per ulteriori informazioni, consulta la sezione Scegliere un bilanciatore del carico.
Configurare i controlli di integrità
La scalabilità automatica contribuisce ad assicurare che le tue applicazioni dispongano di risorse di infrastruttura adeguate per gestire il carico corrente. Tuttavia, anche se esistono risorse di infrastruttura sufficienti, un'applicazione o parti di essa potrebbero non essere reattive. Ad esempio, tutte le VM che ospitano la tua applicazione potrebbero essere nello stato RUNNING
. Tuttavia, il software dell'applicazione di cui è stato eseguito il deployment su alcune VM potrebbe aver avuto un arresto anomalo.
I controlli di integrità del bilanciamento del carico
assicurano che i bilanciatori del carico indirizzino il traffico delle applicazioni solo ai backend
che rispondono. Se i tuoi backend sono gruppi di istanze gestite, valuta la possibilità di configurare un livello aggiuntivo di controlli di integrità per eseguire la riparazione automatica delle VM non disponibili. Quando la riparazione automatica è configurata per un gruppo di istanze gestite,
le VM non disponibili vengono eliminate in modo proattivo e vengono create nuove VM.
Limitazione di frequenza
A volte, la tua applicazione potrebbe registrare un aumento rapido o prolungato del carico. Se l'applicazione non è progettata per gestire l'aumento del carico, l'applicazione o le risorse che utilizza potrebbero non funzionare, rendendola non disponibile. L'aumento del carico potrebbe essere causato da richieste dannose, come gli attacchi DDoS (distributed denial of service) basati sulla rete. Un picco improvviso del carico può verificarsi anche per altri motivi, ad esempio errori di configurazione nel software client. Per assicurarti che la tua applicazione possa gestire un carico eccessivo, valuta la possibilità di applicare meccanismi di limitazione della frequenza adatti. Ad esempio, puoi impostare quote per il numero di richieste API che un servizio Google Cloud può ricevere.
Le tecniche di limitazione della frequenza possono anche aiutarti a ottimizzare il costo della tua infrastruttura cloud. Ad esempio, impostando quote a livello di progetto per risorse specifiche, puoi limitare la fatturazione che il progetto può generare per queste risorse.
Livello di servizio di rete
I livelli di servizio di rete di Google Cloud ti consentono di ottimizzare la connettività tra i sistemi su internet e i tuoi carichi di lavoro Google Cloud. Per le applicazioni che servono utenti a livello globale e hanno backend in più di una regione, scegli il livello Premium. Il traffico proveniente da internet entra nella rete Google ad alte prestazioni nel punto di presenza (PoP) più vicino al sistema di invio. All'interno della rete di Google, il traffico viene instradato dal PoP di ingresso alla risorsa Google Cloud appropriata, ad esempio una VM Compute Engine. Il traffico in uscita viene inviato tramite la rete Google e esce dal PoP più vicino alla destinazione. Questo metodo di routing contribuisce a migliorare la percezione della disponibilità da parte degli utenti riducendo il numero di hop di rete tra gli utenti e i PoP più vicini.