Configura il numero massimo di istanze (1ª 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.

Impostazione e cancellazione 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.

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

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 utilizzando lo strumento a riga di comando gcloud o la console Google Cloud.

Console

Per cancellare un limite massimo di istanze per una funzione:

  1. Vai alla pagina Panoramica di Cloud Functions.

  2. Fai clic su una funzione esistente per passare 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, 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 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à.

Evita scale up eccessivi

Se non viene specificato alcun limite massimo di istanze, Cloud Functions favorisce lo scalabilità per soddisfare la domanda piuttosto che la limitazione della velocità effettiva. Ciò significa che il numero di istanze simultanee che la tua funzione potrebbe avere è effettivamente illimitato, a meno che tu non abbia configurato un tale limite.

Consigliamo di assegnare un limite --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à complessiva del sistema e consente di evitare 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, 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 vanno a buon fine con un codice di risposta pari a

  • 429 Too Many Requests se è configurato un valore massimo di istanze oppure
  • 500 Internal Server Error se non viene configurato un valore massimo per le istanze

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.

Cancellazione dei limiti massimi di istanze

Se imposti il numero massimo di istanze per una funzione su 0, il limite massimo esistente della funzione viene cancellato, ma la funzione non viene messa in pausa.