Informazioni sulla scalabilità automatica delle istanze nei servizi Cloud Run

In Cloud Run, ogni revisione viene scalata automaticamente sul numero di istanze necessarie per gestire tutte le richieste in entrata, gli eventi o l'utilizzo della CPU.

Quando una revisione non riceve traffico, per impostazione predefinita viene scalato a zero istanze. Tuttavia, se vuoi, puoi modificare questo valore predefinito per specificare che un'istanza deve essere mantenuta inattiva o "tiepida" utilizzando l'impostazione Numero minimo di istanze. Se utilizzi la CPU al di fuori delle richieste, devi impostare il numero minimo di istanze uguale a 1.

Oltre alla frequenza di richieste in entrata, eventi o utilizzo della CPU, il numero di istanze pianificate è influenzato da:

Il gestore della scalabilità automatica di Cloud Run le valuta ogni 5 secondi.

CPU sempre allocata e scalabilità automatica

Se configuri il servizio Cloud Run in modo che la CPU sia sempre allocata, devi prestare attenzione al comportamento di scalabilità a e da zero.

Scalabilità sempre allocata della CPU da zero. La scalabilità da zero può essere attivata solo da una richiesta, quindi un servizio che non elabora le richieste non può scalare da zero. Per questi carichi di lavoro, puoi impostare il numero minimo di istanze > 0 o includere una "richiesta di riattivazione" nella progettazione per riavviare l'elaborazione dopo la scalabilità a zero.

Scalabilità sempre allocata della CPU a zero. Dato che nessuna istanza ha una CPU allo 0%, l'analisi dell'utilizzo della CPU non comporterebbe mai una scalabilità fino a zero. Ciò significa che la decisione di scalare da uno a zero può essere presa solo controllando se l'istanza sta elaborando una richiesta.

Informazioni sul numero massimo di istanze

In alcuni casi è consigliabile 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 servizio. Ad esempio, il tuo servizio Cloud Run potrebbe interagire con un database in grado di gestire solo un determinato numero di connessioni aperte simultanee.

Puoi utilizzare l'impostazione Numero massimo di istanze per limitare il numero totale di istanze che possono essere avviate in parallelo, come documentato in Impostare il numero massimo di istanze.

Superamento del numero massimo di istanze

In circostanze normali, la revisione fa lo scale out creando nuove istanze per gestire il carico del traffico in entrata. Tuttavia, quando imposti un limite massimo di istanze, in alcuni scenari le istanze non saranno sufficienti per soddisfare questo carico di traffico. In questo caso, le richieste in entrata vengono messe in coda (in attesa) come segue:

  • Se vengono avviate nuove istanze, ad esempio durante uno scale out, le richieste cadranno almeno per il tempo di avvio medio delle istanze di container di questo servizio. Questo include quando la richiesta avvia uno scale out, ad esempio quando viene scalato da zero.
  • Se il tempo di avvio è inferiore a 10 secondi, le richieste verranno sospese per un massimo di 10 secondi.
  • Se non sono presenti istanze in fase di avvio e la richiesta non avvia uno scale out, le richieste verranno sospese per un massimo di 10 secondi.

Durante questo periodo, se un'istanza completa l'elaborazione delle richieste, diventa disponibile per elaborare le richieste in attesa in coda. Se nessuna istanza diventa disponibile durante il periodo di tempo, la richiesta non riesce e viene visualizzato un codice di errore 429.

Garanzie di scalabilità

Il limite massimo di istanze è un limite massimo per revisione e significa che il numero di istanze per questa revisione non deve superare il numero massimo.

In circostanze normali, Cloud Run è in grado di fare 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 in qualsiasi momento è possibile fare lo scale out della revisione al numero specificato di istanze. In circostanze eccezionali, Cloud Run può limitare la scalabilità per garantire un servizio di qualità per tutti i clienti.

Superamento del numero massimo di istanze a causa di picchi di traffico

In alcuni casi, ad esempio per picchi di traffico rapidi o manutenzione del sistema, Cloud Run potrebbe, per un breve periodo di tempo, creare più istanze di quelle specificate nell'impostazione del numero massimo di istanze. È possibile avviare nuove istanze superando l'impostazione del numero massimo di istanze per sostituire le istanze esistenti e fornire un periodo di tolleranza affinché le richieste inflight terminino l'elaborazione.

Il limite massimo di istanze può essere superato durante il normale funzionamento alcune volte alla settimana. In genere, il periodo di tolleranza dura fino a 15 minuti o fino al valore specificato nell'impostazione di timeout della richiesta. Queste istanze aggiuntive vengono eliminate entro 15 minuti dopo essere diventate inattive.

Se sono necessarie molte sostituzioni, gli aggiornamenti vengono generalmente distribuiti nell'arco di molti minuti o ore, ma ogni sostituzione ha un'istanza in eccesso solo per il periodo di tolleranza. Le istanze che superano il valore massimo dell'istanza sono solitamente inferiori al doppio del limite massimo configurato, ma possono essere molto più grandi in caso di improvvisi picchi di traffico di grandi dimensioni.

I test di carico rilevano un numero maggiore di istanze che superano l'impostazione relativa al numero massimo di istanze, perché il sistema potrebbe modificare la destinazione dei picchi di traffico per preservare la capacità per i carichi di lavoro esistenti con pattern di carico sostenuto.

Se il tuo servizio non può tollerare questo comportamento temporaneo, ti consigliamo di tenere conto di un margine di sicurezza e impostare un valore massimo inferiore per le istanze.

Suddivisione 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. Ciò può essere osservato nelle metriche Conteggio 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 indirizzarvi il traffico. Ciò riduce l'impatto dei deployment di nuove revisioni sulle latenze delle richieste, in particolare durante la gestione di 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. Ciò può essere osservato nelle metriche Conteggio istanze.

Istanze inattive e riduzione degli avvii a freddo

Cloud Run non arresta immediatamente le istanze una volta che hanno gestito tutte le richieste. Per ridurre al minimo l'impatto degli avvii a freddo, Cloud Run può mantenere alcune istanze inattive per un massimo di 15 minuti. Queste istanze sono pronte per gestire le richieste in caso di un improvviso picco di traffico.

Ad esempio, quando un'istanza ha finito di gestire le richieste, può rimanere inattiva per un determinato periodo di tempo nel caso in cui sia necessario gestire un'altra richiesta. Un'istanza inattiva potrebbe rendere persistenti le risorse, ad esempio le connessioni di database aperte. Tieni presente che la CPU viene allocata solo durante l'elaborazione delle richieste, a meno che non configuri esplicitamente il servizio in modo che la CPU sia sempre allocata.

Per mantenere sempre disponibili le istanze inattive, utilizza l'impostazione min-instance. Tieni presente che l'utilizzo di questa funzionalità sarà soggetto a costi anche quando il servizio non gestisce attivamente le richieste.

Scalabilità automatica e richieste in attesa

  • Se vengono avviate nuove istanze, ad esempio durante uno scale out, le richieste cadranno almeno per il tempo di avvio medio delle istanze di container di questo servizio. Questo include quando la richiesta avvia uno scale out, ad esempio quando viene scalato da zero.
  • Se il tempo di avvio è inferiore a 10 secondi, le richieste verranno sospese per un massimo di 10 secondi.
  • Se non sono presenti istanze in fase di avvio e la richiesta non avvia uno scale out, le richieste verranno sospese per un massimo di 10 secondi.

Impatto della scalabilità automatica sui servizi di supporto

Con l'aumento automatico del numero di istanze, il servizio Cloud Run potrebbe riscontrare limiti con i servizi di supporto. Ad esempio, Cloud SQL ha un limite quota API. Assicurati che questi servizi di supporto 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 supporto.

Scalabilità automatica e Pub/Sub

Google consiglia di utilizzare le sottoscrizioni push per consumare messaggi da un argomento Pub/Sub in Cloud Run. I messaggi push vengono ricevuti dal container come le richieste HTTP, attivando così lo stesso comportamento di scalabilità automatica.

Passaggi successivi