Configura il numero massimo di istanze

Puoi controllare il comportamento di scalabilità della funzione impostando un numero massimo di istanze Cloud Functions. L'impostazione del numero massimo di istanze controlla i costi e impedisce che le risorse downstream vengano sovraccaricate di traffico.

Cloud Functions scala creando nuove istanze della tua funzione. Ciascuna di queste istanze può gestire una sola richiesta alla volta, per cui picchi di volumi elevati potrebbero comportare la creazione di molte istanze.

La scalabilità automatica è sempre vantaggiosa, ma in alcuni casi potrebbe essere utile limitare il numero totale di istanze che possono esistere in un determinato momento. Ad esempio, la tua funzione potrebbe interagire con un database in grado di gestire solo un determinato numero di connessioni aperte.

Cloud Functions (2nd gen) offre la contemporaneità come meccanismo di scalabilità aggiuntivo. Una funzione configurata per la contemporaneità può eseguire più richieste contemporaneamente su una singola istanza. Puoi configurare una funzione in modo che utilizzi sia la contemporaneità che più istanze per ottimizzarne le prestazioni. Per scoprire di più sulla configurazione della contemporaneità, consulta Contemporaneità di Cloud Functions.

Impostazione e cancellazione dei limiti massimi di istanze

Puoi impostare un numero massimo di istanze per una funzione durante il deployment. Ogni funzione ha la propria impostazione del numero massimo di istanze. Le funzioni sono scalabili indipendentemente l'una dall'altra.

Impostazione dei limiti massimi di istanze

Puoi impostare un limite massimo di istanze utilizzando Google Cloud CLI o la console Google Cloud. Se non specifichi un limite, Cloud Functions imposta un valore predefinito:

  • 3000 per funzioni Cloud Functions (1ª generazione.)
  • 100 per le funzioni Cloud Functions (2nd gen)

Per impostare un limite massimo di istanze:

Console

  1. Vai alla pagina Panoramica di Cloud Functions.

  2. Fai clic su Crea funzione.

  3. Compila i campi obbligatori per la funzione.

  4. Espandi la sezione Runtime, build... alla fine della pagina e fai clic sulla scheda Runtime.

  5. Nel campo Numero massimo di istanze della sezione Scalabilità automatica, inserisci un valore o utilizza il valore predefinito.

gcloud

Per impostare un limite massimo di istanze, esegui il comando deploy con il flag --max-instances:

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

Sostituisci quanto segue:

  • FUNCTION_NAME: il nome della funzione.

  • MAX_INSTANCE_LIMIT: il numero da impostare come limite massimo di istanze, ad esempio 3000.

Cancellazione dei limiti massimi di istanze

Puoi cancellare un limite massimo di istanze per una funzione Cloud Functions (1ª generazione) utilizzando lo strumento a riga di comando gcloud o la console Google Cloud. Le funzioni di Cloud Functions (2nd gen) richiedono un limite massimo di istanze definito.

Console

Per cancellare un limite massimo di istanze per una funzione Cloud Functions (1ª generazione):

  1. Vai alla pagina Panoramica di Cloud Functions.

  2. Fai clic su una funzione esistente per andare alla relativa pagina dei dettagli. Puoi vedere il limite massimo di istanze attuale della funzione nella scheda Dettagli.

  3. Fai clic su Modifica.

  4. Espandi la sezione Runtime, build... alla fine della pagina e fai clic sulla scheda Runtime.

  5. Nel campo Numero massimo di istanze della sezione Scalabilità automatica, inserisci 0.

gcloud

Per cancellare un limite massimo di istanze per una funzione di Cloud Functions (1ª generazione), esegui il comando deploy con il flag --clear-max-instances:

gcloud functions deploy FUNCTION_NAME --clear-max-instances

Limiti e best practice

Questa sezione fornisce linee guida per l'utilizzo del numero massimo di istanze.

Scegli un valore massimo per l'istanza

Il valore ottimale per l'impostazione del numero massimo di istanze dipende dalle caratteristiche della funzione, incluso il tempo necessario per l'esecuzione di una chiamata, la frequenza di chiamata media e di picco prevista e la tolleranza dell'applicazione per gli errori delle chiamate. Come regola generale, inizia con un valore massimo di istanze pari a 3, quindi monitora gli errori delle chiamate e aumenta il valore del numero massimo di istanze secondo necessità.

Evita un numero eccessivo di scale up

Quando non è specificato alcun limite massimo di istanze, Cloud Functions (1ª generazione) favorisce la scalabilità per soddisfare la domanda rispetto alla limitazione della velocità effettiva. Ciò significa che il numero di istanze simultanee che la tua funzione di 1ª generazione potrebbe avere è effettivamente illimitato, a meno che tu non abbia configurato un limite di questo tipo. Cloud Functions (2nd gen) non supporta le funzioni senza un limite massimo di istanze

Ti consigliamo di assegnare un limite di --max-instances a qualsiasi funzione che invia richieste a servizi downstream con limiti di velocità effettiva o comunque non scalabili. Un limite massimo di istanze migliora la stabilità generale del sistema e aiuta a prevenire livelli di richieste insolitamente elevati.

Gestione delle richieste quando tutte le istanze sono occupate

In circostanze normali, la funzione fa lo scale up creando nuove istanze per gestire il carico del traffico in entrata. Tuttavia, quando hai impostato un limite massimo di istanze, potresti riscontrare uno scenario in cui le istanze non sono sufficienti per soddisfare il carico del traffico in entrata.

In questo scenario, Cloud Functions tenta di gestire una nuova richiesta in entrata per un massimo di 30 secondi:

  • Se un'istanza termina l'elaborazione della richiesta durante questo periodo di tempo, potrebbe iniziare a elaborare la nuova richiesta in entrata.
  • Se nessuna istanza diventa disponibile, la richiesta avrà esito negativo.

Le richieste inviate alle funzioni HTTP sovraccaricate hanno esito negativo con un codice di risposta

  • 429 Too Many Requests se è configurato un valore massimo di istanze oppure
  • 500 Internal Server Error se non è configurato alcun valore massimo di istanze (solo funzioni di 1ª generazione)

Gli eventi destinati a funzioni basate su eventi verranno salvati automaticamente finché non sarà disponibile la capacità.

Limiti massimi di istanze che superano la capacità di scalabilità di Cloud Functions

Quando specifichi un limite massimo di istanze, indichi un limite superiore. L'impostazione di un limite grande non significa che la funzione farà lo scale up fino al numero specificato di istanze. Significa solo che il numero di istanze che coesistono in un determinato momento non deve superare il limite.

Inoltre, l'impostazione di un limite massimo di istanze potrebbe influire sulle strategie di scalabilità utilizzate da Cloud Functions per soddisfare la domanda di traffico. In generale, Cloud Functions darà priorità al rispetto del limite specificato piuttosto che all'aumento delle dimensioni e al potenziale superamento del limite.

Gestione dei picchi di traffico

In alcuni casi, ad esempio in rapidi picchi di traffico, Cloud Functions potrebbe, per un breve periodo di tempo, creare più istanze rispetto al limite massimo specificato. Se la funzione non può tollerare questo comportamento temporaneo, potresti prendere in considerazione un margine di sicurezza e impostare un valore massimo delle istanze inferiore a quello che la funzione può tollerare.

Deployment

Quando esegui il deployment di una nuova versione della funzione, Cloud Functions esegue la migrazione del traffico dalla versione precedente a quella nuova. Poiché i limiti massimi di istanze sono impostati separatamente per ogni versione della funzione, potresti superare temporaneamente il limite specificato durante il periodo successivo al deployment.

Ad esempio, una funzione potrebbe avere un limite massimo di istanze di 5. In circostanze normali, la funzione scala fino a 5 istanze mentre gestisce le richieste. Quando viene eseguito il deployment di una nuova versione della funzione, la nuova versione ha un proprio limite massimo di istanze di 5.

Le richieste già gestite dalla versione precedente della funzione non vengono interrotte quando viene eseguito il deployment di una nuova versione della funzione. Queste richieste continueranno invece a progredire. Le nuove richieste in entrata verranno gestite dalla versione di cui è stato eseguito il deployment della funzione.

Di conseguenza, la funzione nell'esempio precedente potrebbe avere fino a 10 istanze in totale (5 per ogni versione della funzione) durante il periodo successivo al deployment della nuova versione. Il tempo necessario per terminare le istanze della funzione precedente dipende dal tempo necessario per completare la gestione delle richieste attive delle istanze. Questo è un fattore aggiuntivo da tenere in considerazione quando si seleziona un limite massimo di istanze appropriato.

Cancellazione dei limiti massimi di istanze

Se imposti il numero massimo di istanze per una funzione Cloud Functions (1ª generazione) su 0, il limite massimo di istanze esistente della funzione verrà cancellato, ma la funzione non verrà messa in pausa.