Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
- Un account Azure con una sottoscrizione attiva. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- L'interfaccia della riga di comando di Azure installata nel computer locale.
- Interfaccia della riga di comando di Azure 2.2.0 o versione successiva. Eseguire
az --versionper trovare la versione installata nel computer. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Come installare l'interfaccia della riga di comando di Azure. - Visual Studio Code. Se non è disponibile, scaricarla e installarla.
- Git. Se non è disponibile, scaricarla e installarla.
Controllo dei prerequisiti
Prima di iniziare, convalidare l'ambiente:
Accedere al portale di Azure e verificare che la sottoscrizione sia attiva.
Controllare la versione dell'interfaccia della riga di comando di Azure in una finestra terminale o di comando eseguendo
az --version. Per la versione più recente, vedere le ultime note sulla versione.Se non si dispone della versione più recente, aggiornare l'installazione seguendo la guida all'installazione per il sistema operativo o la piattaforma in uso.
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.
Aprire Windows PowerShell, accedere ad Azure e impostare la sottoscrizione:
az login az account set --subscription <your-Azure-Subscription-ID>Clonare il repository di origine dell'applicazione di esempio:
git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.gitL'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.
Passare alla directory dell'app Node.js e distribuire l'app di esempio usando questo script di PowerShell:
cd nodejs-appsvc-cosmosdb-bottleneck .\deploymentscript.ps1Al 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.
Al termine della distribuzione, passare all'applicazione di esempio in esecuzione aprendo
https://<yourappname>.azurewebsites.netin 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:
Aprire una finestra del terminale e immettere il comando seguente per accedere alla sottoscrizione di Azure.
az loginPassare alla directory dell'applicazione di esempio.
cd nodejs-appsvc-cosmosdb-bottleneckCreare 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 $locationCreare 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 $locationCreare 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 formatomyapp.azurewebsites.net. Non includere lahttps://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=$webappHostnameQuesto comando usa il file di configurazione del test di carico
Sampleapp.yaml, che fa riferimento allo script di testSampleApp.jmxdi 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:
Nel portale di Azure, passare alla risorsa Test di carico di Azure.
Nel riquadro sinistro selezionare Test per visualizzare l'elenco dei test di carico
Selezionare la casella di controllo accanto al test di carico e quindi selezionare Modifica.
Passare alla scheda Monitoraggio e quindi selezionare Aggiungi/Modifica.
Selezionare le caselle di controllo per l'applicazione di esempio distribuita in precedenza e quindi selezionare Applica.
Suggerimento
È possibile usare il filtro del gruppo di risorse per visualizzare solo le risorse di Azure nel gruppo di risorse dell'applicazione di esempio.
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:
Nel portale di Azure, passare alla risorsa Test di carico di Azure.
Nel riquadro sinistro selezionare Test per visualizzare l'elenco dei test di carico
Selezionare il test di carico dall'elenco per visualizzare i dettagli del test e l'elenco delle esecuzioni dei test.
Selezionare Esegui, quindi Esegui di nuovo per avviare il test di carico.
Facoltativamente, è possibile immettere una descrizione dell'esecuzione dei test.
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.
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.
È 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.
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
addegetè superiore a quello per l'APIlasttimestamp.
È possibile visualizzare un modello simile per gli errori, in cui l'API
lasttimestampha meno errori rispetto alle altre API.
I risultati delle API
addegetsono simili, mentre l'APIlasttimestampsi comporta in modo diverso. La causa potrebbe essere correlata al database, perché entrambe le APIaddegetimplicano l'accesso al database.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.
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.
Esaminare ora le metriche lato server Azure Cosmos DB.
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
addeget.È 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:
Passare alla risorsa Azure Cosmos DB di cui è stato effettuato il provisioning come parte della distribuzione dell'applicazione di esempio.
Selezionare la scheda Esplora dati.
Selezionare Scala e impostazioni e aggiornare il valore della velocità effettiva a 1200.
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:
Nel dashboard dell'esecuzione dei test selezionare Riesegui e quindi Riesegui nel riquadro Riesegui test.
È 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.
Al termine del test di carico, controllare i risultati del tempo di risposta e i risultati degli errori delle metriche lato client.
Controllare le metriche lato server per Azure Cosmos DB e assicurarsi che le prestazioni siano migliorate.
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
addegetè 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:
Selezionare il pulsante del menu nell'angolo superiore sinistro del portale e quindi selezionare Gruppi di risorse.
Nell'elenco selezionare il gruppo di risorse creato.
Selezionare Elimina gruppo di risorse.
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.
Contenuti correlati
- Ottenere altri dettagli su come diagnosticare i test non superati
- Monitorare le metriche lato server per identificare i colli di bottiglia delle prestazioni nell'applicazione
- Definire i criteri di errore del test di carico per convalidare i risultati dei test in base ai requisiti del servizio
- Altre informazioni sui concetti chiave di Test di carico di Azure.