Oefening: Een web-app handmatig schalen

Voltooid

U moet een systeem uitbreiden als u verwacht dat er meer verkeer gaat komen. U kunt ook uitbreiden in reactie op afnemende prestaties.

In het voorbeeld van het hotelreserveringssysteem verhoogt u het aantal exemplaren van de web-app wanneer u extra verkeer verwacht vanwege een speciale gebeurtenis, een speciale aanbieding of seizoensgebonden schommelingen. Het systeem werd weer omlaag geschaald bij afname van de vraag.

In deze oefening maakt u een App Service-plan en implementeert u een web-app met behulp van dit plan. U bewaakt de prestaties van de web-app die wordt geladen. Schaal vervolgens de app uit en controleer of het plan de prestaties van de app heeft verbeterd.

In de oefening wordt een voorbeeldweb-app gebruikt waarmee een web-API wordt geïmplementeerd. Via de web-API worden de HTTP POST- en GET-bewerkingen beschikbaar gemaakt waarmee klantreserveringen voor een hotelreserveringswebsite worden gemaakt en opgehaald. De boekingen worden niet opgeslagen. Met de GET-bewerking worden eenvoudig dummygegevens opgehaald.

In de oefening wordt ook een client-app uitgevoerd die simuleert dat verschillende gebruikers gelijktijdig POST- en GET-bewerkingen uitvoeren. Deze app biedt de workload die u gebruikt om de prestaties van de web-app vóór en na het schalen te testen.

Een App Service-plan en web-app maken

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 in het menu van Azure Portal of op de startpagina de optie Een resource maken. Het deelvenster Een resource maken wordt weergegeven.

  3. Selecteer in het linkermenuvenster onder Categorieën de optie Web, zoek en selecteer Web-app en selecteer vervolgens Maken. Het deelvenster Web-app maken wordt weergegeven.

  4. 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 <your-webapp-name> 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 een nieuwe resourcegroep in met de naam mslearn-scale
    Exemplaardetails
    Naam Zie Notitie voor tabel. Voer een unieke naam in die u later in deze oefening kunt onthouden
    Publiceren Code
    Runtimestack .NET 6 (LTS)
    Besturingssysteem Windows
    Regio Standaard accepteren
    App Service-plan
    Windows-abonnement Standaard accepteren
    Prijsoverzicht Standaard accepteren
  5. Selecteer Beoordelen en maken>Maken. Wacht totdat de web-app is gemaakt en geïmplementeerd.

De web-app ontwikkelen en implementeren

  1. Selecteer in de Azure-taakbalk het Cloud Shell-pictogram om AzureCloud Shell te openen en voer de volgende opdracht uit om de broncode voor het hotelreserveringssysteem te downloaden.

    Screenshot of Cloud Shell icon in taskbar.

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

    cd mslearn-hotel-reservation-system/src
    
  3. Maak de apps voor het hotelsysteem. Er zijn twee apps: een web-app die de web-API implementeert voor het systeem en een client-app die u gebruikt om de web-app te laden.

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

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Ga naar de map website, die de gepubliceerde bestanden bevat. Zip de bestanden en implementeer ze naar de web-app die u hebt gemaakt in de vorige taak. Kopieer de volgende code om te Kladblok en vervang deze door <your-webapp-name> de naam van uw web-app, plak het bewerkte codeblok in Cloud Shell en voer het uit.

    cd website
    zip website.zip *
    az webapp deployment source config-zip --src website.zip --name <your-webapp-name> --resource-group mslearn-scale
    
  6. Ga in de webbrowser naar http://<your-webapp-name>.azurewebsites.net/api/reservations/1. Er wordt een JSON-document weergegeven met de details voor reserveringsnummer 1.

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

De prestaties van de web-app bewaken vóór het uitbreiden

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

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  2. Bewerk het Bestand App.config in deze map met behulp van de code-editor.

    code App.config
    
  3. Verwijder opmerkingen bij de regel die de ReservationsServiceURIwaarde UW WEBSITENAAM aangeeft en vervang deze door de naam van uw web-app. Het bestand moet eruitzien zoals in dit voorbeeld.

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

    Notitie

    De NumClients instelling in dit bestand geeft het aantal clients op dat tegelijkertijd verbinding kan maken met de web-app en werk kan uitvoeren. Het werk bestaat uit het maken van een reservering en het uitvoeren van een query om de details van de reservering op te halen. Alle gebruikte gegevens zijn namaak. Ze worden nergens behouden. Laat deze waarde op 100 staan.

  4. Sla het bestand op door Ctrl+S te selecteren.

  5. Bewerk het bestand HotelReservationSystemTestClient.csproj in deze map met behulp van de code-editor.

    code HotelReservationSystemTestClient.csproj
    
  6. Bewerk de regel die de TargetFrameworkregel opgeeft, zodat deze overeenkomt met de Runtime-stack die u hebt geselecteerd voor uw web-app. Wijzig de TargetFramework waarde in netcoreapp7.0. Het bestand moet eruitzien zoals in dit voorbeeld.

    <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. Sla het bestand op door Ctrl+S te selecteren en de code-editor te sluiten door op Ctrl+Q te drukken.

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

    dotnet build
    
  9. Voer de clienttoepassing uit. Er worden verschillende berichten weergegeven wanneer de clients worden uitgevoerd, reserveringen maken en query's uitvoeren. Laat het systeem een aantal minuten draaien. De antwoorden zijn traag en binnenkort mislukken de clientaanvragen met HTTP 408-fouten (time-out).

    dotnet run
    

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

  10. Selecteer In Azure Portal de optie Ga naar de resource om uw web-app te openen.

  11. Selecteer Bewaking in het linkermenuvenster en selecteer vervolgens Metrische gegevens.

  12. Selecteer aan de rechterkant van de menubalk van het deelvenster van uw web-app het lokale tijdsbereik: Laatste 24 uur (automatisch) en selecteer Vervolgens Laatste 30 minuten en selecteer Toepassen.

  13. Voeg in het deelvenster onder Grafiektitel de volgende metrische gegevens toe aan de grafiek:

    • Selecteer Metrische gegevens toevoegen en selecteer onder de vervolgkeuzelijst Metrische gegevens de OPTIE CPU-tijd. Selecteer Som voor Aggregatie.
    • Selecteer Metrische gegevens toevoegen en selecteer onder de vervolgkeuzelijst Metrische gegevens http-serverfouten. Selecteer Som voor Aggregatie.
    • Selecteer Metrische gegevens toevoegen en selecteer onder de vervolgkeuzelijst Metrische gegevens http 4xx. Selecteer Som voor Aggregatie.
    • Selecteer Metrische gegevens toevoegen en selecteer onder de vervolgkeuzelijst Metrische gegevens de reactietijd. Selecteer Gem bij Aggregatie.
  14. Selecteer In de rechtermenubalk de optie Vastmaken aan dashboard. Het deelvenster Vastmaken aan dashboard wordt weergegeven. Selecteer het tabblad Nieuw maken.

  15. Voer in de vervolgkeuzelijst Dashboardnaam de naam van uw web-app in en selecteer vervolgens Maken en vastmaken.

  16. Laat het systeem vijf minuten draaien om te stabiliseren en noteer vervolgens de CPU-tijd, het aantal HTTP 4xx-fouten en de gemiddelde reactietijd. Er wordt een aanzienlijk aantal HTTP 4xx-fouten weergegeven. Deze fouten zijn HTTP 408 Time-outfouten. De gemiddelde reactietijd is enkele seconden. Er kan een incidentele HTTP-serverfout optreden, afhankelijk van hoe de webserver omgaat met de belasting.

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

  17. Houd de client-app actief terwijl u de volgende taak uitvoert.

De web-app uitbreiden en de verbetering in de prestaties controleren

  1. Selecteer in Azure Portal de naam van uw web-app (App Service) en selecteer in het linkermenuvenster onder Instellingen uitschalen (App Service-plan). Het deelvenster Uitschalen (App Service-plan) wordt weergegeven.

  2. Selecteer op het tabblad Configureren de optie Handmatig schalen en stel het aantal exemplaren in op 5. Selecteer Opslaan.

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

  3. Schakel over naar Cloud Shell waarop de client-app wordt uitgevoerd. Als het goed is, ziet u dat er minder aanvragen mislukken met fouten, hoewel er nog steeds een time-out optreedt.

  4. Voer de app nog vijf minuten langer uit. Ga vervolgens naar de grafiek met de metrische gegevens voor de app op het dashboard in Azure Portal. U ziet dat de CPU-tijd aanzienlijk toeneemt, omdat er nu vijf keer meer CPU-vermogen beschikbaar is. De gemiddelde reactietijd moet dalen en het aantal HTTP 4xx-fouten moet ook afnemen. De volgende grafiek toont een typische set resultaten. Het punt waarop uitbreiding is opgetreden, wordt aangegeven.

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

  5. Als u wat meer wilt experimenteren, kunt u het aantal exemplaren voor het App Service-plan verhogen naar 10. Het maximum aantal exemplaren dat wordt ondersteund door de S1-laag is 10. U ziet dan een verdere toename in CPU-tijd en een bijbehorende afname in de reactietijd en het aantal HTTP 4xx-fouten.

  6. Ga terug naar Cloud Shell waarop de client-app wordt uitgevoerd. Selecteer Enter om de app te stoppen.

  7. Stel in Azure Portal het aantal exemplaren in op 1. Selecteer uw web-app en selecteer in het linkermenuvenster Uitschalen (App Service-plan). Stel op het tabblad Configureren het aantal exemplaren in op 1 en selecteer Opslaan.