Oefening: Automatisch de schaal van een web-app aanpassen en controleren

Voltooid

Automatische schaalaanpassing is een belangrijk onderdeel om ervoor te zorgen dat een systeem beschikbaar en responsief blijft.

U wilt automatische schaalaanpassing implementeren in een web-app voor een hotelreserveringssysteem op basis van het CPU-gebruik van de host. Wanneer het CPU-gebruik hoger is dan een specifieke drempelwaarde, wilt u dat de web-app wordt uitgeschaald. Als het CPU-gebruik afneemt, wilt u dat de web-app weer wordt ingeschaald.

In deze les stelt u de web-app in en voert u een testclient-app uit die een belasting voor de web-app oplegt. U ziet de typen fouten die kunnen optreden wanneer de webhost overbelast raakt. Vervolgens configureert u automatisch schalen voor de web-app en voert u de testclient opnieuw uit. U controleert de gebeurtenissen voor automatische schaalaanpassing die optreden en onderzoekt hoe het systeem reageert op de werkbelasting.

Instellingen

Met de web-app voor het hotelreserveringssysteem implementeert u een web-API. De web-API maakt HTTP POST- en GET-bewerkingen beschikbaar waarmee klantreserveringen worden gemaakt en opgehaald. In deze oefening worden de reserveringen niet opgeslagen en haalt de GET-bewerking eenvoudig de dummygegevens op.

In de oefening wordt ook een client-app uitgevoerd waarmee veel gebruikers gelijktijdig POST- en GET-bewerkingen simuleren. Deze client-app biedt de workload voor het testen van de automatische schaalaanpassing van de web-app.

Belangrijk

U hebt uw eigen Azure-abonnement nodig om deze oefening te kunnen uitvoeren. Dit kan kosten met zich meebrengen. Als u nog geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

  1. Meld u aan bij de Azure-portal.

  2. Selecteer Een resource maken in het menu van Azure Portal.

  3. Selecteer web in het linkermenuvenster en zoek en selecteer web-app. Het deelvenster Web App wordt weergegeven.

  4. Selecteer Maken. Het deelvenster Web-app maken wordt weergegeven.

  5. Voer op het tabblad Basisinformatie de volgende waarden in voor elke instelling.

    Notitie

    De web-app moet een unieke naam hebben. We raden u aan iets als <uw naam of initialen>hotelsysteem te gebruiken. Gebruik deze naam overal in deze oefening waar u <uw-web-app-naam> ziet staan.

    Instelling Weergegeven als
    Projectgegevens
    Abonnement Selecteer het Azure-abonnement dat u wilt gebruiken voor deze oefening
    Resourcegroep Selecteer de koppeling Nieuwe maken en voer in het dialoogvenster Naam mslearn-autoscale in
    Exemplaardetails
    Naam <uw-web-app-naam>
    Publiceren Code
    Runtimestack .NET Core 3.1 (LTS)
    Besturingssysteem Windows
    Regio Kies een regio bij u in de buurt
  6. Selecteer Controleren en maken en selecteer vervolgens Maken.

  7. Open in de menubalk rechtsboven van Azure Portal de Cloud Shell (eerste pictogram in rij met menuopties).

  8. Voer de volgende opdracht uit om de broncode voor het hotelreserveringssysteem te downloaden.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  9. Ga naar de map mslearn-hotel-reservation-system/src.

    cd mslearn-hotel-reservation-system/src
    
  10. Maak de apps voor het hotelsysteem. De twee apps zijn (1) een web-app die de web-API implementeert voor het systeem en (2) een client-app die u gebruikt voor het testen van de web-app.

    dotnet build
    
  11. Bereid de web-app HotelReservationSystem voor op publicatie.

    cd HotelReservationSystem
    dotnet publish -o website
    
  12. Ga naar de websitemap met de gepubliceerde bestanden, zip-up van de bestanden en implementeer de bestanden in de web-app die u in de vorige taak hebt gemaakt. Vervang <your-webapp-name> door de naam van uw web-app.

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

De web-app testen voordat u automatische schaalaanpassing configureert

  1. Ga in een webbrowser naar https://<your-webapp-name>.azurewebsites.net/api/reservations/1. Wanneer u naar deze URL gaat, wordt een GET-aanvraag verzonden naar de web-API om de details van reserveringsnummer 1 op te halen. U ziet een resultaat dat vergelijkbaar is met het volgende. De reactie bevat een JSON-document met de details van de reservering. Houd er rekening mee dat in de afbeelding fictieve gegevens worden weergegeven.

    Schermafbeelding van een webbrowser die een web-API-aanvraag verzendt naar de web-app van het hotelreserveringssysteem.

  2. Ga terug naar de Cloud Shell en ga naar de map ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  3. Selecteer in Cloud Shell de code-editor (pictogram met accolades) en bewerk het App.config-bestand in deze map.

    code App.config
    
  4. Verwijder opmerkingen bij de regel waarin de ReservationsServiceURI wordt aangegeven en vervang de waarde door de URL van uw web-app. Het bestand moet er als volgt uitzien.

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

    De instelling NumClients in dit bestand geeft het aantal gelijktijdige clients op dat verbinding probeert te maken met de web-app en werk uitvoert. Het werk bestaat uit het maken van een reservering en het uitvoeren van een query om de details van een reservering op te halen. Alle gebruikte gegevens zijn fictief en worden nergens bewaard. Laat de waarde NumClients ingesteld op 100.

  5. Sla het bestand op door het beletselteken (...) te selecteren in de rechterbovenhoek van de editor.

  6. Bewerk in Cloud Shell het bestand HotelReservationSystemTestClient.csproj in deze map.

    code HotelReservationSystemTestClient.csproj
    
  7. Bewerk de regel die het TargetFramework opgeeft, zodat deze overeenkomt met de Runtime-stack die u hebt geselecteerd voor uw web-app. Wijzig de TargetFramework-waarde in netcoreapp3.1. Het bestand moet eruitzien als in het volgende voorbeeld.

    <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. Sla het bestand op door het beletselteken (...) te selecteren in de rechterbovenhoek van de editor en sluit vervolgens de code-editor.

  9. Maak de testclient-app opnieuw met de nieuwe configuratie.

    dotnet build
    
  10. Voer de clienttoepassing uit. Er worden een aantal berichten weergegeven wanneer de testclients worden uitgevoerd, reserveringen maken en query's uitvoeren. Laat het systeem een aantal minuten draaien. De antwoorden worden traag en binnenkort mislukken de aanvragen van de client met HTTP 408-fouten (Time-out).

    dotnet run
    

    Schermopname van een clienttoepassing die wordt uitgevoerd, met de reacties en foutberichten die optreden.

  11. Druk op Enter om de client-app te stoppen.

Automatische schaalaanpassing inschakelen en een schaalvoorwaarde maken

  1. Keer vanuit Azure Portal terug naar uw web-app.

  2. Selecteer onder Instellingen uitschalen (App Service-plan) en selecteer vervolgens Aangepaste automatische schaalaanpassing.

  3. Controleer in de regel voor standaard automatisch schalen of de schaalmodus is ingesteld op Schalen op basis van een metrische waarde en selecteer vervolgens Een regel toevoegen.

    Schermafbeelding van de web-app in Azure Portal tijdens het configureren van automatische schaalaanpassing.

  4. Voeg een regel toe waarmee het aantal exemplaren wordt verhoogd met één als het gemiddelde CPU-gebruik voor alle exemplaren op de website in de afgelopen vijf minuten groter is dan 50 procent. Dit is een regel voor uitschalen.

    Schermafbeelding van de web-app in Azure Portal tijdens het configureren van de regel voor uitschalen van automatische schaalaanpassing.

  5. Selecteer nogmaals Een regel toevoegen. Voeg een regel toe die het aantal exemplaren met één vermindert als het gemiddelde CPU-gebruik voor alle exemplaren op de website lager is dan 30 procent in de voorgaande vijf minuten. Dit is een regel voor inschalen. Houd er rekening mee dat het een goede gewoonte is om regels voor automatisch schalen in paren te definiëren.

    Schermafbeelding van de web-app in Azure Portal tijdens het configureren van de regel voor inschalen van automatische schaalaanpassing.

  6. Stel in het venster Standaardvoorwaarde voor automatisch schalen in de sectie Instantielimieten het maximumaantal exemplaren in op vijf. Geef de instelling voor automatische schaalaanpassing de naam ScaleOnCPU en selecteer vervolgens Opslaan.

    Schermafbeelding van de volledige instellingen van automatische schaalaanpassing voor de web-app.

Gebeurtenissen voor automatische schaalaanpassing bijhouden

  1. Ga terug naar Cloud Shell, ga naar de map ~/hotelsystem/HotelReservationSystemTestClient en voer de testclient opnieuw uit.

    cd ~/hotelsystem/HotelReservationSystemTestClient
    dotnet run
    
  2. Terwijl de testclient-app wordt uitgevoerd, gaat u terug naar Azure Portal met de instellingen voor automatisch schalen voor de web-app en selecteert u Uitvoeringsgeschiedenis. Onder Gegevens weergeven voor de laatste selecteert u 1 uur. In eerste instantie is de grafiek leeg omdat het enkele minuten duurt voordat automatisch schalen is gestart.

  3. Terwijl u wacht tot er automatisch schalende gebeurtenissen plaatsvinden, gaat u naar het deelvenster voor uw webservice (niet het deelvenster voor het App Service-plan). Selecteer Metrische gegevens onder Bewaking.

  4. Voeg de volgende metrische gegevens toe aan de grafiek, stel het tijdsbereik in op Afgelopen 30 minuten en pin vervolgens de grafiek vast aan het huidige dashboard:

    • CPU-tijd. Selecteer de aggregatie Som.
    • HTTP-serverfouten. Selecteer de aggregatie Som.
    • Http 4.xx. Selecteer de aggregatie Som.
    • Gemiddelde reactietijd. Selecteer de aggregatie Gem.
  5. Laat het systeem stabiliseren en noteer de CPU-tijd, het aantal HTTP 4.xx-fouten en de gemiddelde reactietijd. Voordat de automatische schaalaanpassing van het systeem wordt uitgevoerd, ziet u veel HTTP 4.xx-fouten (dit zijn HTTP 408-time-outfouten) en moet de gemiddelde reactietijd enkele seconden zijn. Er kan ook een incidentele HTTP-serverfout optreden, afhankelijk van hoe de webserver omgaat met de last.

  6. Na ongeveer 10 minuten ziet u de volgende trends in deze grafiek:

    • DE CPU-tijd springt omhoog.
    • Aantal HTTP 4.xx-fouten neemt af.
    • Gemiddelde reactietijd gaat omlaag.

    Schermopname van het diagram Metrische gegevens voor de web app, met drie regels die naar gebeurtenissen op het gebied van automatische schaalaanpassing wijzen.

    Elke grote piek in de CPU-tijd geeft aan dat er meer CPU-verwerkingskracht beschikbaar is. Deze wijziging is het gevolg van automatisch schalen.

  7. Ga terug naar de pagina Overzicht van de web-app en bekijk de grafieken. De overzichtsgrafieken moeten de volgende trends aangeven:

    • Metrische gegevens voor Inkomende gegevens, Uitgaande gegevens en Aanvragen zijn toegenomen.
    • De gemiddelde reactietijd is gedaald.

    Schermafbeelding van de grafieken op de pagina Overzicht van de web-app.

  8. Selecteer Uitschalen (App Service-plan) en selecteer vervolgens Uitvoeringsgeschiedenis. Selecteer 1 uur. In de grafiek moet nu worden aangegeven dat automatisch schalen is opgetreden. Het aantal exemplaren is toegenomen (dit kan vijf bereiken, afhankelijk van hoe lang de client-app actief is) en u ziet dat er verschillende gebeurtenissen voor automatische schaalaanpassing zijn gerapporteerd.

    Schermopname van de grafiek waarin wordt getoond hoe automatisch schalen het aantal exemplaren voor de web-app heeft verhoogd.

    Notitie

    Gebeurtenissen voor automatisch schalen worden in paren gerapporteerd. De eerste gebeurtenis treedt op wanneer automatisch schalen een toename van het aantal exemplaren activeert. De tweede gebeurtenis treedt op wanneer automatisch schalen is voltooid.

  9. Keer terug naar Cloud Shell. U ziet dat de app sneller wordt uitgevoerd en dat er veel minder aanvragen mislukken.

  10. Druk op Enter om de app te stoppen.

  11. Als u na enkele minuten de uitvoeringsgeschiedenis van het App Service-plan bekijkt, ziet u het aantal exemplaren dat wordt verwijderd. Hierdoor nemen de resultaten van de regel voor inschalen de resources vrij.

U hebt automatische schaalaanpassing geconfigureerd voor het hotelreserveringssysteem. Het systeem is uitgeschaald wanneer het totale CPU-gebruik voor alle instanties waarop de website wordt gehost, in een periode van vijf minuten meer dan 50 procent overschrijdt. Het systeem schaalde weer in toen het totale CPU-gebruik onder de 30 procent kwam, opnieuw voor een periode van vijf minuten. U hebt het reserveringssysteem van het hotel onderworpen aan een testbelasting en gecontroleerd wanneer automatische schaalaanpassing is opgetreden.