Oefening: Automatisch de schaal van een web-app aanpassen en controleren
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.
Meld u aan bij de Azure-portal.
Selecteer Een resource maken in het menu van Azure Portal.
Selecteer web in het linkermenuvenster en zoek en selecteer web-app. Het deelvenster Web App wordt weergegeven.
Selecteer Maken. Het deelvenster Web-app maken wordt weergegeven.
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 Selecteer Controleren en maken en selecteer vervolgens Maken.
Open in de menubalk rechtsboven van Azure Portal de Cloud Shell (eerste pictogram in rij met menuopties).
Voer de volgende opdracht uit om de broncode voor het hotelreserveringssysteem te downloaden.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
Ga naar de map
mslearn-hotel-reservation-system/src
.cd mslearn-hotel-reservation-system/src
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
Bereid de web-app HotelReservationSystem voor op publicatie.
cd HotelReservationSystem dotnet publish -o website
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
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.Ga terug naar de Cloud Shell en ga naar de map ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.
cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
Selecteer in Cloud Shell de code-editor (pictogram met accolades) en bewerk het App.config-bestand in deze map.
code App.config
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.
Sla het bestand op door het beletselteken (...) te selecteren in de rechterbovenhoek van de editor.
Bewerk in Cloud Shell het bestand HotelReservationSystemTestClient.csproj in deze map.
code HotelReservationSystemTestClient.csproj
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>
Sla het bestand op door het beletselteken (...) te selecteren in de rechterbovenhoek van de editor en sluit vervolgens de code-editor.
Maak de testclient-app opnieuw met de nieuwe configuratie.
dotnet build
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
Druk op Enter om de client-app te stoppen.
Automatische schaalaanpassing inschakelen en een schaalvoorwaarde maken
Keer vanuit Azure Portal terug naar uw web-app.
Selecteer onder Instellingen uitschalen (App Service-plan) en selecteer vervolgens Aangepaste automatische schaalaanpassing.
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.
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.
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.
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.
Gebeurtenissen voor automatische schaalaanpassing bijhouden
Ga terug naar Cloud Shell, ga naar de map ~/hotelsystem/HotelReservationSystemTestClient en voer de testclient opnieuw uit.
cd ~/hotelsystem/HotelReservationSystemTestClient dotnet run
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.
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.
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.
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.
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.
Elke grote piek in de CPU-tijd geeft aan dat er meer CPU-verwerkingskracht beschikbaar is. Deze wijziging is het gevolg van automatisch schalen.
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.
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.
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.
Keer terug naar Cloud Shell. U ziet dat de app sneller wordt uitgevoerd en dat er veel minder aanvragen mislukken.
Druk op Enter om de app te stoppen.
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.