Contemporaneità

Le funzioni Cloud Run supportano la gestione di più richieste in parallelo su una singola istanza di funzione. Questo può essere utile per evitare gli avvii a freddo, poiché un'istanza già attiva può elaborare più richieste contemporaneamente, riducendo così la latenza complessiva.

Quando la concorrenza è attivata, le funzioni Cloud Run non forniscono isolamento tra le richieste concorrenti elaborate dalla stessa istanza di funzione. In questi casi, devi assicurarti che il codice della funzione sia sicuro da eseguire contemporaneamente. Tieni presente le seguenti considerazioni su determinati runtime di lingua:

  • 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.

  • Ti consigliamo di iniziare con una concorrenza inferiore, ad esempio 8, per poi aumentarla. Iniziare con una concorrenza troppo elevata potrebbe comportare un comportamento imprevisto a causa di vincoli di risorse (ad esempio memoria o CPU).

  • Per Python 3.8 e versioni successive, il supporto di una concorrenza elevata per istanza di funzione 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.

Per impostazione predefinita, le istanze di funzione gestiscono una sola richiesta alla volta. Puoi modificare questo comportamento per funzione impostando un valore di concorrenza come mostrato nella sezione successiva.

Impostare un valore di concorrenza

Il valore di concorrenza predefinito è 1. Puoi impostare il valore di concorrenza di una funzione per eseguire l'override del valore predefinito. Il valore di concorrenza rappresenta il numero massimo di richieste in parallelo che una singola istanza della funzione può gestire.

Un valore di concorrenza maggiore di 1 fa sì che il codice della funzione venga eseguito contemporaneamente in una singola istanza. Il valore massimo di concorrenza è 1000 (anche se consigliamo di iniziare con un valore inferiore e di aumentare gradualmente). L'impostazione di un valore di concorrenza maggiore di 1 richiede che una funzione abbia una o più vCPU. Consulta Limiti di memoria per i valori predefiniti di memoria e vCPU.

Puoi impostare la concorrenza per una funzione in uno dei seguenti modi:

Impostare la concorrenza utilizzando le funzioni Cloud Run

gcloud

Puoi impostare un valore di concorrenza utilizzando l'interfaccia alla gcloud CLI eseguendo il deployment di una funzione con il flag --concurrency:

gcloud functions deploy YOUR_FUNCTION_NAME \
--gen2 \
--concurrency=CONCURRENCY_VALUE \
FLAGS...

dove CONCURRENCY_VALUE è il numero massimo di richieste in parallelo consentite per istanza container. Lascia la concorrenza non specificata per ricevere il valore predefinito del server.

Console

Per impostare un valore di concorrenza utilizzando la console Google Cloud:

  1. Vai alla pagina Panoramica delle funzioni Cloud Run nella console Google Cloud.
  2. Fai clic sul nome della funzione per accedere alla pagina Dettagli funzione.
  3. Fai clic su Modifica.
  4. Espandi la sezione Runtime, build… alla fine della pagina e fai clic sulla scheda Runtime.
  5. In Concorrenza, inserisci un valore di concorrenza nel campo Numero massimo di richieste in parallelo per istanza.
  6. Fai clic su Avanti.
  7. Fai clic su Esegui il deployment.

    Questo passaggio è necessario per l'applicazione delle modifiche.

Impostare la concorrenza utilizzando Cloud Run

gcloud

Per impostare un valore di concorrenza utilizzando gcloud CLI, aggiorna il servizio Cloud Run sottostante e specifica il flag --concurrency:

gcloud run services update YOUR_FUNCTION_NAME --concurrency CONCURRENCY_VALUE

dove CONCURRENCY_VALUE è il numero massimo di richieste in parallelo consentite per istanza container. Lascia la concorrenza non specificata per ricevere il valore predefinito del server.

Console

Per impostare un valore di concorrenza utilizzando la console Google Cloud:

  1. Vai alla pagina Panoramica delle funzioni Cloud Run nella console Google Cloud.
  2. Fai clic sul nome della funzione per accedere alla pagina Dettagli funzione.
  3. Nel riquadro Basato su Cloud Run, fai clic sul nome della funzione per accedere alla pagina Dettagli servizio del servizio Cloud Run sottostante.
  4. Fai clic su Modifica ed esegui il deployment di una nuova revisione nella parte superiore della pagina.
  5. Apri la scheda Contenitore.
  6. Inserisci un valore di concorrenza nel campo Numero massimo di richieste in parallelo per istanza.

    Se il valore specificato per Numero massimo di richieste in parallelo per istanza è maggiore di 1, scorri verso il basso nella pagina e apri la sezione Container. Assicurati che il campo CPU contenga un valore pari o superiore a 1.

  7. Fai clic su Esegui il deployment.

    Questo passaggio è necessario per l'applicazione delle modifiche.

Le funzioni Cloud Run si basano sul supporto della concorrenza fornito da Cloud Run. Per saperne di più, consulta Numero massimo di richieste in parallelo per istanza (servizi) nella documentazione di Cloud Run.