Condividi tramite


Esercitazione: eseguire un test di carico per identificare eventuali lacune nelle prestazioni di un'app Web

Questa esercitazione descrive come identificare i colli di bottiglia delle prestazioni in un'applicazione Web usando Test di carico di Azure. Si simula il carico per un'applicazione Web Node.js di esempio e quindi si usa il dashboard di test di carico per analizzare le metriche lato client e lato server.

L'applicazione di esempio è costituita da un'API Web Node.js che interagisce con un database NoSQL. L'API Web viene distribuita in Servizio app di Azure app Web e si usa Azure Cosmos DB come database.

In questa esercitazione si apprenderà come:

  • Distribuire l'app di esempio.
  • Creare ed eseguire un test di carico.
  • Aggiungere componenti dell'app di Azure al test di carico.
  • Identificare i colli di bottiglia delle prestazioni usando il dashboard del test di carico.

Prerequisiti

Controllo dei prerequisiti

Prima di iniziare, convalidare l'ambiente:

Distribuire l'applicazione di esempio

In questa esercitazione viene generato il carico su un'applicazione Web di esempio distribuita in Servizio app di Azure. Usare i comandi dell'interfaccia della riga di comando di Azure, i comandi Git e i comandi di PowerShell per distribuire l'applicazione di esempio nella sottoscrizione di Azure.

  1. Aprire Windows PowerShell, accedere ad Azure e impostare la sottoscrizione:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. Clonare il repository di origine dell'applicazione di esempio:

    git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
    

    L'applicazione di esempio è un'app Node.js costituita da un componente Web Servizio app di Azure e da un database Azure Cosmos DB. Il repository include uno script di PowerShell che distribuisce l'app di esempio nella sottoscrizione di Azure. Include anche uno script Apache JMeter che verrà usato nei passaggi successivi.

  3. Passare alla directory dell'app Node.js e distribuire l'app di esempio usando questo script di PowerShell:

    cd nodejs-appsvc-cosmosdb-bottleneck
    .\deploymentscript.ps1
    

    Suggerimento

    È possibile installare PowerShell in Linux/WSL o macOS.

    Dopo l'installazione, è possibile eseguire il comando precedente come pwsh ./deploymentscript.ps1.

  4. Al prompt specificare:

    • L'ID sottoscrizione di Azure.
    • Nome univoco per l'app Web.
    • Una località. Per impostazione predefinita, il percorso è eastus. È possibile ottenere i codici di area eseguendo il comando Get-AzLocation.

    Importante

    Per il nome dell'app Web, usare solo lettere minuscole e numeri. Non usare spazi o caratteri speciali.

  5. Al termine della distribuzione, passare all'applicazione di esempio in esecuzione aprendo https://<yourappname>.azurewebsites.net in una finestra del browser.

Dopo aver distribuito ed eseguito l'applicazione di esempio, è possibile creare una risorsa di test di carico di Azure e un test di carico.

Creare un test di carico

In questa esercitazione si crea un test di carico con l'interfaccia della riga di comando di Azure caricando uno script di test JMeter (jmx file). Il repository dell'applicazione di esempio contiene già un file di configurazione del test di carico e uno script di test JMeter.

Per creare un test di carico usando il portale di Azure, seguire la procedura descritta in Avvio rapido: creare un test di carico con uno script JMeter.

Seguire questa procedura per creare una risorsa di test di carico di Azure e un test di carico usando l'interfaccia della riga di comando di Azure:

  1. Aprire una finestra del terminale e immettere il comando seguente per accedere alla sottoscrizione di Azure.

    az login
    
  2. Passare alla directory dell'applicazione di esempio.

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. Creare un gruppo di risorse per la risorsa di test di carico di Azure.

    Facoltativamente, è anche possibile riutilizzare il gruppo di risorse dell'applicazione di esempio distribuita in precedenza.

    Sostituire il segnaposto di testo <load-testing-resource-group-name> con il nome del gruppo di risorse.

    resourceGroup="<load-testing-resource-group-name>"
    location="East US"
    
    az group create --name $resourceGroup --location $location
    
  4. Creare una risorsa di test di carico di Azure con il comando az load create.

    Sostituire il segnaposto di testo <load-testing-resource-name> con il nome della risorsa di test di carico.

    # This script requires the following Azure CLI extensions:
    # - load
    
    loadTestResource="<load-testing-resource-name>"
    
    az load create --name $loadTestResource --resource-group $resourceGroup --location $location
    
  5. Creare un test di carico per simulare il carico sull'applicazione di esempio con il comando az load test create.

    Sostituire il segnaposto di testo <web-app-hostname> con il nome host del servizio app dell'applicazione di esempio. Questo valore è nel formato myapp.azurewebsites.net. Non includere la https:// parte dell'URL.

    testId="sample-app-test"
    webappHostname="<web-app-hostname>"
    
    az load test create --test-id $testId --load-test-resource $loadTestResource --resource-group $resourceGroup --load-test-config-file SampleApp.yaml --env webapp=$webappHostname
    

    Questo comando usa il file di configurazione del test di carico Sampleapp.yaml, che fa riferimento allo script di testSampleApp.jmx di JMeter. Usare un parametro della riga di comando per passare il nome host dell'applicazione di esempio al test di carico.

Sono ora disponibili una risorsa di test di carico di Azure e un test di carico per generare il carico sull'applicazione Web di esempio nella sottoscrizione di Azure.

Aggiungere componenti dell'app di Azure per monitorare l'applicazione

Test di carico di Azure consente di monitorare le metriche delle risorse per i componenti di Azure dell'applicazione. Analizzando queste metriche lato server, è possibile identificare i problemi di prestazioni e stabilità nell'applicazione direttamente dal dashboard di Test di carico di Azure.

In questa esercitazione si aggiungono i componenti di Azure per l'applicazione di esempio distribuita in Azure, ad esempio il servizio app, Cosmos DB account e altro ancora.

Per aggiungere i componenti dell'app di Azure per l'applicazione di esempio al test di carico:

  1. Nel portale di Azure, passare alla risorsa Test di carico di Azure.

  2. Nel riquadro sinistro selezionare Test per visualizzare l'elenco dei test di carico

  3. Selezionare la casella di controllo accanto al test di carico e quindi selezionare Modifica.

    Screenshot che mostra l'elenco dei test di carico nel portale di Azure, che evidenzia come selezionare un test dall'elenco e il pulsante Modifica per modificare la configurazione del test di carico.

  4. Passare alla scheda Monitoraggio e quindi selezionare Aggiungi/Modifica.

  5. Selezionare le caselle di controllo per l'applicazione di esempio distribuita in precedenza e quindi selezionare Applica.

    Screenshot che mostra come aggiungere componenti dell'app a un test di carico nel portale di Azure.

    Suggerimento

    È possibile usare il filtro del gruppo di risorse per visualizzare solo le risorse di Azure nel gruppo di risorse dell'applicazione di esempio.

  6. Selezionare Applica per salvare le modifiche alla configurazione del test di carico.

I componenti dell'app di Azure per l'applicazione di esempio sono stati aggiunti al test di carico per abilitare il monitoraggio delle metriche sul lato server durante l'esecuzione del test di carico.

Eseguire il test di carico

È ora possibile eseguire il test di carico per simulare il carico sull'applicazione di esempio distribuita nella sottoscrizione di Azure. In questa esercitazione viene eseguito il test di carico dall'interno del portale di Azure. In alternativa, è possibile configurare il flusso di lavoro CI/CD per eseguire il test di carico.

Per eseguire il test di carico nel portale di Azure:

  1. Nel portale di Azure, passare alla risorsa Test di carico di Azure.

  2. Nel riquadro sinistro selezionare Test per visualizzare l'elenco dei test di carico

  3. Selezionare il test di carico dall'elenco per visualizzare i dettagli del test e l'elenco delle esecuzioni dei test.

  4. Selezionare Esegui, quindi Esegui di nuovo per avviare il test di carico.

    Facoltativamente, è possibile immettere una descrizione dell'esecuzione dei test.

    Screenshot che mostra come avviare un test di carico nel portale di Azure.

    Quando si esegue un test di carico, Test di carico di Azure distribuisce lo script di test JMeter ed eventuali file aggiuntivi nelle istanze del motore di test e quindi avvia il test di carico.

  5. All'avvio del test di carico, verrà visualizzato il dashboard del test di carico.

    Se il dashboard non viene visualizzato, è possibile selezionare Aggiorna in e quindi selezionare l'esecuzione dei test dall'elenco.

    Il dashboard del test di carico presenta i dettagli dell'esecuzione dei test, ad esempio le metriche lato client e le metriche dell'applicazione lato server. I grafici nel dashboard vengono aggiornati automaticamente.

    Screenshot che mostra i grafici delle metriche lato client nel dashboard del test di carico nel portale di Azure.

    È possibile applicare più filtri o aggregare i risultati a diversi percentili per personalizzare i grafici.

    Suggerimento

    È possibile arrestare un test di carico in qualsiasi momento dal portale di Azure selezionando Arresta.

Attendere il completamento completo del test di carico prima di procedere alla sezione successiva.

Usare le metriche lato server per identificare i colli di bottiglia delle prestazioni

In questa sezione vengono analizzati i risultati del test di carico per identificare i colli di bottiglia delle prestazioni nell'applicazione. Esaminare le metriche lato client e lato server per determinare la causa radice del problema.

  1. Prima di tutto, esaminare le metriche lato client. Si noti che il 90° percentile per la metrica del tempo di risposta per le richieste API add e get è superiore a quello per l'API lasttimestamp.

    Screenshot che mostra le metriche lato client.

    È possibile visualizzare un modello simile per gli errori, in cui l'API lasttimestamp ha meno errori rispetto alle altre API.

    Screenshot che mostra il grafico degli errori.

    I risultati delle API add e get sono simili, mentre l'API lasttimestamp si comporta in modo diverso. La causa potrebbe essere correlata al database, perché entrambe le API add e get implicano l'accesso al database.

  2. Per analizzare questo collo di bottiglia in modo più dettagliato, scorrere verso il basso fino alla sezione del dashboard delle metriche lato server.

    Le metriche lato server mostrano informazioni dettagliate sui componenti dell'applicazione Azure: piano Servizio app di Azure, app Web Servizio app di Azure e Azure Cosmos DB.

    Screenshot che mostra le metriche del piano di Servizio app di Azure.

    Nelle metriche per il piano di Servizio app di Azure è possibile notare che le metriche Percentuale CPU e Percentuale memoria rientrano in un intervallo accettabile.

  3. Esaminare ora le metriche lato server Azure Cosmos DB.

    Screenshot che mostra Azure Cosmos DB metriche.

    Si noti che la metrica Consumo UR normalizzato indica che il database è stato rapidamente eseguito con un utilizzo delle risorse pari al 100%. L'utilizzo elevato delle risorse potrebbe causare errori di limitazione del database. Potrebbe anche aumentare i tempi di risposta per le API Web add e get.

    È anche possibile notare che la metrica della velocità effettiva con provisioning per l'istanza di Azure Cosmos DB ha una velocità effettiva massima di 400 UR. L'aumento della velocità effettiva con provisioning del database potrebbe risolvere il problema di prestazioni.

Aumentare la velocità effettiva del database

In questa sezione vengono allocate più risorse al database per risolvere il collo di bottiglia delle prestazioni.

Per Azure Cosmos DB, aumentare l'impostazione di scalabilità delle UR del database:

  1. Passare alla risorsa Azure Cosmos DB di cui è stato effettuato il provisioning come parte della distribuzione dell'applicazione di esempio.

  2. Selezionare la scheda Esplora dati.

    Screenshot che mostra Esplora dati scheda.

  3. Selezionare Scala e impostazioni e aggiornare il valore della velocità effettiva a 1200.

    Screenshot che mostra le impostazioni di scalabilità Azure Cosmos DB aggiornate.

  4. Selezionare Salva per confermare le modifiche.

Convalidare i miglioramenti delle prestazioni

Dopo aver aumentato la velocità effettiva del database, eseguire nuovamente il test di carico e verificare che i risultati delle prestazioni migliorino:

  1. Nel dashboard dell'esecuzione dei test selezionare Riesegui e quindi Riesegui nel riquadro Riesegui test.

    Screenshot che mostra le selezioni per l'esecuzione del test di carico.

    È possibile visualizzare una nuova voce di esecuzione dei test con una colonna di stato che scorre gli stati Provisioning, Esecuzione e Completato. In qualsiasi momento, selezionare l'esecuzione dei test per monitorare l'avanzamento del test di carico.

  2. Al termine del test di carico, controllare i risultati del tempo di risposta e i risultati degli errori delle metriche lato client.

  3. Controllare le metriche lato server per Azure Cosmos DB e assicurarsi che le prestazioni siano migliorate.

    Screenshot che mostra il Azure Cosmos DB metriche lato client dopo l'aggiornamento delle impostazioni di scalabilità.

    Il valore consumo UR normalizzato di Azure Cosmos DB è ora molto inferiore al 100%.

Dopo aver aggiornato le impostazioni di scalabilità del database, è possibile osservare quanto segue:

  • Il tempo di risposta per le API add e get è stato migliorato.
  • Il consumo di UR normalizzato rimane ben al di sotto del limite.

Di conseguenza, le prestazioni complessive dell'applicazione sono migliorate.

Pulire le risorse

Importante

È possibile riutilizzare la risorsa di Test di carico di Azure creata per altre esercitazioni su Test di carico di Azure e articoli sulle procedure.

Se le risorse create non servono più, eliminarle per evitare ulteriori addebiti. Se l'applicazione di esempio è stata distribuita in un gruppo di risorse diverso, è possibile ripetere i passaggi seguenti.

Per eliminare le risorse usando il portale di Azure:

  1. Selezionare il pulsante del menu nell'angolo superiore sinistro del portale e quindi selezionare Gruppi di risorse.

  2. Nell'elenco selezionare il gruppo di risorse creato.

  3. Selezionare Elimina gruppo di risorse. Screenshot delle opzioni da selezionare per eliminare un gruppo di risorse nel portale di Azure.

  4. Immettere il nome del gruppo di risorse. Quindi seleziona Elimina.

Per eliminare le risorse usando l'interfaccia della riga di comando di Azure, immettere il comando seguente:

az group delete --name <yourresourcegroup>

Ricordare che l'eliminazione del gruppo di risorse comporta l'eliminazione di tutte le risorse al suo interno.