Självstudie: Kör ett belastningstest för att identifiera flaskhalsar i prestanda i en webbapp

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

Kravkontroll

Innan du börjar verifierar du din miljö:

  • 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.

    Om du inte har den senaste versionen uppdaterar du installationen genom att följa installationsguiden för ditt operativsystem eller din plattform.

Distribuera exempelprogrammet

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.

  1. Öppna Windows PowerShell, logga in på Azure och ange prenumerationen:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. Klona exempelprogrammets källdatabas:

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

    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.

  3. 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
    

    Dricks

    Du kan installera PowerShell på Linux/WSL eller macOS.

    När du har installerat det kan du köra föregående kommando som pwsh ./deploymentscript.ps1.

  4. Ange följande i kommandotolken:

    • ditt prenumerations-ID för Azure
    • Ett unikt namn för webbappen.
    • En plats. Som standard är eastusplatsen . Du kan hämta regionkoder genom att köra kommandot Get-AzLocation .

    Viktigt!

    Använd endast gemener och siffror för webbappens namn. Använd inte blanksteg eller specialtecken.

  5. 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.

Om du vill skapa ett belastningstest med hjälp av Azure-portalen följer du stegen i Snabbstart: skapa ett belastningstest med ett JMeter-skript.

Följ de här stegen för att skapa en Azure-belastningstestningsresurs och ett belastningstest med hjälp av Azure CLI:

  1. Öppna ett terminalfönster och ange följande kommando för att logga in på din Azure-prenumeration.

    az login
    
  2. Gå till exempelprogramkatalogen.

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. 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
    
  4. 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
    
  5. 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:

  1. I Azure-portalen går du till din Azure-belastningstestningsresurs.

  2. I den vänstra rutan väljer du Tester för att visa listan över belastningstester

  3. Markera kryssrutan bredvid belastningstestet och välj sedan Redigera.

    Screenshot that shows the list of load tests in the Azure portal, highlighting how to select a test from the list and the Edit button to modify the load test configuration.

  4. Gå till fliken Övervakning och välj sedan Lägg till/ändra.

  5. Markera kryssrutorna för exempelprogrammet som du distribuerade tidigare och välj sedan Använd.

    Screenshot that shows how to add app components to a load test in the Azure portal.

    Dricks

    Du kan använda resursgruppfiltret för att endast visa Azure-resurserna i exempelprogrammets resursgrupp.

  6. 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:

  1. I Azure-portalen går du till din Azure-belastningstestningsresurs.

  2. I den vänstra rutan väljer du Tester för att visa listan över belastningstester

  3. Välj belastningstestet i listan för att visa testinformationen och listan över testkörningar.

  4. Välj Kör och sedan Kör igen för att starta belastningstestet.

    Du kan också ange en beskrivning av testkörningen.

    Screenshot that shows how to start a load test in the Azure portal.

    När du kör ett belastningstest distribuerar Azure Load Testing JMeter-testskriptet och eventuella extra filer till testmotorinstanserna och startar sedan belastningstestet.

  5. 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.

    Screenshot that shows the client-side metrics graphs in the load test dashboard in the Azure portal.

    Du kan använda flera filter eller aggregera resultatet till olika percentiler för att anpassa diagrammen.

    Dricks

    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.

  1. 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.

    Screenshot that shows the client-side metrics.

    Du kan se ett liknande mönster för Fel, där API:et lasttimestamp har färre fel än de andra API:erna.

    Screenshot that shows the error chart.

    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.

  2. Om du vill undersöka den här flaskhalsen mer i detalj rullar du ned till instrumentpanelen för måttserversidan.

    Måtten på serversidan visar detaljerad information om dina Azure-programkomponenter: Azure App Service-plan, Azure App Service-webbapp och Azure Cosmos DB.

    Screenshot that shows the Azure App Service plan metrics.

    I måtten för Azure App Service-planen kan du se att måtten CPU-procent och minnesprocent ligger inom ett acceptabelt intervall.

  3. Titta nu på måtten på Serversidan i Azure Cosmos DB.

    Screenshot that shows Azure Cosmos DB metrics.

    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:

  1. Gå till den Azure Cosmos DB-resurs som du etablerade som en del av exempelprogramdistributionen.

  2. Välj fliken Datautforskaren .

    Screenshot that shows Data Explorer tab.

  3. Välj Skala och Inställningar och uppdatera dataflödesvärdet till 1200.

    Screenshot that shows the updated Azure Cosmos DB scale settings.

  4. 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:

  1. På testkörningsinstrumentpanelen väljer du Kör igen och väljer sedan Kör igen i testfönstret Kör om.

    Screenshot that shows selections for running the load test.

    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.

  2. När belastningstestet har slutförts kontrollerar du svarstidsresultatenoch felresultaten för måtten på klientsidan.

  3. Kontrollera måtten på serversidan för Azure Cosmos DB och se till att prestandan har förbättrats.

    Screenshot that shows the Azure Cosmos DB client-side metrics after update of the scale settings.

    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:

  1. Välj menyknappen i det övre vänstra hörnet och välj sedan Resursgrupper.

  2. I listan väljer du den resursgrupp som du skapade.

  3. Välj Ta bort resursgrupp. Screenshot of the selections to delete a resource group in the Azure portal.

  4. 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.