Per i servizi Cloud Run, ogni revisione viene scalata automaticamente 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 simultaneamente da una determinata istanza.
Numero massimo di richieste in parallelo per istanza
Puoi configurare il numero massimo di richieste in parallelo per istanza. Puoi aumentare questo valore 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 concorrenza massima pari a 80 volte il numero di vCPU. Questo valore predefinito 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 la console Google Cloud hanno una concorrenza predefinita di 80.
Anche se devi utilizzare il valore predefinito, se necessario puoi
ridurre la concorrenza massima. Ad esempio,
se il codice non può elaborare richieste parallele,
imposta la concorrenza su 1.
Il valore di concorrenza specificato è un limite massimo. Se la CPU dell'istanza è già molto utilizzata, Cloud Run potrebbe non inviare tante richieste a una determinata istanza. In questi casi, l'istanza Cloud Run potrebbe mostrare che la concorrenza massima non viene utilizzata. Ad esempio, se l'utilizzo elevato della CPU è sostenuto, il numero di istanze potrebbe essere scalato verso l'alto.
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:
Ottimizzazione della concorrenza per la scalabilità automatica e l'utilizzo delle risorse
La modifica della concorrenza massima per istanza influisce in modo significativo sul modo in cui il servizio viene scalato e utilizza le risorse.
- Contemporaneità inferiore: forza Cloud Run a utilizzare più istanze per lo stesso volume di richieste, perché ogni istanza gestisce meno richieste. Ciò può migliorare la reattività delle applicazioni non ottimizzate per un elevato parallelismo interno o delle applicazioni che vuoi scalare più rapidamente in base al carico delle richieste.
- Maggiore concorrenza: consente a ogni istanza di gestire più richieste, il che potrebbe comportare un numero inferiore di istanze attive e una riduzione dei costi. È adatta ad applicazioni efficienti nelle attività parallele con I/O vincolato o ad applicazioni che possono utilizzare più vCPU per l'elaborazione simultanea delle richieste.
Inizia con la concorrenza predefinita, monitora attentamente le prestazioni e l'utilizzo della tua applicazione e apportate le modifiche necessarie.
Concorrenza con istanze multi-vCPU
La regolazione della concorrenza è particolarmente importante se il servizio utilizza più vCPU, ma l'applicazione è single-thread o effettivamente single-thread (vincolata alla CPU).
- Hotspot vCPU: un'applicazione single-thread su un'istanza multi-vCPU può utilizzare al massimo 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.
- Utilizzo della concorrenza per guidare la scalabilità: se la scalabilità automatica basata sulla CPU è inefficace a causa di hotspot vCPU, la riduzione della concorrenza massima diventa uno strumento importante. Gli hotspot vCPU si verificano spesso quando viene scelta una vCPU multipla per un'applicazione a un solo thread a causa di elevate esigenze di memoria. L'utilizzo della concorrenza per guidare lo scaling forza lo scaling in base alla velocità effettiva delle richieste. In questo modo, vengono avviate più istanze per gestire il carico, riducendo la latenza e la coda per istanza.
Quando limitare la concorrenza massima a una richiesta alla volta.
Puoi limitare la concorrenza in modo che venga inviata una sola richiesta alla volta a ogni istanza in esecuzione. Ti consigliamo di farlo nei seguenti casi:
- Ogni richiesta utilizza la maggior parte della CPU o della memoria disponibile.
- L'immagine del 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 concorrenza di 1 influirà probabilmente in modo negativo sul rendimento dello scaling, perché molte istanze dovranno avviarsi per gestire un picco di richieste in entrata. Per ulteriori considerazioni, consulta la sezione
Throughput, 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 massimo di 1 richiesta simultanea per istanza. La linea verde superiore mostra le richieste nel tempo, mentre la linea blu inferiore 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 massimo di 80 richieste simultanee per istanza. La linea verde superiore mostra le richieste nel tempo, mentre la linea blu inferiore mostra il numero di istanze avviate per gestire le richieste. Nota che sono necessarie molte meno istanze per gestire lo stesso volume di richieste.

Concurrency per i deployment del codice sorgente
Quando la concorrenza è abilitata, Cloud Run non fornisce l'isolamento tra le richieste simultanee elaborate dalla stessa istanza. In questi casi, devi assicurarti che il codice sia sicuro da eseguire contemporaneamente. Puoi modificare questa opzione impostando un valore di concorrenza diverso. Ti consigliamo di iniziare con una concorrenza inferiore, ad esempio 8, e poi aumentarla. Iniziare con una concorrenza troppo elevata potrebbe comportare un comportamento imprevisto a causa di vincoli di risorse (come memoria o CPU).
Anche i runtime del linguaggio possono influire sulla concorrenza. Alcuni di questi impatti specifici per lingua sono mostrati nel seguente elenco:
Node.js è intrinsecamente single-thread. Per sfruttare la concorrenza, utilizza lo stile di codice asincrono di JavaScript, che è idiomatico in Node.js. Per maggiori dettagli, consulta Controllo del flusso asincrono nella documentazione ufficiale di Node.js.
Per Python 3.8 e versioni successive, il supporto di un'elevata concorrenza per istanza richiede un numero sufficiente di thread per gestire la concorrenza. Ti consigliamo di impostare una variabile di ambiente runtime in modo che il valore dei thread sia uguale al valore di concorrenza, ad esempio:
THREADS=8.
Passaggi successivi
Per gestire il numero massimo di richieste in parallelo per istanza dei tuoi 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 concorrenza.