Configura il numero massimo di istanze (1ª gen.)

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

Cloud Run Functions scala creando nuove istanze della funzione. Ciascuna di queste istanze può gestire una sola richiesta alla volta, quindi picchi elevati nel volume delle richieste potrebbero comportare la creazione di molte istanze.

La scalabilità automatica è utile la maggior parte delle volte, 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 determinato numero di connessioni aperte.

Impostazione e cancellazione dei limiti del numero massimo di istanze

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

Impostazione del limite massimo di istanze

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

Per impostare un limite massimo di istanze:

Console

  1. Vai alla pagina Panoramica delle funzioni Cloud Run.

  2. Fai clic su Crea funzione.

  3. Compila i campi obbligatori per la tua funzione.

  4. Espandi la sezione Impostazioni di runtime, build, connessioni e sicurezza 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 quello 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.

Eliminazione del limite massimo di istanze

Puoi eliminare un limite massimo di istanze per una funzione utilizzando lo strumento a riga di comando gcloud o la console Google Cloud .

Console

Per eliminare un limite massimo di istanze per una funzione:

  1. Vai alla pagina Panoramica delle funzioni Cloud Run.

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

  3. Fai clic su Modifica.

  4. Espandi la sezione Impostazioni di runtime, build, connessioni e sicurezza 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 eliminare un limite massimo di istanze per una funzione, esegui il comando deploy con il flag --clear-max-instances:

gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-max-instances

Limiti e best practice

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

Scegli un valore massimo per le istanze

Il valore ottimale per l'impostazione del numero massimo di istanze dipende dalle caratteristiche della funzione, tra cui il tempo di esecuzione di una chiamata, la frequenza media e di picco prevista e la tolleranza dell'applicazione agli errori di chiamata. Una buona regola pratica è iniziare con un valore di istanze massime pari a 3, quindi monitorare gli errori di chiamata e regolare il valore di istanze massime in base alle necessità.

Proteggiti dagli scale up eccessivi

Quando non viene specificato alcun limite massimo di istanze, Cloud Run Functions privilegia lo scale up per soddisfare la domanda rispetto alla limitazione del throughput. Ciò significa che il numero di istanze simultanee che la tua funzione potrebbe avere è effettivamente illimitato, a meno che tu non abbia configurato un limite.

Ti consigliamo di assegnare un limite --max-instances a qualsiasi funzione che invia richieste a servizi downstream con limitazioni di throughput o non scalabili in altro modo. Un limite massimo di istanze migliora la stabilità complessiva del sistema e contribuisce a proteggere da livelli di richieste anormalmente elevati.

Gestione delle richieste quando tutte le istanze sono occupate

In circostanze normali, la tua funzione viene scalata creando nuove istanze per gestire il carico di traffico in entrata. Tuttavia, se hai impostato un limite massimo di istanze, potresti riscontrare uno scenario in cui non sono presenti istanze sufficienti per soddisfare il carico di traffico in entrata.

In questo scenario, Cloud Run 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 non diventa disponibile alcuna istanza, la richiesta non andrà a buon fine.

Le richieste inviate alle funzioni HTTP sovraccariche non vanno a buon fine e restituiscono un codice di risposta

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

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

Limite massimo di istanze che supera la capacità di scalabilità di Cloud Run Functions

Quando specifichi un limite massimo di istanze, stai specificando un limite superiore. L'impostazione di un limite elevato non significa che verrà eseguito lo scale up della tua funzione fino al numero di istanze specificato. 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à che Cloud Run Functions utilizza per soddisfare la domanda di traffico. In generale, Cloud Run Functions dà la priorità al rispetto del limite specificato anziché ad aumentare le risorse e potenzialmente superare il limite.

Gestione dei picchi di traffico

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

Deployment

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

Ad esempio, una funzione potrebbe avere un limite massimo di istanze pari a 5. In circostanze normali, la funzione esegue lo scale up fino a un massimo di 5 istanze durante la gestione delle richieste. Quando viene eseguito il deployment di una nuova versione della funzione, questa ha un proprio limite di 5 istanze.

Le richieste già gestite dalla versione precedente della funzione non vengono interrotte quando viene implementata una nuova versione della funzione. Queste richieste continueranno a essere elaborate. Le nuove richieste in entrata verranno gestite dalla versione della funzione appena implementata.

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

Eliminazione del limite massimo di istanze

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