Numero massimo di richieste in parallelo per istanza (servizi)

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 un conseguente aumento dei costi.

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. Per impostazione predefinita, ogni istanza Cloud Run può ricevere fino a 80 richieste contemporaneamente. Puoi aumentare questo valore fino a un massimo di 1000.

Sebbene sia consigliabile utilizzare il valore predefinito, se necessario puoi abbassare la concorrenza massima. Ad esempio, se il codice non può elaborare richieste parallele, imposta la concorrenza su 1.

Il valore di concorrenza specificato è un valore massimo e Cloud Run potrebbe non inviare così tante richieste a una determinata istanza se la CPU dell'istanza è già molto utilizzata.

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 arrivo:

diagramma del numero massimo di richieste in parallelo 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 casi in cui:

  • Ogni richiesta utilizza la maggior parte della CPU o della memoria disponibile.
  • L'immagine del contenitore non è progettata per gestire più richieste contemporaneamente, ad esempio se il contenitore si basa su uno stato globale che due richieste non possono condividere.

Tieni presente che una concorrenza di 1 potrebbe influire negativamente sul rendimento del scaling, perché molte istanze dovranno essere avviate per gestire un picco di richieste in entrata.

Case study

Le seguenti metriche mostrano un caso d'uso in cui 400 client inviano 3 richieste al secondo a un servizio Cloud Run impostato su un numero massimo di richieste in parallelo per istanza di 1. La linea verde superiore mostra le richieste nel tempo, mentre la linea blu inferiore mostra il numero di istanze avviate per gestire le richieste.

Contemporaneità impostata su uno

Le seguenti metriche mostrano 400 client che inviano 3 richieste al secondo a un servizio Cloud Run impostato su un numero massimo di richieste in parallelo per istanza pari a 80. La riga superiore verde mostra le richieste nel tempo, mentre la riga blu inferiore 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.

La concorrenza è impostata su 80

Concorrenza per i deployment del codice sorgente

Quando la concorrenza è attivata, Cloud Run non fornisce isolamento tra le richieste concorrenti 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, per poi aumentarla. Iniziare con una concorrenza troppo elevata potrebbe comportare comportamenti indesiderati a causa di limitazioni delle risorse (ad esempio memoria o CPU).

Anche i runtime della lingua possono influire sulla concorrenza. Alcuni di questi effetti specifici per lingua sono riportati nell'elenco seguente:

  • Node.js è intrinsecamente single-threaded. Per sfruttare la concorrenza, utilizza lo stile di codice asincrono di JavaScript, che è idiomatico in Node.js. Per maggiori dettagli, consulta la sezione Controllo flusso asincrono nella documentazione ufficiale di Node.js.

  • Per Python 3.8 e versioni successive, il supporto di una concorrenza elevata per istanza richiede thread sufficienti per gestire la concorrenza. Ti consigliamo di impostare una variabile di ambiente runtime in modo che il valore di 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.