Configura il numero massimo di istanze (1ª generazione)
Puoi controllare il comportamento di scalabilità della funzione impostando un numero massimo di istanze delle funzioni Cloud Run. L'impostazione del numero massimo di istanze consente di controllare i costi e impedisce alle risorse a valle di essere sovraccaricate di traffico.
Le funzioni Cloud Run si ridimensionano creando nuove istanze della funzione. Ciascuna istanze possono gestire una sola richiesta alla volta, per cui potrebbe comportare la creazione di molte istanze.
La scalabilità automatica è nella maggior parte dei casi vantaggiosa, ma in alcuni casi potresti vuoi 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. Ciascuna ha la propria impostazione del numero massimo di istanze. Le funzioni scalano indipendentemente tra loro.
Impostazione dei limiti di istanze massime
Puoi impostare un limite massimo di istanze utilizzando Google Cloud CLI o la console Google Cloud. Se non specifichi un limite, le funzioni Cloud Run impostano un il valore predefinito è 3000.
Per impostare un limite massimo di istanze:
Console
Vai alla sezione Pagina Panoramica delle funzioni di Cloud Run.
Fai clic su Crea funzione.
Compila i campi obbligatori per la funzione.
Espandi la sezione Runtime, build... alla fine della pagina e fai clic su la scheda Runtime.
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 numero massimo di istanze limite, ad esempio 3000.
Cancellazione dei limiti massimi di istanze
Puoi cancellare un limite massimo di istanze per una funzione utilizzando gcloud
a strumento a riga di comando o la console Google Cloud.
Console
Per cancellare un limite massimo di istanze per una funzione:
Vai alla sezione Pagina Panoramica delle funzioni di Cloud Run.
Fai clic su una funzione esistente per aprire la relativa pagina dei dettagli. Puoi vedere il limite attuale di istanze massime della funzione nella scheda Dettagli.
Fai clic su Modifica.
Espandi la sezione Runtime, build... alla fine della pagina e fai clic su la scheda Runtime.
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 --no-gen2 --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 delle istanze massime dipende dalle caratteristiche della funzione, tra cui il tempo di esecuzione di una chiamata, la frequenza media e di picco prevista delle chiamate e la tolleranza dell'applicazione per gli errori di chiamata. Una buona regola empirica è iniziare con un valore di istanze massime pari a 3, quindi monitorare gli errori di chiamata e modificare il valore di istanze massime verso l'alto, se necessario.
Evita scale up eccessivi
Se non viene specificato alcun limite massimo di istanze, le funzioni Cloud Run favorisce scalare per soddisfare la domanda oltre la limitazione della velocità effettiva. Ciò significa che il numero di istanze simultanee che la funzione potrebbe avere è effettivamente illimitato, a meno che tu non abbia configurato un limite di questo tipo.
Consigliamo di assegnare un limite di --max-instances
a tutte le funzioni che inviano
a servizi downstream con limiti di velocità effettiva o comunque inscalabili.
Un limite massimo di istanze migliora la stabilità complessiva del sistema e aiuta a proteggersi da livelli di richieste anormalmente elevati.
Gestione delle richieste quando tutte le istanze sono occupate
In circostanze normali, la funzione esegue il ridimensionamento in alto creando nuove istanze per gestire il carico del traffico in entrata. Ma se imposti un limite massimo di istanze, potresti riscontrare uno scenario in cui non ci sono istanze sufficienti da soddisfare carico di traffico in entrata.
In questo scenario, le funzioni Cloud Run tentano di soddisfare una nuova richiesta in entrata per un massimo di 30 secondi:
- Se un'istanza termina di elaborare la sua richiesta durante questo periodo di tempo, potrebbe iniziare a elaborare la nuova richiesta in entrata.
- Se non viene creata alcuna istanza, la richiesta non andrà a buon fine.
Le richieste inviate a funzioni HTTP sovraccarcate non vanno a buon fine con un codice di risposta
429 Too Many Requests
se è configurato un valore massimo di istanze oppure500 Internal Server Error
se non è configurato alcun valore per il numero massimo di istanze
Gli eventi destinati alle funzioni basate su eventi verranno salvati automaticamente fino al giorno e la capacità di archiviazione è disponibile.
Limiti di istanze massime che superano la capacità di scalabilità delle funzioni Cloud Run
Quando specifichi un limite massimo di istanze, indichi un limite superiore. L'impostazione di un limite elevato non significa che la funzione verrà scalata 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à impiegate dalle funzioni Cloud Run per soddisfare la domanda di traffico. In generale, le funzioni Cloud Run daranno la priorità al rispetto del limite specificato anziché al ridimensionamento e al superamento potenziale del limite.
Gestione dei picchi di traffico
In alcuni casi, come i rapidi picchi di traffico, le funzioni Cloud Run potrebbero, per una breve di un periodo di tempo, crea un numero maggiore di istanze rispetto al numero massimo specificato limite. Se la funzione non è in grado di tollerare questo comportamento temporaneo, è consigliabile per calcolare un margine di sicurezza e impostare un valore massimo di istanze più basso del tuo una funzione può tollerare.
Deployment
Quando esegui il deployment di una nuova versione della funzione, Cloud Run esegue la migrazione del traffico dalla precedente alla nuova. Poiché sono stati impostati dei limiti massimi di istanze per ogni versione della funzione in modo indipendente, potresti temporaneamente superare 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 esegue lo scale up fino a 5 istanze man mano che gestisce le richieste. Quando viene eseguita il deployment di una nuova versione della funzione, questa ha un proprio limite di 5 istanze massime.
Richieste già gestite dalla versione precedente della funzione non vengano interrotti quando viene eseguito il deployment di una nuova versione della funzione. Al contrario, queste richieste continueranno a essere elaborate. Le nuove richieste in entrata verranno gestite dalla versione appena implementata della funzione.
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 per l'interruzione 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 quando si seleziona un limite di istanze massime appropriato.
Cancellazione dei limiti massimi di istanze
Se imposti il numero massimo di istanze per una funzione su 0, viene cancellato il limite di istanze massime esistente della funzione, ma la funzione non viene messa in pausa.