Informazioni sulla scalabilità automatica delle istanze nei servizi Cloud Run

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

Quando una revisione non riceve traffico, viene scalata in modo predefinito su zero istanze. Tuttavia, se vuoi, puoi modificare questa impostazione predefinita per specificare un'istanza da mantenere inattiva o "calda" utilizzando l'impostazione per il numero minimo di istanze. Se utilizzi la CPU al di fuori delle richieste, devi impostare un numero minimo di istanze pari 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 valuta questi aspetti ogni 5 secondi.

CPU sempre allocata e scalabilità automatica

Se configuri il servizio Cloud Run in modo che la CPU sia sempre allocata, devi essere consapevole del comportamento della scalabilità verso e da zero.

Scalabilità allocata della CPU sempre 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" nel progetto per riavviare l'elaborazione dopo la scalabilità a zero.

La CPU è sempre allocata con scalabilità fino a zero. Dal momento che nessuna istanza è mai allo 0% di CPU, osservando l'uso complessivo della CPU non otterrebbe mai la scalabilità a zero. Ciò significa che la decisione di scalare da uno a zero può essere presa solo verificando 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 servizio Cloud Run potrebbe interagire con un database in grado di gestire solo un certo numero di connessioni aperte simultanee.

Puoi utilizzare l'impostazione del numero massimo di istanze per limitare il numero totale di istanze che possono essere avviate in parallelo, come documentato in Impostazione di un 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, se imposti un limite massimo di istanze, in alcuni scenari le istanze non saranno sufficienti per soddisfare il carico di traffico. In questo caso, le richieste in entrata vengono messe in coda (in attesa) nel seguente modo:

  • Se vengono avviate nuove istanze, ad esempio durante uno scale out, le richieste pendono almeno per il tempo di avvio medio delle istanze di container di questo servizio. Sono inclusi i casi in cui la richiesta avvia uno scale out, ad esempio quando viene scalato da zero.
  • Se il tempo di avvio è inferiore a 10 secondi, le richieste dureranno fino a 10 secondi.
  • Se non sono presenti istanze in fase di avvio e la richiesta non avvia uno scale out, le richieste dureranno fino a 10 secondi.

Durante questo periodo di tempo, se un'istanza termina l'elaborazione delle richieste, diventa disponibile per elaborare le richieste in attesa in coda. Se non è disponibile nessuna istanza durante la finestra temporale, la richiesta non va a buon fine e viene generato 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 limite 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, impostare un limite alto non significa che sarà possibile fare lo scale out della revisione per il numero specificato di istanze in qualsiasi 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 rapidi picchi di traffico 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 che superano l'impostazione del numero massimo di istanze per sostituire quelle esistenti e fornire un periodo di tolleranza per il completamento dell'elaborazione delle richieste in corso.

Il limite massimo di istanze può essere superato in condizioni di normale funzionamento alcune volte a settimana. Il periodo di tolleranza dura in genere fino a 15 minuti o fino al valore specificato nell'impostazione di timeout della richiesta. Queste istanze aggiuntive vengono eliminate entro 15 minuti dal loro stato di inattività.

Se sono necessarie molte sostituzioni, gli aggiornamenti in genere vengono 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 sono normalmente inferiori al doppio del limite massimo configurato, ma possono essere molto più grandi in caso di picchi di traffico elevati e improvvisi.

I test di carico registrano più istanze che superano il numero massimo di istanze poiché il sistema potrebbe modificare la posizione in cui vengono pubblicati i picchi di traffico, in modo da 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 di 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 del servizio può superare il numero massimo di istanze per revisione. Puoi vedere questo aspetto 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. Questo riduce l'impatto dei nuovi deployment delle 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 del servizio può superare il numero massimo di istanze per revisione. Puoi vedere questo aspetto nelle metriche Conteggio istanze.

Istanze inattive e riduzione al minimo degli avvii a freddo

Cloud Run non arresta immediatamente le istanze dopo 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 a gestire le richieste in caso di un picco di traffico improvviso.

Ad esempio, quando un'istanza ha terminato di gestire le richieste, potrebbe rimanere inattiva per un determinato periodo di tempo nel caso in cui sia necessario gestire un'altra richiesta. Un'istanza inattiva può 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 le istanze inattive permanenti disponibili, utilizza l'impostazione min-instance. Tieni presente che l'utilizzo di questa funzionalità costituisce dei costi anche se 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 pendono almeno per il tempo di avvio medio delle istanze di container di questo servizio. Sono inclusi i casi in cui la richiesta avvia uno scale out, ad esempio quando viene scalato da zero.
  • Se il tempo di avvio è inferiore a 10 secondi, le richieste dureranno fino a 10 secondi.
  • Se non sono presenti istanze in fase di avvio e la richiesta non avvia uno scale out, le richieste dureranno fino a 10 secondi.

Impatto della scalabilità automatica sui servizi di supporto

Con l'aumento automatico del numero di istanze, i servizi di supporto del tuo servizio Cloud Run potrebbero riscontrare limiti. Ad esempio, Cloud SQL prevede un limite di 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 backup.

Scalabilità automatica e Pub/Sub

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

Passaggi successivi