In questa pagina viene descritto il comportamento predefinito della scalabilità automatica di Cloud Run. Per un' opzione di scalabilità alternativa in cui puoi configurare un conteggio di istanze specifico, consulta Scalabilità manuale.
Per impostazione predefinita, ogni revisione di Cloud Run viene scalata automaticamente al numero di istanze necessarie per gestire le richieste in entrata, gli eventi o l'utilizzo della CPU. Puoi anche ottimizzare questo comportamento di scalabilità configurando target di utilizzo e CPU personalizzati.
Quando una revisione non riceve traffico, per impostazione predefinita viene scalata a zero istanze. Puoi modificare questa impostazione predefinita per
specificare un'istanza da mantenere inattiva o "calda" utilizzando l'
impostazione del numero minimo di istanze. Se il tuo servizio utilizza la CPU anche quando non elabora le richieste, devi impostare il numero minimo di istanze su 1.
Il gestore della scalabilità automatica di Cloud Run valuta periodicamente le seguenti metriche per determinare il numero di istanze necessarie per gestire il traffico:
Utilizzo della CPU e della concorrenza: Cloud Run regola il conteggio delle istanze per mantenere la CPU media e la concorrenza entro le soglie target.
Limiti delle istanze: Cloud Run limita il numero di istanze tra i limiti massimi e minimi configurati.
Comportamento della scalabilità automatica orizzontale del servizio
Cloud Run dispone di due meccanismi di scalabilità automatica, la scalabilità basata su metriche e la scalabilità on demand, per determinare il numero di istanze necessarie per gestire il traffico.
Scalabilità basata su metriche
La scalabilità basata su metriche regola automaticamente il numero di istanze in base all'utilizzo medio della CPU e ai driver di scalabilità della concorrenza media delle richieste per fornire una capacità di gestione stabile per il tuo servizio Cloud Run.
Il gestore della scalabilità automatica determina un numero consigliato di istanze in base al numero massimo di istanze calcolato per ciascuno dei seguenti driver di scalabilità in modo indipendente:
Utilizzo della CPU: calcola il numero di istanze calcolando la media dell'utilizzo della CPU al secondo in un periodo di 1 minuto e dividendo questo valore per il numero di CPU per istanza. Questo risultato viene ulteriormente diviso per il target della CPU.
Concorrenza delle richieste: calcola il numero di istanze calcolando la media della concorrenza delle richieste al secondo in un periodo di 1 minuto e 10 minuti e dividendo questo valore per la concorrenza massima. Questo risultato viene ulteriormente diviso per il target di concorrenza delle richieste.
Per ogni revisione del servizio, puoi configurare il numero di CPU per istanza e la concorrenza massima.
Cloud Run non supporta la scalabilità basata sull'utilizzo della memoria.
Per impostazione predefinita, la scalabilità basata su metriche imposta una soglia del 60% per i target di utilizzo della CPU e di concorrenza delle richieste. Puoi attivare i controlli di scalabilità (anteprima) per specificare target di CPU o concorrenza personalizzati.
Quando Cloud Run esegue la scalabilità in base all'utilizzo della CPU, considera l'utilizzo medio della CPU in tutte le CPU allocate a un'istanza. Se la tua applicazione è single-threaded, ma viene eseguita il deployment su un'istanza multi-CPU, questo può comportare una lettura dell'utilizzo medio basso, che potrebbe influire sul modo in cui vengono prese le decisioni di scalabilità basate sulla CPU. Per ulteriori dettagli sull'ottimizzazione della configurazione della CPU per l' architettura dell'applicazione, consulta Configurare i limiti della CPU e Impostare il numero massimo di richieste simultanee per istanza.
Scale up
Cloud Run aumenta il numero di istanze in base al driver di scalabilità che richiede più istanze. Per evitare l'avvio e l'arresto rapidi delle istanze durante le piccole modifiche del traffico, il gestore della scalabilità automatica attende che l'utilizzo raggiunga circa il 90% della capacità prima di aumentare il conteggio delle istanze.
Puoi attivare i controlli di scalabilità (anteprima) per passare a un modello di scalabilità automatica a maggiore precisione in cui la scalabilità automatica basata su metriche di Cloud Run risponde in modo preciso ai target configurati, anche per i servizi con un numero ridotto di istanze. Se il tuo servizio differisce dalle configurazioni target personalizzate di oltre la soglia di tolleranza del 10%, Cloud Run consiglia il numero di istanze necessarie per portare il driver di scalabilità che attiva la scalabilità al di sotto del target.
Fare lo scale down
La scalabilità automatica di Cloud Run riduce il numero di istanze in esecuzione quando non sono più necessarie per gestire il traffico in entrata. La scalabilità basata su metriche regola continuamente il numero di istanze consigliate in base all'utilizzo.
Quando l'utilizzo medio della CPU o le richieste attive medie diminuiscono, l'algoritmo di scalabilità riduce il numero consigliato di istanze. Il bilanciatore del carico delle richieste di Cloud Run prende in considerazione questi consigli indirizzando preferibilmente le richieste in entrata prima alle istanze consigliate. In questo modo, le istanze consigliate rimangono più occupate e le altre istanze diventano inattive. Cloud Run riduce il conteggio di queste istanze non consigliate declassandole in modo che ricevano traffico solo se tutte le istanze consigliate sono occupate. Per mantenere la stabilità, Cloud Run arresta le istanze declassate nel seguente ordine:
- Cloud Run arresta un gruppo di istanze quando l'utilizzo in una finestra di 1 minuto è inferiore al 10%.
- Un secondo gruppo di istanze rimane in esecuzione fino al timeout di inattività di 15 minuti, garantendo la disponibilità della capacità in caso di picco di traffico improvviso.
Scalabilità on demand
Cloud Run utilizza la scalabilità on demand quando non riesce a trovare un'istanza disponibile per gestire la richiesta in entrata. La scalabilità on demand risponde in tempo reale alle modifiche del traffico in entrata su una revisione di Cloud Run o alle modifiche della latenza della revisione. Questa scalabilità tenta di garantire che ogni richiesta in entrata venga indirizzata a un'istanza in un breve periodo di tempo ed è l'unico driver per la scalabilità da zero.
Poiché la scalabilità on demand risponde in tempo reale alle modifiche improvvise del traffico, Cloud Run gestisce il compromesso tra la latenza di avvio a freddo (il tempo necessario per avviare una nuova istanza) e la latenza della coda in attesa (il tempo in cui una richiesta attende l'apertura di uno slot su un'istanza esistente). Per ogni richiesta, il sistema determina se la messa in coda per un'istanza imminente o un'istanza esistente è più veloce (in questo ordine) prima di provare ad avviare una nuova istanza on demand. Una richiesta rimane nella coda in attesa per un massimo di 10 secondi o 3,5 volte il tempo di avvio a freddo previsto (a seconda di quale valore è maggiore) prima che il sistema attivi una nuova istanza on demand.
Ottimizzazione adattiva della concorrenza (ACT)
Cloud Run utilizza l'ottimizzazione adattiva della concorrenza (ACT) per impedire che la limitazione della CPU causi un'elevata latenza delle richieste. Questo approccio misura l'utilizzo della CPU per ogni istanza in un determinato numero di richieste e regola dinamicamente il valore massimo di richieste simultanee dell'istanza per mantenere l'utilizzo della CPU al di sotto del 90%. ACT ottimizza la concorrenza in base ai seguenti scenari:
Ogni volta che l'utilizzo della CPU nell'ultimo secondo supera il 90%, ACT riduce di 1 il numero massimo di richieste simultanee dell'istanza.
Se l'istanza raggiunge il limite massimo di richieste simultanee e l'utilizzo della CPU rimane inferiore al 70% per 1 secondo, ACT aumenta di 1 il numero massimo di richieste simultanee per l'istanza.
Se le metriche di scalabilità mostrano che la concorrenza non raggiunge mai il massimo configurato, potrebbe essere perché ACT ha ridotto dinamicamente il massimo effettivo per proteggere il rendimento dell'istanza.
Cloud Run calcola i valori ACT per ogni deployment. Queste metriche non vengono mantenute tra i deployment. Se ACT riduce la concorrenza al di sotto del livello preferito, aumenta la CPU allocata per richiesta in parallelo massima. Anche le attività in background che causano picchi di CPU periodici possono interferire con questo approccio di scalabilità. Le metriche ACT non sono osservabili.
Fatturazione basata su istanze e scalabilità automatica
Se configuri la fatturazione basata su istanze per il tuo servizio Cloud Run, devi essere a conoscenza del comportamento di scalabilità a e da zero.
Scalabilità da zero. La scalabilità da zero può essere attivata solo da una richiesta, quindi un servizio che non elabora le richieste non può essere scalato da zero. Per questi workload, puoi impostare il numero minimo di istanze > 0 oppure includere una "richiesta di riattivazione" nella progettazione per riavviare l'elaborazione dopo la scalabilità a zero.
Scalabilità a zero. Poiché nessuna istanza è mai allo 0% di CPU, l'analisi di tutto l'utilizzo della CPU non comporterebbe mai la scalabilità a zero. Ciò significa che la decisione di scalare da una a zero può essere presa solo verificando se l'istanza sta elaborando una richiesta.
Informazioni sul numero massimo di istanze per i servizi
In alcuni casi, potresti voler limitare il numero totale di istanze che possono essere avviate, per motivi di controllo dei costi o per una migliore compatibilità con altre risorse utilizzate dal tuo servizio. Ad esempio, il tuo servizio Cloud Run potrebbe interagire con un database che può gestire solo un determinato numero di connessioni simultanee aperte.
Per impostazione predefinita, a tutti i servizi viene assegnato un limite massimo di istanze, anche se non specifichi un limite personalizzato. Imposta e monitora questo limite per determinare il comportamento di scalabilità e i costi associati al tuo servizio. Per ulteriori informazioni, consulta Limiti massimi di istanze.
Puoi utilizzare l'impostazione del numero massimo di istanze per limitare il numero totale di istanze che possono essere avviate in parallelo, come descritto in Impostare un numero massimo di istanze.
Superamento del numero massimo di istanze
In circostanze normali, la tua revisione viene scalata creando nuove istanze per gestire il carico di traffico in entrata. Tuttavia, se imposti un limite massimo di istanze, in alcuni scenari non saranno presenti istanze sufficienti per soddisfare il carico di traffico. In questo caso, le richieste in entrata vengono messe in coda (in attesa) come segue:
Le richieste rimarranno in attesa per un massimo di 3, 5 volte il tempo di avvio medio delle istanze container di questo servizio o per 10 secondi, a seconda di quale valore è maggiore.
Durante questa finestra di tempo, se un'istanza termina l'elaborazione delle richieste, diventa disponibile per elaborare le richieste in attesa in coda.
Se non diventano disponibili istanze durante la finestra, la richiesta non va a buon fine e viene restituito un codice di errore 429.
Garanzie di scalabilità
Il limite massimo di istanze è un limite superiore per revisione e significa che il numero di istanze per questa revisione non deve superare il massimo.
In circostanze normali, Cloud Run è in grado di eseguire lo scale out fino al limite massimo di istanze molto rapidamente per gestire tutte le richieste o gli eventi in entrata. Tuttavia, l'impostazione di un limite elevato non significa che la tua revisione sarà in grado di eseguire lo scale out fino al numero di istanze specificato in un determinato momento. In circostanze eccezionali, Cloud Run può limitare la scalabilità per garantire un buon servizio a tutti i clienti.
Superamento del numero massimo di istanze a causa di picchi di traffico
In alcuni casi, ad esempio picchi di traffico rapidi o manutenzione del sistema, Cloud Run potrebbe, per un breve periodo di tempo, creare più istanze rispetto a quelle specificate nell'impostazione del numero massimo di istanze. È possibile avviare nuove istanze in eccesso rispetto all'impostazione del numero massimo di istanze per sostituire le istanze esistenti e fornire un periodo di tolleranza per il completamento dell'elaborazione delle richieste in corso.
Il limite massimo di istanze può essere superato durante il normale funzionamento alcune volte alla settimana. Il periodo di tolleranza dura in genere fino a 15 minuti o fino a al valore specificato nell'impostazione del timeout della richiesta. Queste istanze aggiuntive vengono eliminate entro 15 minuti dopo essere diventate inattive.
Se sono necessarie molte sostituzioni, gli aggiornamenti vengono in genere distribuiti su molti minuti o ore, ma ogni sostituzione ha un'istanza in eccesso solo per il periodo di tolleranza. Le istanze in eccesso rispetto al valore massimo di istanze sono in genere inferiori al doppio del limite massimo di istanze configurato, ma possono essere molto più grandi per picchi di traffico improvvisi e di grandi dimensioni.
I test di carico riscontrano più istanze che superano l'impostazione del numero massimo di istanze perché il sistema potrebbe modificare la posizione in cui vengono gestiti i picchi di traffico per preservare la capacità dei workload esistenti che hanno mantenuto pattern di carico.
Se il tuo servizio non può tollerare questo comportamento temporaneo, ti consigliamo di considerare un margine di sicurezza e impostare un valore massimo di istanze inferiore.
Suddivisioni del traffico
Poiché il limite massimo di istanze è un limite per ogni revisione, se il servizio suddivide il traffico tra più revisioni, il numero totale di istanze per il servizio può superare il numero massimo di istanze per revisione. Questo può essere osservato nelle metriche del conteggio delle istanze.
Deployment
Quando esegui il deployment di una nuova revisione per gestire il 100% del traffico, Cloud Run avvia un numero sufficiente di istanze della nuova revisione prima di indirizzare il traffico verso di essa. In questo modo si riduce l'impatto dei deployment di nuove revisioni sulle latenze delle richieste, in particolare quando si gestiscono livelli elevati di traffico. Poiché il limite massimo di istanze è un limite per ogni revisione, durante un deployment il numero totale di istanze per il servizio può superare il numero massimo di istanze per revisione. Questo può essere osservato nelle metriche del conteggio delle istanze.
Istanze inattive e riduzione al minimo degli avvii a freddo
Per ridurre al minimo gli avvii a freddo, Cloud Run potrebbe mantenere le istanze inattive per un periodo di tempo dopo che hanno terminato la gestione delle richieste (fino a 15 minuti o 10 minuti per le GPU).
Un'istanza inattiva potrebbe mantenere le risorse, ad esempio le connessioni aperte al database. Tieni presente che l'impostazione di fatturazione predefinita è la fatturazione basata su richieste , a meno che tu non configuri esplicitamente il servizio in modo che abbia la fatturazione basata su istanze.
Per mantenere le istanze inattive sempre disponibili, utilizza l'
min-instance impostazione. Tieni presente che l'utilizzo di
questa funzionalità comporta costi anche quando il servizio non
gestisce attivamente le richieste.
Scalabilità automatica e richieste in attesa
Le richieste rimarranno in attesa per un massimo di 3, 5 volte il tempo di avvio medio delle istanze container di questo servizio o per 10 secondi, a seconda di quale valore è maggiore.
Impatto della scalabilità automatica sui servizi di backend
Man mano che il numero di istanze aumenta automaticamente, il tuo servizio Cloud Run potrebbe raggiungere i limiti dei servizi di backend. Ad esempio, Cloud SQL ha un limite di quota API. Assicurati che questi servizi di backend abbiano una quota sufficiente e possano gestire le connessioni da tutte le istanze del tuo servizio Cloud Run. Valuta la possibilità di impostare un numero massimo di istanze per evitare di sovraccaricare i servizi di backend.
Scalabilità automatica e Pub/Sub
Google consiglia di utilizzare gli abbonamenti push per utilizzare i messaggi di un argomento Pub/Sub su Cloud Run. I messaggi push vengono ricevuti come richieste HTTP dal container, attivando così lo stesso comportamento di scalabilità automatica.
Scalabilità automatica e più container (sidecar)
Cloud Run considera l'utilizzo della CPU delle istanze per la scalabilità automatica, dove l'utilizzo della CPU di un'istanza è la percentuale di CPU allocata in uso.
Tieni presente che allochi la CPU quando imposti i limiti della CPU a livello di container. Se utilizzi più container per istanza, l'allocazione effettiva della CPU per l'istanza è la somma dei limiti della CPU impostati su ogni container.
Passaggi successivi
- Per configurare target di utilizzo personalizzati o disattivare i driver di scalabilità, consulta Configurare i controlli di scalabilità personalizzati.
- Per scoprire altre opzioni di scalabilità, consulta Scalabilità manuale.
- Per gestire il numero massimo di istanze dei tuoi servizi Cloud Run, consulta Impostare un numero massimo di istanze.
- Per gestire il numero massimo di richieste simultanee gestite da ogni istanza, consulta Impostare la concorrenza.
- Per ottimizzare l'impostazione della concorrenza, consulta Suggerimenti per lo sviluppo per l'ottimizzazione della concorrenza.
- Per specificare un'istanza inattiva da mantenere in esecuzione per ridurre al minimo la latenza o gli avvii a freddo
sulle prime richieste, consulta
Utilizzare
min-instanceper abilitare le istanze inattive.