Övning – Autoskala och övervaka en webbapp

Slutförd

Autoskalning är en viktig del av att säkerställa fortsatt tillgänglighet och responsivitet för ett system.

Du vill implementera autoskalning för webbappen för hotellets bokningssystem baserat på värdens CPU-användning. När processoranvändningen ökar över ett visst tröskelvärde vill du att webbappen ska skalas ut. Om processoranvändningen minskar vill du att webbappen ska skalas in igen.

I den här lektionen konfigurerar du webbappen och kör en testklientapp som belastar webbappen. Du ser de typer av fel som kan uppstå när webbvärden blir överbelastad. Därefter konfigurerar du automatisk skalning för webbappen och kör testklienten igen. Du övervakar de autoskalningshändelser som inträffar och undersöker hur systemet svarar på arbetsbelastningen.

Ställ in

Webbappen för hotellets bokningssystem implementerar ett webb-API. Webb-API:et exponerar HTTP POST- och GET-åtgärder som skapar och hämtar kundbokningar. I den här övningen sparas inte bokningarna, och GET-åtgärden hämtar helt enkelt dummydata.

Övningen kör också en klientapp som simulerar många användare som utfärdar POST- och GET-åtgärder samtidigt. Den här klientappen tillhandahåller arbetsbelastningen för att testa hur webbappen skalar automatiskt.

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

  2. Från Azure-portal menyn, välj skapa en resurs.

  3. I det vänstra menyfönstret väljer du Webb och söker sedan efter och väljer Webbapp. Panelen Webbapp visas.

  4. Välj Skapa. Panelen Skapa webbapp visas.

  5. 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 <namnet-på-din-webbapp> 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 i dialogrutan Namn anger du mslearn-autoscale
    Instansinformation
    Name <namnet-på-din-webbapp>
    Publicera Kod
    CLR-stack .NET Core 3.1 (LTS)
    Operativsystem Windows
    Region Välj en region nära dig
  6. Välj Granska + skapa och välj sedan Skapa.

  7. Öppna Cloud Shell (första ikonen i raden med menyval) i den övre högra menyraden i Azure-portalen.

  8. Om du vill ladda ned källkoden för hotellbokningssystemet kör du följande kommando.

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

    cd mslearn-hotel-reservation-system/src
    
  10. Skapa apparna för hotellsystemet. De två apparna är (1) en webbapp som implementerar webb-API:et för systemet och (2) en klientapp som du använder för belastningstestning av webbappen.

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

    cd HotelReservationSystem
    dotnet publish -o website
    
  12. Gå till webbplatsmappen som innehåller de publicerade filerna, zippa upp filerna och distribuera filerna till webbappen som du skapade i föregående uppgift. Byt ut <your-webapp-name> mot namnet på din webbapp.

    cd website
    zip website.zip *
    az webapp deployment source config-zip --src website.zip --name <your-webapp-name> --resource-group mslearn-autoscale
    

Testa webbappen innan du konfigurerar autoskalning

  1. Via en webbläsare går du till https://<your-webapp-name>.azurewebsites.net/api/reservations/1. När den här URL:en besöks skickas en GET-begäran till webb-API:et som hämtar uppgifterna för bokningsnummer 1. Du bör se ett resultat som liknar nedanstående. Svaret innehåller ett JSON-dokument med uppgifter om bokningen. Kom ihåg att bilden visar fiktiva data.

    Skärmbild av en webbläsare som skickar en webb-API-begäran till webbappen för hotellets bokningssystem.

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

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  3. I Cloud Shell väljer du kodredigeraren (ikon med klammerparenteser) och redigerar filen App.config i den här mappen.

    code App.config
    
  4. Avkommentera den rad som anger ReservationsServiceURI, och ersätt värdet med URL:en för din webbapp. Filen bör se ut som det exempel som följer.

    <?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>
    

    Inställningen NumClients i den här filen anger antalet samtidiga klienter som försöker 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 en reservation. Alla data som används är fiktiva och sparas inte någonstans. Låt värdet NumClients vara inställt på 100.

  5. Spara filen genom att välja ellipsen (...) i det övre högra hörnet i redigeraren.

  6. I Cloud Shell redigerar du filen HotelReservationSystemTestClient.csproj i den här mappen.

    code HotelReservationSystemTestClient.csproj
    
  7. Redigera raden som anger TargetFramework så att den matchar den Runtime-stack som du har valt för webbappen. Ändra TargetFramework-värdet till netcoreapp3.1. Filen bör se ut som i följande exempel.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</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>
    
  8. Spara filen genom att välja ellipsen (...) i det övre högra hörnet i redigeraren och stäng sedan kodredigeraren.

  9. Återskapa testklientappen med den nya konfigurationen.

    dotnet build
    
  10. Kör klientappen. Du ser ett antal meddelanden visas när testklienterna börjar köra, göra reservationer och köra frågor. Låt systemet köras i några minuter. Svaren blir långsamma och snart börjar klientbegäranden misslyckas med HTTP 408-fel (timeout).

    dotnet run
    

    Skärmbild av en klientapp som körs med svar och felmeddelanden som uppstår.

  11. Tryck på Retur för att stoppa klientappen.

Aktivera autoskalning och skapa ett skalningsvillkor

  1. Gå tillbaka till webbappen i Azure-portalen.

  2. Under Inställningar väljer du Skala ut (App Service-plan) och sedan Anpassad autoskalning.

  3. I autoskalningsregeln Standard kontrollerar du att skalningsläget är inställt på Skala baserat på ett mått och väljer sedan Lägg till en regel.

    Skärmbild av webbappen i Azure-portalen när autoskalning konfigureras.

  4. Lägg till en regel som ökar antalet instanser med en om den genomsnittliga CPU-användningen för alla instanser på webbplatsen överskrider 50 procent under de föregående fem minuterna. Det här är en utskalningsregel.

    Skärmbild av webbappen i Azure-portalen när utskalningsregeln för autoskalning konfigureras.

  5. Välj Lägg till en regel igen. Lägg till en regel som minskar antalet instanser med en om den genomsnittliga CPU-användningen för alla instanser på webbplatsen sjunker under 30 procent under de föregående fem minuterna. Det här är en inskalningsregel. Kom ihåg att det är bra att definiera regler för autoskalning i par.

    Skärmbild av webbappen i Azure-portalen när inskalningsregeln för autoskalning konfigureras.

  6. I fönstret Standard för autoskalningsvillkor i avsnittet Instansgränser anger du Maximalt antal instanser till fem. Ge autoskalningsinställningen namnet ScaleOnCPU och välj sedan Spara.

    Skärmbild av de fullständiga autoskalningsinställningarna för webbappen.

Övervaka autoskalningshändelser

  1. Gå tillbaka till Cloud Shell, gå till mappen ~/hotelsystem/HotelReservationSystemTestClient och kör testklienten igen.

    cd ~/hotelsystem/HotelReservationSystemTestClient
    dotnet run
    
  2. Medan testklientappen körs växlar du tillbaka till Azure-portalen med autoskalningsinställningarna för webbappen och väljer Kör historik. Under visa data för senaste väljer du 1 timme. Till en början är diagrammet tomt eftersom det tar flera minuter för autoskalning att starta.

  3. Medan du väntar på att autoskalningshändelser ska inträffa går du till fönstret för webbtjänsten (inte fönstret för App Service-planen). Gå till Övervakning och välj Mått.

  4. Lägg till följande mått i diagrammet, ange tidsintervallet till Senaste 30 minuterna och fäst sedan diagrammet på den aktuella instrumentpanelen:

    • CPU-tid. Välj Sum-aggregering.
    • HTTP-serverfel. Välj Sum-aggregering.
    • HTTP 4.xx. Välj Sum-aggregering.
    • Genomsnittlig svarstid. Välj Avg-aggregering.
  5. Låt systemet stabiliseras och notera CPU-tiden, antalet HTTP 4.xx-fel och den genomsnittliga svarstiden. Innan systemets autoskalning bör du se många HTTP 4.xx-fel (det här är HTTP 408-timeoutfel) och den genomsnittliga svarstiden bör vara flera sekunder. Det kan också uppstå ett tillfälligt HTTP-serverfel, beroende på hur webbservern hanterar belastningen.

  6. Efter cirka 10 minuter bör du se följande trender i diagrammet:

    • CPU-tiden ökar.
    • Antalet HTTP 4.xx-fel minskar.
    • Den genomsnittliga svarstiden minskar.

    Skärmbild av måttdiagrammet för webbappen med tre rader som pekar mot autoskalningshändelser.

    Varje större topp i CPU-tiden indikerar att mer processorkraft har blivit tillgänglig. Den här ändringen är ett resultat av automatisk skalning.

  7. Gå tillbaka till sidan Översikt för webbappen och undersök diagrammen. Översiktsdiagrammen bör ange följande trender:

    • Måtten Indata, Utdata och Begäranden har ökat.
    • Den genomsnittliga svarstiden har minskat.

    Skärmbild av diagrammen på översiktssidan för webbappen.

  8. Välj Skala ut (App Service-plan) och sedan Körningshistorik. Välj 1 timme. Diagrammet bör nu indikera att autoskalning har inträffat. Antalet instanser ökade (det kan nå fem, beroende på hur länge klientappen har körts) och du bör se flera rapporterade autoskalningshändelser.

    Skärmbild av diagrammet som visar hur automatisk skalning ökade antalet instanser för webbappen.

    Kommentar

    Autoskalningshändelser rapporteras i par. Den första händelsen inträffar när autoskalning utlöser en ökning av antalet instanser. Den andra händelsen inträffar när autoskalningen slutförs.

  9. Gå tillbaka till Cloud Shell. Du bör se att appen körs snabbare och att mycket färre begäranden misslyckas.

  10. Tryck på Retur för att stoppa appen.

  11. Om du efter några minuter undersöker körningshistoriken för App Service-planen ser du att antalet instanser minskar. Den här minskningen beror på att skalningsregeln frigör resurser.

Du har konfigurerat autoskalning för hotellets bokningssystem. Systemet skalades ut när den totala CPU-användningen för alla instanser som var värd för webbplatsen överskred 50 procent under en femminutersperiod. Systemet skalade in igen när den totala CPU-användningen underskred 30 procent, återigen under en period på fem minuter. Du utsatte hotellets bokningssystem för en testbelastning och övervakade när autoskalning inträffade.