Gestisci il traffico e il carico per i tuoi carichi di lavoro in Google Cloud

Last reviewed 2023-11-13 UTC

Quando esegui uno stack di applicazioni su risorse distribuite nel cloud, il traffico di rete deve essere instradato 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 migliorare l'affidabilità dei tuoi carichi di lavoro cloud.

Pianificazione della capacità

Per garantire che l'applicazione di cui hai 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à.

Previsione del 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 di carico storiche, le variazioni stagionali, i picchi di carico durante eventi speciali e la crescita guidata dai cambiamenti aziendali come l'espansione a nuove aree geografiche.

Stima i requisiti di capacità

In base all'architettura di deployment e agli obiettivi di prestazioni e affidabilità dell'applicazione, stima la quantità di risorse Google Cloud necessarie per gestire il carico previsto. Ad esempio, se prevedi di utilizzare gruppi di istanze gestite di Compute Engine, decidi la dimensione di ciascun gruppo di istanze gestite, 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 un'adeguata ridondanza

Quando stimi i requisiti di capacità, fornisci un'adeguata ridondanza per ogni componente dello stack di applicazioni. Ad esempio, per raggiungere la ridondanza N+1, ogni componente dello stack di applicazioni deve avere almeno un componente ridondante oltre il minimo necessario per gestire il carico di previsione.

Eseguire il benchmarking 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, utilizzate dall'applicazione. L'efficienza delle risorse di un'applicazione può peggiorare quando il carico è eccezionalmente elevato e l'efficienza potrebbe cambiare nel tempo. Esegui i test di carico per condizioni di carico normali e di picco e ripeti i test di benchmarking a intervalli regolari.

Gestisci quote

Le quotas di servizio di Google Cloud sono limiti per progetto, che consentono di controllare il consumo delle risorse cloud. Le quote sono di due tipi: le quote delle risorse sono le risorse massime che puoi creare, come il numero di cluster Google Kubernetes Engine (GKE) a livello di regione in una regione. Le quote di frequenza limitano il numero di richieste API che possono essere inviate a un servizio in un periodo specifico. Le quote possono essere a livello di zona, di regione o globali. Esamina le quote delle risorse e di frequenza API attuali per i servizi che prevedi di utilizzare nei tuoi progetti. Assicurati che le quote siano sufficienti per la capacità necessaria. Se necessario, puoi richiedere una quota maggiore.

Prenota capacità di calcolo

Per assicurarti che la capacità per le risorse Compute Engine sia disponibile quando necessario, puoi creare prenotazioni. Una prenotazione offre capacità garantita 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, incluse le considerazioni sulla fatturazione, consulta Prenotazioni di risorse di zona di Compute Engine.

Monitora l'utilizzo e rivaluta periodicamente i requisiti

Dopo aver eseguito il deployment delle risorse richieste, monitora l'utilizzo della capacità. Potresti trovare opportunità per ottimizzare i costi rimuovendo le risorse inattive. Rivedi periodicamente i requisiti di capacità e considera eventuali modifiche del comportamento dell'applicazione, degli obiettivi di prestazioni e affidabilità, del carico degli utenti e del budget IT.

Scalabilità automatica

Quando esegui un'applicazione su risorse distribuite in più località, l'applicazione rimane disponibile durante le interruzioni in una delle località. Inoltre, la ridondanza consente agli utenti di sperimentare un comportamento coerente delle applicazioni. Ad esempio, in caso di picco nel 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ò comportare un utilizzo inefficiente delle risorse cloud.

Ad esempio, il componente carrello 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 periodi di carico elevato, potresti eseguire il provisioning di capacità di calcolo e archiviazione ridondanti. Tuttavia, quando il carico sull'applicazione è basso, una parte della capacità sottoposta a provisioning potrebbe rimanere inutilizzata o sottoutilizzata. Per rimuovere le risorse inutilizzate, devi monitorare l'utilizzo e modificare la capacità. La scalabilità automatica consente di gestire la capacità del cloud e mantenere il livello di disponibilità richiesto senza il sovraccarico operativo connesso alla gestione delle risorse ridondanti. Quando il carico sull'applicazione aumenta, la scalabilità automatica contribuisce a migliorare la disponibilità dell'applicazione mediante il provisioning automatico di risorse aggiuntive. Durante i periodi di basso carico, la scalabilità automatica rimuove le risorse inutilizzate 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 dover configurare nulla. Di seguito sono riportati alcuni esempi di servizi Google Cloud che supportano la scalabilità automatica. Questo elenco non è completo.

  • Compute Engine: i gruppi di istanze gestite consentono di scalare le applicazioni stateless di cui viene eseguito il deployment automatico nelle VM di Compute Engine in modo che corrispondano alla capacità al carico attuale. Per maggiori informazioni, consulta Scalabilità automatica dei gruppi di istanze.
  • GKE: puoi configurare i cluster GKE in modo da ridimensionare automaticamente i pool di nodi in base al carico attuale. Per ulteriori informazioni, consulta Gestore della scalabilità automatica dei cluster. Per i cluster GKE di cui esegui il provisioning in modalità Autopilot, GKE scala automaticamente i nodi e i carichi di lavoro in base al traffico.
  • Cloud Run: i servizi di cui esegui il provisioning in Cloud Run fanno automaticamente lo scale out al numero di istanze di container necessarie per gestire il carico attuale. Quando l'applicazione non ha carico, il servizio scala automaticamente il numero di istanze di container fino a zero. Per maggiori informazioni, consulta Informazioni sulla scalabilità automatica delle istanze di container.
  • Cloud Functions: 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 Functions avvia automaticamente nuove istanze della funzione. Per ulteriori informazioni, consulta Ambiente di esecuzione di Cloud Functions.
  • Bigtable:quando crei un cluster in un'istanza di Bigtable, puoi configurarlo per la scalabilità automatica. Bigtable monitora il carico di CPU e spazio di archiviazione e regola il numero di nodi nel cluster per mantenere le frequenze di utilizzo target specificate. Per ulteriori informazioni, consulta Scalabilità automatica di Bigtable.
  • Dataproc Serverless: quando invii un carico di lavoro batch di Apache Spark, Dataproc Serverless scala in modo dinamico le risorse del carico di lavoro, come il numero di esecutori, per eseguire il carico di lavoro in modo efficiente. Per maggiori informazioni, consulta Scalabilità automatica di Dataproc Serverless per Spark.

Bilanciamento del carico

Il bilanciamento del carico consente di migliorare l'affidabilità delle applicazioni instradando il traffico solo alle risorse disponibili e garantendo che le singole risorse non vengano sovraccaricate.

Prendi in considerazione i seguenti suggerimenti di progettazione relativi all'affidabilità quando scegli e configuri i bilanciatori del carico per il deployment nel cloud.

Bilancia il carico del traffico interno

Configura anche il bilanciamento del carico per il traffico tra i livelli dello stack di applicazioni, non solo per il traffico tra i client esterni e l'applicazione. Ad esempio, in uno stack di applicazioni web a tre livelli, puoi utilizzare un bilanciatore del carico interno per una comunicazione affidabile tra il livello web e quello dell'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 a livello di regione. Per maggiori informazioni, consulta Vantaggi e rischi del bilanciamento del carico globale per deployment in più regioni.

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, resiliente in caso di interruzioni delle zone.

Quando scegli il tipo di bilanciatore del carico, prendi in considerazione altri fattori oltre alla disponibilità, come il controllo geografico sulla terminazione, le prestazioni, il costo e il tipo di traffico di TLS. Per maggiori informazioni, consulta Scegliere un bilanciatore del carico.

Configura i controlli di integrità

La scalabilità automatica contribuisce a garantire che le applicazioni dispongano di risorse di infrastruttura adeguate per gestire il carico attuale. Tuttavia, anche se esistono risorse di infrastruttura sufficienti, un'applicazione, o alcune sue parti, potrebbe non rispondere. Ad esempio, tutte le VM che ospitano la tua applicazione potrebbero essere in stato RUNNING. Tuttavia, il software dell'applicazione di cui è stato eseguito il deployment su alcune VM potrebbe aver subito un arresto anomalo. I controlli di integrità del bilanciamento del carico assicurano che i bilanciatori del carico instradano il traffico dell'applicazione solo ai backend reattivi. Se i tuoi backend sono gruppi di istanze gestite, valuta la possibilità di configurare un ulteriore livello di controlli di integrità per riparare automaticamente le VM non disponibili. Quando la riparazione automatica è configurata per un gruppo di istanze gestite, le VM non disponibili vengono eliminate in modo proattivo e ne vengono create di nuove.

Limitazione di frequenza

A volte, può verificarsi un aumento rapido o sostenuto del carico dell'applicazione. Se l'applicazione non è progettata per gestire l'aumento del carico, l'applicazione o le risorse che utilizza potrebbero non funzionare, rendendo l'applicazione non disponibile. L'aumento del carico potrebbe essere causato da richieste dannose, come gli attacchi DDoS (Distributed Denial-of-Service) basati sulla rete. Un improvviso picco del carico può verificarsi anche per altri motivi, ad esempio errori di configurazione nel software client. Per assicurarti che l'applicazione sia in grado di gestire un carico eccessivo, valuta la possibilità di applicare meccanismi di limitazione della frequenza adeguati. Ad esempio, puoi impostare quote per il numero di richieste API che un servizio Google Cloud può ricevere.

Le tecniche di limitazione di frequenza possono anche contribuire a ottimizzare i costi dell'infrastruttura cloud. Ad esempio, impostando quote a livello di progetto per risorse specifiche, puoi limitare la fatturazione che il progetto può sostenere per quelle risorse.

Livello di servizio di rete

I livelli di servizi 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 con utenti a livello globale e con backend in più regioni, scegli il livello Premium. Il traffico da internet entra nella rete Google ad alte prestazioni nel punto di presenza (PoP) più vicino al sistema di invio. All'interno della rete Google, il traffico viene instradato dal PoP di voce alla risorsa Google Cloud appropriata, ad esempio una VM di Compute Engine. Il traffico in uscita viene inviato attraverso la rete Google, esce dal punto di presenza (POP) più vicino alla destinazione. Questo metodo di routing aiuta 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.