Självstudie: Kör ett belastningstest för att identifiera flaskhalsar i prestanda i en webbapp
Artikel
I den här självstudien lär du dig att identifiera flaskhalsar i prestanda i ett webbprogram med hjälp av Azure Load Testing. Du simulerar belastningen för ett node.js-exempelwebbprogram och använder sedan instrumentpanelen för belastningstest för att analysera mått på klientsidan och serversidan.
Exempelprogrammet består av ett Node.js-webb-API som interagerar med en NoSQL-databas. Du distribuerar webb-API:et till Azure App Service-webbappar och använder Azure Cosmos DB som databas.
I den här självstudien lär du dig att:
Distribuera exempelappen.
Skapa och kör ett belastningstest.
Lägg till Azure-appkomponenter i belastningstestet.
Identifiera flaskhalsar för prestanda med hjälp av instrumentpanelen för belastningstest.
Förutsättningar
Ett Azure-konto med en aktiv prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Azure CLI version 2.2.0 eller senare. Kör az --version för att hitta den version som är installerad på datorn. Om du behöver installera eller uppgradera Azure CLI kan du läsa Installera Azure CLI.
Logga in på Azure-portalen och kontrollera att din prenumeration är aktiv.
Kontrollera din version av Azure CLI i en terminal eller ett kommandofönster genom att köra az --version. Den senaste versionen finns i de senaste viktig information.
I den här självstudien genererar du belastning mot ett exempelwebbprogram som du distribuerar till Azure App Service. Använd Azure CLI-kommandon, Git-kommandon och PowerShell-kommandon för att distribuera exempelprogrammet i din Azure-prenumeration.
Öppna Windows PowerShell, logga in på Azure och ange prenumerationen:
az login
az account set --subscription <your-Azure-Subscription-ID>
Exempelprogrammet är en Node.js-app som består av en Azure App Service-webbkomponent och en Azure Cosmos DB-databas. Lagringsplatsen innehåller ett PowerShell-skript som distribuerar exempelappen till din Azure-prenumeration. Det har också ett Apache JMeter-skript som du använder i senare steg.
Gå till node.js-appens katalog och distribuera exempelappen med hjälp av det här PowerShell-skriptet:
cd nodejs-appsvc-cosmosdb-bottleneck
.\deploymentscript.ps1
Använd endast gemener och siffror för webbappens namn. Använd inte blanksteg eller specialtecken.
När distributionen är klar går du till exempelprogrammet som körs genom att öppna https://<yourappname>.azurewebsites.net i ett webbläsarfönster.
Nu när du har distribuerat och kört exempelprogrammet kan du skapa en Azure-belastningstestningsresurs och ett belastningstest.
Skapa ett belastningstest
I den här självstudien skapar du ett belastningstest med Azure CLI genom att ladda upp ett JMeter-testskript (jmx fil). Exempelprogrammets lagringsplats innehåller redan en konfigurationsfil för belastningstest och JMeter-testskript.
Följ de här stegen för att skapa en Azure-belastningstestningsresurs och ett belastningstest med hjälp av Azure CLI:
Öppna ett terminalfönster och ange följande kommando för att logga in på din Azure-prenumeration.
az login
Gå till exempelprogramkatalogen.
cd nodejs-appsvc-cosmosdb-bottleneck
Skapa en resursgrupp för Azure-belastningstestningsresursen.
Du kan också återanvända resursgruppen för exempelprogrammet som du distribuerade tidigare.
<load-testing-resource-group-name> Ersätt textplatshållaren med namnet på resursgruppen.
resourceGroup="<load-testing-resource-group-name>"
location="East US"
az group create --name $resourceGroup --location $location
Skapa en Azure-belastningstestningsresurs med az load create kommandot .
<load-testing-resource-name> Ersätt textplatshållaren med namnet på belastningstestningsresursen.
# This script requires the following Azure CLI extensions:
# - load
loadTestResource="<load-testing-resource-name>"
az load create --name $loadTestResource --resource-group $resourceGroup --location $location
Skapa ett belastningstest för att simulera belastningen mot exempelprogrammet med az load test create kommandot .
<web-app-hostname> Ersätt textplatshållaren med App Service-värdnamnet för exempelprogrammet. Det här värdet är av formuläret myapp.azurewebsites.net. Ta inte med delen https:// av URL:en.
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
Det här kommandot använder konfigurationsfilen Sampleapp.yaml för belastningstest, som refererar till SampleApp.jmx JMeter-testskriptet. Du använder en kommandoradsparameter för att skicka exempelprogrammets värdnamn till belastningstestet.
Nu har du en Azure-belastningstestningsresurs och ett belastningstest för att generera belastning mot exempelwebbprogrammet i din Azure-prenumeration.
Lägga till Azure-appkomponenter för att övervaka programmet
Med Azure Load Testing kan du övervaka resursmått för Azure-komponenterna i ditt program. Genom att analysera dessa mått på serversidan kan du identifiera prestanda- och stabilitetsproblem i ditt program direkt från Instrumentpanelen för Azure Load Testing.
I den här självstudien lägger du till Azure-komponenterna för exempelprogrammet som du distribuerade i Azure, till exempel apptjänsten, Cosmos DB-kontot med mera.
Så här lägger du till Azure-appkomponenterna för exempelprogrammet i belastningstestet:
I Azure-portalen går du till din Azure-belastningstestningsresurs.
I den vänstra rutan väljer du Tester för att visa listan över belastningstester
Markera kryssrutan bredvid belastningstestet och välj sedan Redigera.
Gå till fliken Övervakning och välj sedan Lägg till/ändra.
Markera kryssrutorna för exempelprogrammet som du distribuerade tidigare och välj sedan Använd.
Tips
Du kan använda resursgruppfiltret för att endast visa Azure-resurserna i exempelprogrammets resursgrupp.
Välj Använd för att spara ändringarna i belastningstestkonfigurationen.
Du har lagt till Azure-appkomponenterna för exempelprogrammet i belastningstestet för att aktivera övervakning av mått på serversidan medan belastningstestet körs.
Kör belastningstestet
Nu kan du köra belastningstestet för att simulera belastningen mot exempelprogrammet som du distribuerade i din Azure-prenumeration. I den här självstudien kör du belastningstestet från Azure-portalen. Alternativt kan du konfigurera ditt CI/CD-arbetsflöde för att köra belastningstestet.
Så här kör du belastningstestet i Azure-portalen:
I Azure-portalen går du till din Azure-belastningstestningsresurs.
I den vänstra rutan väljer du Tester för att visa listan över belastningstester
Välj belastningstestet i listan för att visa testinformationen och listan över testkörningar.
Välj Kör och sedan Kör igen för att starta belastningstestet.
Du kan också ange en beskrivning av testkörningen.
När du kör ett belastningstest distribuerar Azure Load Testing JMeter-testskriptet och eventuella extra filer till testmotorinstanserna och startar sedan belastningstestet.
När belastningstestet startar bör du se instrumentpanelen för belastningstestet.
Om instrumentpanelen inte visas kan du välja Uppdatera på och sedan välja testkörningen i listan.
Instrumentpanelen för belastningstest visar testkörningsinformationen, till exempel mått på klientsidan och programmått på serversidan. Diagram på instrumentpanelen uppdateras automatiskt.
Du kan använda flera filter eller aggregera resultatet till olika percentiler för att anpassa diagrammen.
Tips
Du kan när som helst stoppa ett belastningstest från Azure-portalen genom att välja Stoppa.
Vänta tills belastningstestet har slutförts helt innan du fortsätter till nästa avsnitt.
Använda mått på serversidan för att identifiera flaskhalsar i prestanda
I det här avsnittet analyserar du resultatet av belastningstestet för att identifiera prestandaflaskhalsar i programmet. Granska både måtten på klientsidan och serversidan för att fastställa rotorsaken till problemet.
Titta först på måtten på klientsidan. Du märker att den 90:e percentilen för måttet Svarstid för add api-begäranden och get är högre än för API:etlasttimestamp.
Du kan se ett liknande mönster för Fel, där API:et lasttimestamp har färre fel än de andra API:erna.
Resultatet av API:erna add och get är liknande, medan API:et lasttimestamp beter sig annorlunda. Orsaken kan vara databasrelaterad, eftersom både API:erna add och get omfattar databasåtkomst.
Om du vill undersöka den här flaskhalsen mer i detalj rullar du ned till instrumentpanelen för mått på serversidan.
Måtten på serversidan visar detaljerad information om dina Azure-programkomponenter: Azure App Service-plan, Azure App Service-webbapp och Azure Cosmos DB.
I måtten för Azure App Service-planen kan du se att måtten CPU-procent och minnesprocent ligger inom ett acceptabelt intervall.
Titta nu på måtten på Serversidan i Azure Cosmos DB.
Observera att måttet Normaliserad RU-förbrukning visar att databasen snabbt kördes med 100 % resursanvändning. Den höga resursanvändningen kan orsaka databasbegränsningsfel. Det kan också öka svarstiderna för webb-API:erna add och get .
Du kan också se att måttet Etablerat dataflöde för Azure Cosmos DB-instansen har ett maximalt dataflöde på 400 RU:er. Att öka databasens etablerade dataflöde kan lösa prestandaproblemet.
Öka databasens dataflöde
I det här avsnittet allokerar du fler resurser till databasen för att lösa flaskhalsen för prestanda.
Öka ru-skalningsinställningen för databasen för Azure Cosmos DB:
Gå till den Azure Cosmos DB-resurs som du etablerade som en del av exempelprogramdistributionen.
Välj fliken Datautforskaren .
Välj Skala och Inställningar och uppdatera dataflödesvärdet till 1200.
Bekräfta ändringarna genom att välja Spara .
Verifiera prestandaförbättringarna
Nu när du har ökat databasens dataflöde kör du belastningstestet igen och kontrollerar att prestandaresultatet har förbättrats:
På testkörningsinstrumentpanelen väljer du Kör igen och väljer sedan Kör igen i testfönstret Kör om.
Du kan se en ny testkörningspost med en statuskolumn som växlar genom tillstånden Etablering, Körning och Klar . När som helst väljer du testkörningen för att övervaka hur belastningstestet fortskrider.
När belastningstestet har slutförts kontrollerar du svarstidsresultatenoch felresultaten för måtten på klientsidan.
Kontrollera måtten på serversidan för Azure Cosmos DB och se till att prestandan har förbättrats.
Värdet för normaliserad RU-förbrukning i Azure Cosmos DB är nu långt under 100 %.
Nu när du har uppdaterat skalningsinställningarna för databasen kan du se följande:
Svarstiden för API:erna add och get har förbättrats.
Den normaliserade RU-förbrukningen ligger fortfarande långt under gränsen.
Därför förbättrades programmets övergripande prestanda.
Rensa resurser
Viktigt
Du kan återanvända den Azure Load Testing-resurs som du skapade för andra Azure Load Testing-självstudier och instruktionsartiklar.
Om du inte planerar att använda någon av de resurser som du har skapat tar du bort dem så att du inte debiteras ytterligare avgifter. Om du har distribuerat exempelprogrammet i en annan resursgrupp kanske du vill upprepa följande steg.
Så här tar du bort resurser med hjälp av Azure-portalen:
Välj menyknappen i det övre vänstra hörnet och välj sedan Resursgrupper.
I listan väljer du den resursgrupp som du skapade.
Välj Ta bort resursgrupp.
Ange resursgruppsnamnet. Välj sedan ta bort.
Om du vill ta bort resurser med hjälp av Azure CLI anger du följande kommando:
az group delete --name <yourresourcegroup>
Kom ihåg att om du tar bort resursgruppen tas alla resurser i den bort.
Lär dig hur du optimerar programprestanda genom att simulera verkliga belastningar med Azure Load Testing-tjänsten. Lär dig hur du automatiserar belastningstestning med GitHub Actions för att säkerställa konsekvent programprestanda och skalbarhet.