Informazioni sulla scalabilità automatica delle istanze nei servizi Cloud Run

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

Quando una revisione non riceve traffico, per impostazione predefinita viene scalata a zero istanze. Tuttavia, se vuoi, puoi modificare questo valore predefinito per specificare un'istanza da mantenere inattiva o "in uso" utilizzando l'impostazione Istanze minime. Se utilizzi la CPU al di fuori delle richieste, devi impostare il numero minimo di istanze su 1.

Oltre alla frequenza delle richieste in arrivo, degli eventi o dell'utilizzo della CPU, il numero di istanze pianificate è influenzato da:

Il gestore della scalabilità automatica di Cloud Run li 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 conoscere il comportamento di scaling a e da zero.

Scalabilità della CPU sempre allocata da zero. Lo scaling da zero può essere attivato solo da una richiesta, pertanto un servizio che non elabora richieste non può eseguire lo scaling da zero. Per questi carichi di lavoro, puoi impostare un numero minimo di istanze > 0 o includere una "richiesta di risveglio" nel design per riavviare l'elaborazione dopo la scalabilità a zero.

Scalabilità della CPU sempre allocata a zero. Poiché nessuna istanza è mai al 0% di utilizzo della CPU, l'analisi di tutto l'utilizzo della CPU non comporterebbe mai la scalabilità a zero. Ciò significa che la decisione di eseguire il ridimensionamento 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 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 servizio Cloud Run potrebbe interagire con un database che può gestire solo un determinato numero di connessioni aperte simultanee.

Puoi utilizzare l'impostazione di istanze massime per limitare il numero totale di istanze che possono essere avviate in parallelo, come descritto in Impostazione di un numero massimo di istanze.

Numero massimo di istanze superato

In circostanze normali, la revisione viene eseguita su più 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 del traffico. In questo caso, le richieste in arrivo vengono messe in coda (in attesa) come segue:

  • Se vengono avviate nuove istanze, ad esempio durante uno scaling out, le richieste rimarranno in attesa per almeno il tempo di avvio medio delle istanze di container di questo servizio. Ciò include quando la richiesta avvia uno scale-out, ad esempio quando si esegue lo scale up da zero.
  • Se il tempo di avvio è inferiore a 10 secondi, le richieste rimarranno in attesa per un massimo di 10 secondi.
  • Se non sono in corso l'avvio di istanze e la richiesta non avvia un'operazione di scalabilità, le richieste rimarranno in attesa per un massimo di 10 secondi.

Durante questo intervallo di tempo, se un'istanza termina l'elaborazione delle richieste, diventa disponibile per elaborare le richieste in attesa in coda. Se non vengono rese disponibili istanze durante il periodo di tempo specificato, la richiesta non va a buon fine con un codice di errore 429.

Garanzie di scalabilità

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

In circostanze normali, Cloud Run è in grado di eseguire il ridimensionamento fino al limite massimo di istanze molto rapidamente per gestire tutte le richieste o gli eventi in entrata. Tuttavia, impostare un limite elevato non significa che la revisione potrà eseguire il ridimensionamento fino al numero specificato di istanze in un determinato momento. In circostanze eccezionale, Cloud Run può limitare la scalabilità per garantire un buon servizio per tutti i clienti.

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

In alcuni casi, ad esempio in caso di 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 delle istanze massime. È possibile avviare nuove istanze in eccesso rispetto all'impostazione di istanze massime 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 in condizioni di normale funzionamento alcune volte alla settimana. Il periodo di tolleranza dura in genere fino a 15 minuti o fino al valore specificato nell'impostazione timeout richiesta. Queste istanze aggiuntive vengono distrutte entro 15 minuti dal momento in cui diventano 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 delle istanze sono in genere inferiori al doppio del limite di istanze massime configurato, ma possono essere molto più grandi in caso di picchi di traffico improvvisi di grandi dimensioni.

I test di carico presentano più istanze che superano l'impostazione delle istanze massime perché il sistema può modificare la posizione in cui vengono pubblicati i picchi di traffico per preservare la capacità per i carichi di lavoro esistenti con pattern di carico sostenuti.

Se il tuo servizio non può tollerare questo comportamento temporaneo, ti consigliamo di prendere in considerazione un margine di sicurezza e impostare un valore di istanze massime inferiore.

Suddivisioni del traffico

Poiché il limite di istanze massime è un limite per ogni revisione, se il servizio suddivide il traffico in 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 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. In questo modo si riduce l'impatto dei nuovi implementazioni delle revisioni sulle latenze delle richieste, in particolare quando vengono pubblicati livelli elevati di traffico. Poiché il limite di istanze massime è 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 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 potrebbe mantenere alcune istanze inattive per un massimo di 15 minuti. Queste istanze sono pronte a gestire le richieste in caso di un picco improvviso di traffico.

Ad esempio, quando un'istanza ha terminato di gestire le richieste, potrebbe rimanere inattiva per un determinato periodo di tempo nel caso in cui debba essere gestita un'altra richiesta. Un'istanza inattiva potrebbe mantenere le risorse, ad esempio le connessioni al database aperte. Tieni presente che la CPU viene allocata solo durante l'elaborazione delle richieste, a meno che tu non configuri esplicitamente il servizio in modo che abbia la CPU sempre allocata.

Per mantenere le istanze inattive disponibili permanentemente, utilizza l'impostazione min-instance. Tieni presente che l'utilizzo di questa funzionalità comporterà un costo anche quando il servizio non sta pubblicando attivamente le richieste.

Scalabilità automatica e richieste in attesa

  • Se vengono avviate nuove istanze, ad esempio durante uno scaling out, le richieste rimarranno in attesa per almeno il tempo di avvio medio delle istanze di container di questo servizio. Ciò include quando la richiesta avvia uno scale-out, ad esempio quando si esegue lo scale up da zero.
  • Se il tempo di avvio è inferiore a 10 secondi, le richieste rimarranno in attesa per un massimo di 10 secondi.
  • Se non sono in corso l'avvio di istanze e la richiesta non avvia un'operazione di scalabilità, le richieste rimarranno in attesa per un massimo di 10 secondi.

Impatto della scalabilità automatica sui servizi di supporto

Man mano che il numero di istanze aumenta automaticamente, il servizio Cloud Run potrebbe incontrare limiti con i servizi di supporto. Ad esempio, Cloud SQL ha un limite di quota API. Assicurati che questi servizi di supporto abbiano una quota sufficiente e che possano gestire le connessioni da tutte le istanze del 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 iscrizioni push per consumare i messaggi da un argomento Pub/Sub su Cloud Run. I messaggi push vengono ricevuti come richieste HTTP dal contenitore, attivando così lo stesso comportamento di scalabilità automatica.

Scalabilità automatica e più container (sidecar)

Cloud Run prende in considerazione 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 la CPU viene allocata quando imposti i limiti della CPU a livello di contenitore. Se utilizzi più container per istanza, l'allocazione effettiva della CPU per l'istanza è la somma dei limiti di CPU impostati su ogni container.

Passaggi successivi