Best practice per i test di carico

I test di carico del servizio Cloud Run ti aiutano a determinare se la scalabilità viene eseguita correttamente durante l'utilizzo in produzione. L'esecuzione di test di carico ti consente anche di identificare i colli di bottiglia che impediscono la scalabilità del servizio.

Test da eseguire prima dei test di carico

Identifica e risolvi i problemi di concorrenza in un ambiente di sviluppo o di test di piccole dimensioni prima di procedere con i test di carico. Misura la contemporaneità dei container prima di eseguire un test di carico e assicurati che il servizio Cloud Run si avvii in modo affidabile.

Concentra i test dei container su piccoli conteggi incrementali nelle esecuzioni con scalabilità manuale. Puoi approssimare la scalabilità manuale in Cloud Run impostando il numero massimo di istanze sul valore che vuoi scalare.

Se hai creato o modificato l'immagine container solo di recente, testala in modo indipendente prima di eseguire un test di carico.

Prima di eseguire un test di carico su larga scala, dovresti anche verificare altri tipi di problemi di prestazioni, come latenza e utilizzo della CPU eccessivi.

Utilizza max instances in modo appropriato

Cloud Run applica un numero massimo di istanze per limitare la scalabilità di un servizio. Il numero massimo predefinito di istanze è 100. Se prevedi che il test di carico superi questo valore predefinito, assicurati di collaborare con il team dedicato all'account di Google e di impostare un nuovo valore massimo. Se non hai ancora un rapporto con un team dedicato all'account, contatta Google Cloud il team di vendita.

Il numero massimo di istanze che puoi selezionare dipende dai tuoi limiti di CPU e limiti di memoria, nonché dalla regione in cui esegui il deployment.

Questi limiti sono gestiti da un limite di quota e possono essere aumentati inviando una richiesta di aumento del limite di quota.

Test di carico nella regione europe-west1

La regione Google Cloud europe-west1offre un limite di quota elevato, pertanto Google consiglia di eseguire i test di carico ineurope-west1. Collabora con il team dedicato all'account e invia una richiesta di assistenza con i dettagli dell'ora e della scala del test se prevedi di avvicinarti ai limiti di quota.

Testa un profilo di utilizzo della CPU e di inizializzazione del servizio appropriato

In uno scenario ideale, esegui il deployment di una versione di test del tuo servizio su Cloud Run e ne esegui il test di carico direttamente. Tuttavia, in alcuni casi, potresti non essere in grado di eseguire il deployment di una versione di test del tuo servizio. Ad esempio, il tuo servizio Cloud Run potrebbe far parte di un ecosistema complesso difficile da replicare in un ambiente di test.

In questi casi, puoi approssimare le prestazioni del tuo servizio simulandolo con un servizio più semplice che ha un utilizzo della CPU e tempi di inizializzazione paragonabili. Il tempo di inizializzazione è particolarmente importante per la scalabilità rapida. Tieni presente che anche i test con elementi troppo semplici sono problematici. Ad esempio, evita di eseguire test con un semplice servizio hello world che restituisce le richieste ricevute senza alcuna elaborazione.

Utilizza un test harness per generare carichi

Puoi generare carichi di test che causano un picco di traffico controllato utilizzando un test harness, come JMeter. Puoi utilizzare il numero di gruppi di thread JMeter e il ritardo tra le richieste nel test JMeter per aumentare il carico.

Puoi anche inviare semplici richieste HTTP o registrare una sessione del browser con JMeter. Cloud Run ti consente di testare il servizio senza accesso a internet utilizzando l'autenticazione dello sviluppatore. In questo modo, è possibile accedere da un test harness come JMeter, in esecuzione su una macchina virtuale Compute Engine collegata a un Virtual Private Cloud (VPC) associato al progetto.

Non generare carico da strumenti in cui la frequenza e la concorrenza non possono essere controllate. Pub/Sub non è uno strumento adatto per generare carico perché non puoi controllare la frequenza del traffico e il numero di client. Se non conosci la frequenza e la contemporaneità, non saprai cosa stai testando.

Utilizza l'analisi dettagliata dei log utilizzando i log esportati

Hai bisogno di un'analisi secondo per secondo degli eventi per comprendere la risposta del tuo servizio Cloud Run ai picchi di traffico rapidi. Per farlo, è necessaria l'analisi dei log, perché la granularità dei dati di monitoraggio non è sufficientemente dettagliata. L'analisi dei log consente inoltre di esaminare i motivi delle richieste con latenza elevata.

Quando scrivi i log, puoi ottenere prestazioni di logging migliori scrivendo direttamente in stdout anziché utilizzare una libreria client di Cloud Logging.

Per configurare un'esportazione dei log prima di iniziare il test, crea un sink di log con BigQuery come destinazione e un filtro di inclusione, ad esempio:

resource.type="cloud_run_revision"
resource.labels.service_name="[your app]"

Evita gli avvii a freddo spuri

Per ridurre al minimo gli avvii completi riscontrati dagli utenti, imposta il numero minimo di istanze su almeno 1.

Assicurati che il tuo servizio faccia lo scale out in modo lineare

Ripeti il test con carichi diversi per assicurarti che il servizio Cloud Run faccia lo scale out in modo lineare con il carico e non raggiunga un collo di bottiglia limitante con un carico inferiore a quello previsto in produzione.

Analizza e visualizza i risultati in Colaboratory

Utilizza i grafici di monitoraggio di riepilogo per comprendere i risultati a livello generale e integrare l'analisi dettagliata dei log utilizzando i log esportati.

I grafici di monitoraggio possono aiutarti a scoprire:

  • Con quale rapidità, al secondo più vicino, vengono create e inizializzate le nuove istanze?
  • In che modo le richieste vengono distribuite in modo uniforme tra le diverse istanze?
  • Con quale rapidità è possibile ridurre la latenza a diversi percentili fino a un valore di stato stabile?

Puoi utilizzare l'interfaccia utente della console Google Cloud per BigQuery per esaminare lo schema dei log esportati e visualizzare l'anteprima dei risultati. Esegui le query e traccia i risultati utilizzando Colab, che è già integrato con BigQuery, Pandas e Matplotlab. Colab si integra facilmente anche con strumenti di visualizzazione di dati dettagliati come Seaborn.

Trova i colli di bottiglia

I test di carico possono aiutarti a scoprire l'esistenza di codice inefficiente e colli di bottiglia della scalabilità. Un codice inefficiente comporta costi più elevati, poiché deve gestire più traffico, ma non impedisce necessariamente la scalabilità. Ad esempio, una dipendenza da una traduzione del database con blocco a livello di tabella può essere un collo di bottiglia che impedisce la scalabilità del servizio Cloud Run perché è possibile eseguire una sola transazione alla volta.

Controlla le prestazioni percepite dal client

Puoi eseguire query sui log acquisiti da JMeter, dove i log includono le latenze misurate sul client. Tuttavia, poiché gli strumenti di test del server come JMeter non sono uguali a un browser o a un client mobile, potresti anche voler eseguire un test con un framework basato su browser, come Selenium Webdriver, o un framework di test del client mobile. Fai attenzione alle latenze massime eccessive dovute all'inizializzazione della connessione TLS, che potrebbero alterare i risultati con valori anomali.

Riepilogo delle best practice

Esegui un test di carico per determinare se la migrazione a Cloud Run è la scelta giusta e se il tuo servizio può scalare fino al traffico massimo previsto. Esegui il test con un harness come JMeter. Esporta i log in BigQuery per un'analisi dettagliata.

Passaggi successivi