Utilizzo delle istanze massime
Puoi controllare il comportamento di scalabilità della tua 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 siano sovraccaricate di traffico.
Cloud Functions offre la scalabilità mediante la creazione di nuove istanze della funzione. Ognuna di queste istanze può gestire una sola richiesta alla volta, per cui picchi elevati nel volume di richieste potrebbero comportare la creazione di molte istanze.
La scalabilità automatica è utile nella maggior parte dei casi, ma in alcuni casi potresti voler limitare il numero totale di istanze che possono esistere in un dato momento. Ad esempio, la tua funzione potrebbe interagire con un database in grado di gestire solo un certo numero di connessioni aperte simultanee.
Impostazione e cancellazione dei limiti massimi di istanze
Puoi impostare un numero massimo di istanze per una funzione durante il deployment. Ogni funzione dispone di una propria impostazione di istanze massime. Le funzioni scalano in modo indipendente l'una dall'altra.
Impostazione del limite massimo di istanze
Puoi impostare un limite massimo per le istanze utilizzando Google Cloud CLI o la console Google Cloud.
Console
Per impostare un limite massimo di istanze per una nuova funzione:
Vai alla pagina Panoramica di Cloud Functions.
Fai clic su Crea funzione.
Compila i campi obbligatori per la funzione,
Fai clic su Impostazioni di runtime, build e connessione.
Nel campo Numero massimo di istanze nella sezione Scalabilità automatica, inserisci il valore che preferisci o utilizza semplicemente il valore predefinito suggerito.
gcloud
Per impostare un limite massimo per le 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 istanza. Ad esempio, 3000.
È stato impostato il limite massimo per le istanze.
Limitazione dei limiti massimi di istanze
Puoi cancellare il limite massimo di istanze utilizzando lo strumento a riga di comando gcloud
o la console Google Cloud.
Console
Per cancellare il limite massimo di istanze:
Vai alla pagina Panoramica di Cloud Functions.
Fai clic su una funzione esistente per andare alla relativa pagina dei dettagli. L'attuale limite di istanze massime della funzione è visualizzato nella scheda Dettagli.
Fai clic su Modifica.
Fai clic su Impostazioni di runtime, build e connessione.
Nel campo Numero massimo di istanze nella sezione Scalabilità automatica, inserisci
0
o lascia vuoto il campo.
gcloud
Per rimuovere il limite massimo di istanze, esegui il comando deploy
con il flag --clear-max-instances
:
gcloud functions deploy FUNCTION_NAME --clear-max-instances
Il limite per il numero massimo di istanze è stato cancellato.
Limiti e best practice
Questa sezione fornisce linee guida per l'utilizzo del numero massimo di istanze.
Difenderti da scale up eccessivi
Se non viene specificato alcun limite --max-instances
, Cloud Functions è progettato per favorire la scalabilità per soddisfare la domanda, piuttosto che la limitazione della velocità effettiva. Ciò significa che il numero di istanze simultanee che la funzione potrebbe avere è effettivamente illimitato se non hai configurato tale limite.
Consigliamo di assegnare un limite --max-instances
a tutte le funzioni che inviano richieste ai servizi di downstream con limitazione di velocità effettiva o comunque non scalabile.
Un limite massimo di istanze migliora la stabilità complessiva del sistema e aiuta a proteggere i sistemi da livelli di richieste insolitamente elevati.
Richiedi gestione 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 imposti un limite massimo per le istanze, potresti riscontrare uno scenario in cui non vi sono istanze sufficienti per soddisfare il carico di 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 in questo periodo di tempo, potrebbe iniziare a elaborare la nuova richiesta in entrata.
- Se nessuna istanza è disponibile, la richiesta avrà esito negativo.
Limiti massimi di istanze che superano la capacità di scalabilità di Cloud Functions
Quando specifichi un limite per le istanze massime, specifica un limite superiore. L'impostazione di un limite elevato non implica che la funzione verrà scalata fino al numero di istanze specificato. Significa solo che il numero di istanze che coesistono in un dato 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, le funzioni Cloud Functions daranno la priorità al rispetto del limite specificato piuttosto che allo scale up e al superamento del limite.
Gestire i picchi di traffico
In alcuni casi, come i picchi di traffico rapidi, Cloud Functions potrebbe, per un breve periodo di tempo, creare più istanze del limite massimo di istanze specificato. Se la tua funzione non può tollerare questo comportamento temporaneo, puoi prendere in considerazione un margine di sicurezza e impostare un valore massimo per le 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 per le istanze massime sono impostati per ogni versione della funzione in modo indipendente, 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 di istanze massimo di 5.
Le richieste già gestite dalla versione precedente della funzione non vengono interrotte quando ne viene eseguito il deployment. Invece, queste richieste continueranno 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. La quantità di tempo necessaria per la terminazione delle istanze della funzione precedente dipende dal tempo necessario a tali istanze per completare la gestione delle richieste attive. Questo è un altro fattore da tenere in considerazione quando si seleziona un limite massimo per le istanze.
Limitazione dei limiti massimi di istanze
L'impostazione del numero massimo di istanze su 0
comporta la cancellazione dei limiti massimi per il numero di istanze esistenti. L'impostazione di un valore 0
non mette in pausa la funzione.