Per i servizi Cloud Run, ogni revisione viene scalata automaticamente in base al numero di istanze necessarie per gestire tutte le richieste in entrata.
Quando più istanze elaborano le richieste, vengono utilizzate più CPU e memoria, con conseguenti costi più elevati.
Per offrirti un maggiore controllo, Cloud Run fornisce un'impostazione Numero massimo di richieste in parallelo per istanza che specifica il numero massimo di richieste che possono essere elaborate contemporaneamente da una determinata istanza.
Numero massimo di richieste in parallelo per istanza
Puoi configurare il numero massimo di richieste in parallelo per istanza. Puoi aumentarlo fino a un massimo di 1000. Per impostazione predefinita, le istanze Cloud Run di cui è stato eseguito il deployment utilizzando Google Cloud CLI o Terraform hanno una contemporaneità massima pari a 80 volte il numero di vCPU. Questa impostazione predefinita si applica solo quando viene creato un nuovo servizio; non si applica ai deployment successivi di una revisione. Le istanze Cloud Run di cui è stato eseguito il deployment utilizzando Google Cloud la console hanno una contemporaneità predefinita di 80.
Anche se ti consigliamo di utilizzare il valore predefinito, se necessario puoi
ridurre la contemporaneità massima. Ad esempio,
se il codice non è in grado di elaborare le richieste in parallelo,
imposta la concorrenza su 1.
Il valore di contemporaneità specificato è un limite massimo. Se la CPU dell'istanza è già molto utilizzata, Cloud Run potrebbe non inviare così tante richieste a una determinata istanza. In questi casi, l'istanza Cloud Run potrebbe mostrare che la contemporaneità massima non viene utilizzata. Ad esempio, se l'utilizzo elevato della CPU è sostenuto, il numero di istanze potrebbe invece fare lo scale up.
Il seguente diagramma mostra in che modo l'impostazione del numero massimo di richieste in parallelo per istanza influisce sul numero di istanze necessarie per gestire le richieste in parallelo in entrata:
Considerazioni sui costi
Quando più istanze elaborano le richieste, Cloud Run alloca più CPU e memoria a costi più elevati. Un'impostazione di contemporaneità più elevata consente a un numero inferiore di istanze di gestire lo stesso volume di richieste, il che può ridurre i costi. Tuttavia, il codice dell'applicazione deve essere in grado di gestire in modo efficiente le richieste in parallelo. Per saperne di più, consulta Ottimizzare la contemporaneità per la scalabilità automatica e l'utilizzo delle risorse.
Per saperne di più, consulta i prezzi di Cloud Run o stima i costi con il calcolatore prezzi.
Ottimizzare la contemporaneità per la scalabilità automatica e l'utilizzo delle risorse
La regolazione della contemporaneità massima per istanza influisce in modo significativo sulla scalabilità e sull'utilizzo delle risorse del servizio.
- Contemporaneità inferiore: impone a Cloud Run di utilizzare più istanze per lo stesso volume di richieste, perché ogni istanza gestisce un numero inferiore di richieste. Questo può migliorare la reattività delle applicazioni non ottimizzate per un elevato parallelismo interno o delle applicazioni di cui vuoi eseguire lo scale up più rapidamente in base al carico delle richieste.
- Contemporaneità più elevata: consente a ogni istanza di gestire più richieste, il che può comportare un numero inferiore di istanze attive e una riduzione dei costi. Questa opzione è adatta per le applicazioni efficienti nelle attività parallele con I/O limitato o per le applicazioni che possono utilizzare effettivamente più vCPU per l'elaborazione richiesta in parallelo.
Inizia con la contemporaneità predefinita, monitora attentamente il rendimento e l'utilizzo dell'applicazione e apportare le modifiche necessarie.
Contemporaneità con istanze con più vCPU
La regolazione della contemporaneità è particolarmente importante se il servizio utilizza più vCPU, ma l'applicazione è a thread singolo o effettivamente a thread singolo (con CPU limitata).
- Hotspot vCPU: un'applicazione a thread singolo su un'istanza con più vCPU può raggiungere il limite massimo di una vCPU, mentre le altre sono inattive. Il gestore della scalabilità automatica della CPU di Cloud Run misura l'utilizzo medio della CPU in tutte le vCPU. In questo scenario, l'utilizzo medio della CPU può rimanere ingannevolmente basso, impedendo una scalabilità efficace basata sulla CPU.
- Utilizzare la contemporaneità per la scalabilità: se la scalabilità automatica basata sulla CPU non è efficace a causa degli hotspot vCPU, la riduzione della contemporaneità massima diventa uno strumento importante. Gli hotspot vCPU si verificano spesso quando viene scelta una vCPU multipla per un'applicazione a thread singolo a causa delle elevate esigenze di memoria. L'utilizzo della contemporaneità per la scalabilità impone la scalabilità in base alla velocità effettiva delle richieste. In questo modo, vengono avviate più istanze per gestire il carico, riducendo la latenza e l'accodamento per istanza.
Quando limitare la contemporaneità massima a una richiesta alla volta.
Puoi limitare la concorrenza in modo che a ogni istanza in esecuzione venga inviata una sola richiesta alla volta. Ti consigliamo di farlo nei seguenti casi:
- Ogni richiesta utilizza la maggior parte della CPU o della memoria disponibile.
- L'immagine container non è progettata per gestire più richieste contemporaneamente, ad esempio se il container si basa su uno stato globale che due richieste non possono condividere.
Tieni presente che una contemporaneità di 1 influirà probabilmente negativamente sul rendimento della scalabilità, perché dovranno essere avviate molte istanze per gestire un picco di richieste in entrata. Per ulteriori considerazioni, consulta
Velocità effettiva, latenza e compromessi.
Case study
Le seguenti metriche mostrano un caso d'uso in cui 400 client effettuano 3 richieste al secondo a un servizio Cloud Run impostato su un numero massimo di richieste in parallelo per istanza pari a 1. La linea verde in alto mostra le richieste nel tempo, mentre la linea blu in basso mostra il numero di istanze avviate per gestire le richieste.

Le seguenti metriche mostrano 400 client che effettuano 3 richieste al secondo a un servizio Cloud Run impostato su un numero massimo di richieste in parallelo per istanza pari a 80. La linea verde in alto mostra le richieste nel tempo, mentre la linea blu in basso mostra il numero di istanze avviate per gestire le richieste. Tieni presente che sono necessarie molte meno istanze per gestire lo stesso volume di richieste.

Contemporaneità per i deployment del codice sorgente
Quando la concorrenza è abilitata, Cloud Run non fornisce l'isolamento tra le richieste in parallelo elaborate dalla stessa istanza. In questi casi, devi assicurarti che il codice sia sicuro da eseguire in parallelo. Puoi modificare questa impostazione impostando un valore di contemporaneità diverso. Ti consigliamo di iniziare con una contemporaneità inferiore, ad esempio 8, e poi di aumentarla. Se inizi con una contemporaneità troppo elevata, potresti riscontrare un comportamento imprevisto a causa di vincoli di risorse (ad esempio memoria o CPU).
Anche i runtime del linguaggio possono influire sulla contemporaneità. Alcuni di questi impatti specifici del linguaggio sono riportati nel seguente elenco:
Node.js è intrinsecamente a thread singolo. Per sfruttare la contemporaneità, utilizza lo stile di codice asincrono di JavaScript, che è idiomatico in Node.js. Per saperne di più, consulta Controllo del flusso asincrono nella documentazione ufficiale di Node.js.
Per Python 3.8 e versioni successive, il supporto di una contemporaneità elevata per istanza richiede un numero sufficiente di thread per gestire la contemporaneità. Ti consigliamo di impostare una variabile di ambiente di runtime in modo che il valore dei thread sia uguale al valore di contemporaneità, ad esempio:
THREADS=8.
Passaggi successivi
Per gestire il numero massimo di richieste in parallelo per istanza dei servizi Cloud Run, consulta Impostare il numero massimo di richieste in parallelo per istanza.
Per ottimizzare l'impostazione del numero massimo di richieste in parallelo per istanza, consulta i suggerimenti per lo sviluppo per la regolazione della contemporaneità.