Övning – Skala en webbapp manuellt

Slutförd

Du bör skala ut ett system när du förväntar dig ökad trafik. Du kan även skala ut som svar på sänkt prestanda.

I exemplet med hotellbokningssystemet ökar du antalet instanser av webbappen när du förväntar dig extra trafik på grund av en speciell händelse, ett specialerbjudande eller säsongsvariationer. Du skalar då ner systemet när efterfrågan sjunker.

I den här övningen skapar du en App Service-plan och distribuerar en webbapp med hjälp av den här planen. Du övervakar webbappens prestanda under belastning. Skala sedan ut appen och kontrollera att planen förbättrade appens prestanda.

I den här övningen används en exempelwebbapp som implementerar ett webb-API. Webb-API:et exponerar HTTP-åtgärderna POST och GET som skapar och hämtar kundens bokningar för en webbplats för hotellbokningar. Bokningarna sparas inte. GET-åtgärden hämtar helt enkelt dummydata.

I den här övningen körs även en klientapp som simulerar flera användare som skickar POST- och GET-åtgärder samtidigt. Den här appen tillhandahåller den arbetsbelastning som du använder för att testa webbappens prestanda före och efter skalning.

Skapa en App Service-plan och en webbapp

Viktigt!

Du behöver en egen Azure-prenumeration för att utföra den här övningen, och avgifter kan tillkomma. Om du inte redan har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

  1. Logga in på Azure-portalen.

  2. I menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs. Fönstret Skapa en resurs visas.

  3. I det vänstra menyfönstret går du till Kategorier, väljer Webb, söker efter och väljer Webbapp och väljer sedan Skapa. Fönstret Skapa webbapp visas.

  4. På fliken Grundläggande anger du följande värden för varje inställning.

    Kommentar

    Webbappen måste ha ett unikt namn. Vi föreslår att du använder till exempel <ditt namn eller dina initialer>hotelsystem. Använd det här namnet överallt där det står <your-webapp-name> i den här övningen.

    Inställning Värde
    Projektinformation
    Prenumeration Välj den Azure-prenumeration som du vill använda för den här övningen
    Resursgrupp Välj länken Skapa ny och ange en ny resursgrupp med namnet mslearn-scale
    Instansinformation
    Namn Se Anteckning före tabell. Ange ett unikt namn som du kan komma ihåg för senare i den här övningen
    Publicera Kod
    CLR-stack .NET 6 (LTS)
    Operativsystem Windows
    Region Acceptera standard
    App Service-plan
    Windows-plan Acceptera standard
    Prisplan Acceptera standard
  5. Välj Granska + skapa>Skapa. Vänta tills webbappen har skapats och distribuerats.

Skapa och distribuera webbappen

  1. I Aktivitetsfältet i Azure väljer du Cloud Shell-ikonen för att öppna AzureCloud Shell och kör följande kommando för att ladda ned källkoden för hotellets bokningssystem.

    Screenshot of Cloud Shell icon in taskbar.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  2. Gå till mappen mslearn-hotel-reservation-system/src .

    cd mslearn-hotel-reservation-system/src
    
  3. Skapa apparna för hotellsystemet. Det finns två appar: en webbapp som implementerar webb-API:et för systemet och en klientapp som du använder för att läsa in test av webbappen.

    dotnet build
    
  4. Förbered webbappen HotelReservationSystem för publicering.

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Gå till webbplatsmappen som innehåller de publicerade filerna. Komprimera (zippa) filerna och distribuera dem till webbappen som du skapade i föregående uppgift. Kopiera följande kod för att Anteckningar och ersätt <your-webapp-name> med namnet på webbappen och klistra sedan in det redigerade kodblocket i Cloud Shell och kör det.

    cd website
    zip website.zip *
    az webapp deployment source config-zip --src website.zip --name <your-webapp-name> --resource-group mslearn-scale
    
  6. Gå till http://<your-webapp-name>.azurewebsites.net/api/reservations/1 i webbläsaren. Ett JSON-dokument visas som innehåller information om reservationsnummer 1.

    Screenshot of the running web app, showing the details for reservation number 1 in JSON format.

Övervaka prestanda för webbappen före utskalning

  1. Gå tillbaka till Cloud Shell och gå till mappen ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient .

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  2. Redigera filen App.config i den här mappen med hjälp av kodredigeraren.

    code App.config
    
  3. Ta bort kommentaren till raden som anger ReservationsServiceURI, och ersätt värdet DITT WEBBPLATSNAMN med namnet på webbappen. Filen bör se ut som i det här exemplet.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <appSettings>
            <add key="NumClients" value="100" />
            <add key="ReservationsServiceURI" value="https://<your-webapp-name>.azurewebsites.net/" />
            <add key="ReservationsServiceCollection" value="api/reservations" />
        </appSettings>
    </configuration>
    

    Kommentar

    Inställningen NumClients i den här filen anger antalet klienter som samtidigt kan försöka ansluta till webbappen och utföra arbete. Arbetet består av att skapa en reservation och sedan köra en fråga för att hämta information om reservationen. Alla data som används är fiktiva. De sparas ingenstans. Låt det här värdet vara kvar på 100.

  4. Spara filen genom att välja Ctrl+S.

  5. Redigera filen HotelReservationSystemTestClient.csproj i den här mappen med hjälp av kodredigeraren.

    code HotelReservationSystemTestClient.csproj
    
  6. Redigera raden som anger TargetFramework, så att den matchar den Körningsstack som du har valt för webbappen. Ändra värdet TargetFramework till netcoreapp7.0. Filen bör se ut som i det här exemplet.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp7.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
        <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" />
      </ItemGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\HotelReservationSystemTypes\HotelReservationSystemTypes.csproj" />
      </ItemGroup>
    
    </Project>
    
  7. Spara filen genom att välja Ctrl+S och stäng kodredigeraren genom att trycka på Ctrl+Q.

  8. Återskapa testklientappen med den nya konfigurationen.

    dotnet build
    
  9. Kör klientappen. Flera meddelanden visas när klienterna börjar köras, gör reservationer och kör frågor. Låt systemet köras i några minuter. Svaren är långsamma och snart börjar klientbegäranden misslyckas med HTTP 408-fel (timeout).

    dotnet run
    

    Screenshot of a running client app, showing the responses and error messages that occur.

  10. I Azure-portalen väljer du Gå till resurs för att öppna webbappen.

  11. I den vänstra menyrutan väljer du Övervakning och sedan Mått.

  12. Välj tidsintervallet Lokal tid: Senaste 24 timmarna (automatisk) till höger i menyraden i webbappsfönstret, välj sedan Senaste 30 minuterna och välj sedan Använd.

  13. Lägg till följande mått i diagrammet under Diagramrubrik i fönstret:

    • Välj Lägg till mått och under listrutan Mått väljer du CPU-tid. För Sammansättning väljer du Summa.
    • Välj Lägg till mått och under listrutan Mått väljer du Http Server-fel. För Sammansättning väljer du Summa.
    • Välj Lägg till mått och under listrutan Mått väljer du Http 4xx. För Sammansättning väljer du Summa.
    • Välj Lägg till mått och välj Svarstid under listrutan Mått. För Sammansättning väljer du Avg.
  14. I den högra menyraden väljer du Fäst på instrumentpanelen. Fönstret Fäst på instrumentpanelen visas. Välj fliken Skapa ny .

  15. I listrutan Instrumentpanelsnamn anger du webbappens namn och väljer sedan Skapa och fäst.

  16. Låt systemet köras i fem minuter för att stabiliseras och notera sedan CPU-tiden, antalet HTTP 4xx-fel och den genomsnittliga svarstiden. Du bör se ett stort antal HTTP 4xx-fel. Dessa fel är HTTP 408 Timeout-fel. Den genomsnittliga svarstiden är flera sekunder. Det kan förekomma enstaka HTTP-serverfel beroende på hur väl webbservern klarar belastningen.

    Screenshot showing the performance metrics for the web app before scaling out.

  17. Låt klientappen fortsätta köras medan du genomför nästa uppgift.

Skala ut webbappen och verifiera prestandaförbättringen

  1. I Azure-portalen väljer du ditt webbappnamn (App Service) och i det vänstra menyfönstret går du till Inställningar och väljer Skala ut (App Service-plan). Fönstret Skala ut (App Service-plan) visas.

  2. På fliken Konfigurera väljer du Manuell skalning och anger antalet instanser till 5. Välj Spara.

    Screenshot of the Configure page for the App Service plan, scaling out to five instances.

  3. Växla till Cloud Shell som kör klientappen. Du bör se färre begäranden misslyckas med fel, även om vissa fortfarande överskrider tidsgränsen.

  4. Kör appen i ytterligare fem minuter. Gå sedan till diagrammet som visar måtten för appen på instrumentpanelen i Azure-portalen. Du bör se att cpu-tiden ökar dramatiskt eftersom det nu finns fem gånger mer processorkraft tillgänglig. Den genomsnittliga svarstiden bör minska och antalet HTTP 4xx-fel bör också minska. I följande diagram visas en vanlig uppsättning resultat. Punkten där utskalningen skedde är markerad.

    Screenshot showing the performance metrics for the web app after scaling out to five instances.

  5. Om du vill fortsätta experimentera kan du prova att öka instansantalet för App Service-planen till 10. Det maximala antalet instanser som stöds av S1-nivån är 10. Du bör märka ytterligare en ökning av CPU-tiden och en motsvarande minskning i svarstid och HTTP 4xx-fel.

  6. Gå tillbaka till Cloud Shell som kör klientappen. Välj Retur för att stoppa appen.

  7. I Azure-portalen anger du antalet instanser tillbaka till 1. Välj din webbapp och välj Skala ut (App Service-plan) i det vänstra menyfönstret. På fliken Konfigurera anger du antalet instanser till 1 och väljer Spara.