Configura il numero massimo di istanze (2ª generazione)

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

Cloud Functions scala creando nuove istanze della funzione. Ognuna di queste istanze può gestire una sola richiesta alla volta, pertanto grandi picchi nel volume di richieste potrebbero comportare la creazione di molte istanze.

La scalabilità automatica è nella maggior parte dei casi vantaggiosa, ma in alcuni casi potresti voler limitare il numero totale di istanze che possono esistere in un determinato momento. Ad esempio, la tua funzione potrebbe interagire con un database che può gestire solo un certo numero di connessioni aperte.

Cloud Functions 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à sia più istanze per ottimizzarne le prestazioni. Per scoprire di più sulla configurazione della contemporaneità, consulta Contemporaneità di Cloud Functions.

Impostazione dei limiti massimi di istanze

Puoi impostare un numero massimo di istanze per una funzione durante il deployment. Ogni funzione ha una propria impostazione del numero massimo di istanze. Le funzioni scalano in modo indipendente l'una dall'altra. Cloud Functions richiede un limite massimo di istanze definito.

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 il valore predefinito di 100.

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.

Limiti e best practice

Questa sezione fornisce le 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, tra cui il tempo necessario per l'esecuzione di una chiamata, la frequenza media e massima prevista e la tolleranza dell'applicazione per gli errori di chiamata. Una buona regola pratica è iniziare con un valore massimo di istanze pari a 3, quindi monitorare gli errori di chiamata e regolare il valore massimo delle istanze aumentandolo in base alle necessità.

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, se imposti 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 di elaborare la 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 a funzioni HTTP sovraccaricate non hanno esito positivo con un codice di risposta 429 Too Many Requests.

Gli eventi destinati alle funzioni basate su eventi verranno salvati automaticamente fino a quando la capacità non sarà disponibile.

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 elevato non significa che la funzione farà lo scale up fino al numero specificato di istanze. Significa solo che il numero di istanze che coesisteno in qualsiasi 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à la priorità al rispetto del limite specificato, anziché aumentare e potenzialmente superare il limite.

Gestione dei picchi di traffico

In alcuni casi, ad esempio rapidi picchi di traffico, Cloud Functions, per un breve periodo di tempo, potrebbe creare più istanze rispetto al limite massimo specificato. Se la funzione non è in grado di tollerare questo comportamento temporaneo, è consigliabile considerare un margine di sicurezza e impostare un valore massimo delle istanze inferiore a quello consentito dalla funzione.

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 vengono impostati in modo indipendente 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 pari a 5. In circostanze normali, la funzione fa lo scale up fino a 5 istanze mentre gestisce le richieste. Quando viene eseguito il deployment di una nuova versione della funzione, questa ha un proprio limite massimo di 5 istanze.

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 della funzione di cui è stato appena eseguito il deployment.

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