Übung: automatisches Skalieren und Überwachen einer Web-App

Abgeschlossen

Die automatische Skalierung trägt entscheidend zur Verfügbarkeit und Reaktionsfähigkeit eines Systems bei.

In diesem Szenario möchten Sie die automatische Skalierung für die Web-App implementieren, die für das Reservierungssystem der Hotels verwendet wird. Als Grundlage für die Skalierung dient die CPU-Auslastung des Hosts. Wenn die CPU-Auslastung einen bestimmten Schwellenwert überschreitet, sollte die App horizontal skaliert werden. Wenn die CPU-Auslastung sinkt, sollte die Web-App wieder herunterskaliert werden.

In dieser Lerneinheit richten Sie die Web-App ein und führen eine Testclient-App aus, die eine Last für die Web-App erzeugt. Sie sehen dann, welche Fehler auftreten können, wenn der Webhost überlastet ist. Anschließend konfigurieren Sie die automatische Skalierung für die Web-App und führen den Testclient erneut aus. Sie überwachen die Ereignisse für die automatische Skalierung und beobachten, wie das System auf die Workload reagiert.

Setup

Die Web-App für das Reservierungssystem der Hotels implementiert eine Web-API. Die Web-API macht HTTP POST- und GET-Vorgänge verfügbar, die Kundenbuchungen erstellen und abrufen. In dieser Übung werden die Buchungen nicht gespeichert, und bei GET-Vorgängen werden nur Testdaten abgerufen.

In dieser Übung führen Sie außerdem eine Client-App aus, die gleichzeitig durchgeführte POST- und GET-Vorgänge vieler Benutzer und Benutzerinnen simuliert. Diese Client-App stellt die Workload bereit, mit der die automatische Skalierung der Web-App getestet wird.

Wichtig

Sie benötigen für diese Übung ein eigenes Azure-Abonnement. Außerdem fallen möglicherweise Gebühren für Sie an. Wenn Sie noch kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im Menü des Azure-Portals die Option Ressource erstellen aus.

  3. Klicken Sie im linken Menübereich auf Web, und suchen Sie dann nach „Web-App“, und klicken Sie auf Web-App. Der Bereich Web-App wird angezeigt.

  4. Klicken Sie auf Erstellen. Der Bereich Web-App erstellen wird angezeigt.

  5. Füllen Sie auf der Registerkarte Grundlagen die folgenden Werte für jede Einstellung aus.

    Hinweis

    Die Web-App muss einen eindeutigen Namen aufweisen. Als Struktur wird <Ihr Name oder Ihre Initialen>hotelsystem empfohlen. Verwenden Sie diesen Namen immer, wenn in dieser Übung <your-webapp-name> angezeigt wird.

    Einstellung Wert
    Projektdetails
    Subscription Wählen Sie das Azure-Abonnement aus, das Sie für diese Übung verwenden möchten.
    Ressourcengruppe Klicken Sie auf den Link Neu erstellen, und geben Sie im Dialogfeld Namemslearn-autoscale ein.
    Instanzendetails
    Name <Name Ihrer Web-App>
    Veröffentlichen Code
    Laufzeitstapel .NET Core 3.1 (LTS)
    Betriebssystem Windows
    Region Wählen Sie eine Region in Ihrer Nähe aus.
  6. Klicken Sie auf Überprüfen und erstellen und dann auf Erstellen.

  7. Öffnen Sie auf der Menüleiste oben rechts im Azure-Portal Cloud Shell (erstes Symbol in der Menüauswahl).

  8. Führen Sie den folgenden Befehl aus, um den Quellcode für das Hotelreservierungssystem herunterzuladen.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  9. Navigieren Sie zum Ordner mslearn-hotel-reservation-system/src.

    cd mslearn-hotel-reservation-system/src
    
  10. Erstellen Sie die Apps für das Hotelsystem. Es gibt zwei Apps: (1) eine Web-App, die die Web-API für das System implementiert, und (2) eine Client-App, die Sie für den Auslastungstest der Web-App verwenden.

    dotnet build
    
  11. Bereiten Sie die Web-App „HotelReservationSystem“ für die Veröffentlichung vor.

    cd HotelReservationSystem
    dotnet publish -o website
    
  12. Navigieren Sie zum Ordner website, der die veröffentlichten Dateien enthält, komprimieren Sie diese Dateien in einer ZIP-Datei, und stellen Sie die Dateien für die Web-App bereit, die Sie in der vorherigen Aufgabe erstellt haben. Ersetzen Sie <your-webapp-name> durch den Namen Ihrer Web-App.

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

Testen der Web-App vor dem Konfigurieren der automatischen Skalierung

  1. Rufen Sie in Ihrem Webbrowsers https://<your-webapp-name>.azurewebsites.net/api/reservations/1 auf. Wenn Sie diese URL öffnen, wird eine GET-Anforderung an die Web-API gesendet, um Informationen zur Reservierungsnummer 1 abzurufen. Das Ergebnis sollte in etwa wie nachfolgend gezeigt aussehen. Die Antwort enthält ein JSON-Dokument mit den Buchungsinformationen. Denken Sie daran, dass die Abbildung fiktive Daten zeigt.

    Screenshot: ein Webbrowser sendet eine Web-API-Anforderung an die Web-App für das Hotelreservierungssystem

  2. Wechseln Sie wieder zu Cloud Shell, und navigieren Sie zum Ordner ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  3. Klicken Sie in Cloud Shell auf den Code-Editor (Symbol mit geschweiften Klammern), und bearbeiten Sie die „App.config“-Datei in diesem Ordner.

    code App.config
    
  4. Heben Sie für die Zeile, in der der ReservationsServiceURI angegeben wird, die Auskommentierung auf, und ersetzen Sie den Wert durch die URL der Web-App. Die Datei sollte wie im folgenden Beispiel aussehen.

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

    In der Einstellung NumClients in dieser Datei wird die Anzahl der Clients festgelegt, die gleichzeitig versuchen, eine Verbindung mit der Web-App herzustellen und Aufgaben auszuführen. Diese Aufgaben bestehen darin, eine Reservierung zu erstellen und anschließend eine Abfrage durchzuführen, um Informationen zu einer Reservierung abzurufen. Alle verwendeten Daten sind fiktiv und werden nirgendwo aufbewahrt. Lassen Sie den Wert von NumClients auf 100 festgelegt.

  5. Speichern Sie die Datei, indem Sie auf die Auslassungspunkte (...) in der oberen rechten Ecke des Editors klicken.

  6. Bearbeiten Sie die Datei „HotelReservationSystemTestClient.csproj“ in diesem Ordner in der Cloud Shell.

    code HotelReservationSystemTestClient.csproj
    
  7. Bearbeiten Sie die Zeile, in der TargetFramework angegeben wird, sodass sie dem Laufzeitstapel entspricht, den Sie für Ihre Web-App ausgewählt haben. Ändern Sie den Wert von TargetFramework in netcoreapp3.1. Die Datei sollte wie das folgende Beispiel aussehen.

    <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. Speichern Sie die Datei, indem Sie die Auslassungspunkte (...) in der oberen rechten Ecke des Editors auswählen, und schließen Sie dann den Code-Editor.

  9. Erstellen Sie mit der neuen Konfiguration die Testclient-App neu.

    dotnet build
    
  10. Führen Sie die Client-App aus. Wenn die Testclients starten, Reservierungen vornehmen und Abfragen ausführen, wird eine Reihe von Meldungen angezeigt. Beobachten Sie einige Minuten lang, wie das System ausgeführt wird. Die Antworten treffen langsam ein. Kurz darauf schlagen die Clientanforderungen fehl, und es werden Fehlermeldungen des Typs HTTP 408 (Timeout) angezeigt.

    dotnet run
    

    Screenshot: aktive Client-App, die die aufkommenden Antworten und Fehlermeldungen anzeigt

  11. Drücken Sie die EINGABETASTE, um die Client-App zu beenden.

Aktivieren der automatischen Skalierung und Erstellen einer Skalierungsbedingung

  1. Wechseln Sie wieder zu Ihrer Web-App im Azure-Portal.

  2. Klicken Sie unter Einstellungen erst auf Horizontal skalieren (App Service-Plan) und dann auf Benutzerdefinierte Autoskalierung.

  3. Stellen Sie in der Standardregel für die automatische Skalierung sicher, dass als Skalierungsmodus Basierend auf einer Metrik skalieren festgelegt ist, und klicken Sie anschließend auf Regel hinzufügen.

    Screenshot: Web-App im Azure-Portal bei der Konfiguration der automatischen Skalierung

  4. Fügen Sie eine Regel hinzu, die die Anzahl von Instanzen um eins erhöht, wenn die durchschnittliche CPU-Auslastung aller Instanzen der Website in den vorangegangenen fünf Minuten 50 % übersteigt. Dies ist eine Regel für die horizontale Skalierung.

    Screenshot: Web-App im Azure-Portal bei der Konfiguration der Regel für die automatische horizontale Skalierung

  5. Klicken Sie noch einmal auf Regel hinzufügen. Fügen Sie eine Regel hinzu, die die Anzahl der Instanzen um eins verringert, wenn die durchschnittliche CPU-Auslastung aller Instanzen der Website in den vorangegangenen fünf Minuten 30 % unterschreitet. Dies ist eine Regel für das horizontalen Herunterskalieren. Denken Sie daran, Regeln für die automatische Skalierung am besten paarweise zu definieren.

    Screenshot: Web-App im Azure-Portal bei der Konfiguration einer Regel für das automatische horizontale Herunterskalieren

  6. Legen Sie im Fenster für die Standardbedingung der automatischen Skalierung im Abschnitt Instanzgrenzwerte als Maximum für die Instanzanzahl fünf fest. Legen Sie für die Einstellung der automatischen Skalierung den Namen ScaleOnCPU fest, und klicken Sie anschließend auf Speichern.

    Screenshot: vollständige Einstellungen der automatischen Skalierung für die Web-App

Überwachen von Autoskalierungsereignissen

  1. Wechseln Sie wieder zu Cloud Shell, navigieren Sie zum Ordner ~/hotelsystem/HotelReservationSystemTestClient, und führen Sie den Testclient noch einmal aus.

    cd ~/hotelsystem/HotelReservationSystemTestClient
    dotnet run
    
  2. Wechseln Sie während der Ausführung der Testclient-App zurück zum Azure-Portal, in dem die Einstellungen der automatischen Skalierung für die Web-App angezeigt werden, und wählen Sie Ausführungsverlauf aus. Wählen Sie unter Datenanzeige für die letzten: die Option 1 Stunde aus. Zunächst ist das Diagramm leer, weil es einige Minuten dauert, bis die automatische Skalierung gestartet wird.

  3. Während Sie darauf warten, dass automatische Skalierungsereignisse auftreten, wechseln Sie zum Bereich für den Webdienst (nicht für den App Service-Plan). Wählen Sie unter Überwachung die Option Metriken aus.

  4. Fügen Sie dem Diagramm die unten aufgeführten Metriken hinzu, legen Sie den Zeitbereich auf Letzte 30 Minuten fest, und heften Sie dem aktuellen Dashboard das Diagramm an:

    • CPU-Zeit. Wählen Sie die Summenaggregation aus.
    • HTTP-Serverfehler. Wählen Sie die Summenaggregation aus.
    • HTTP 4.xx. Wählen Sie die Summenaggregation aus.
    • Durchschnittliche Antwortzeit. Wählen Sie die Durchschnittsaggregation aus.
  5. Warten Sie, bis sich das System stabilisiert, und achten Sie auf die CPU-Zeit, die Anzahl der HTTP 4.xx-Fehlermeldungen und die durchschnittliche Antwortzeit. Bevor das System automatisch skaliert wird, sollten viele HTTP 4.xx-Fehlermeldungen (Fehler des Typs HTTP 408 (Timeout)) und eine durchschnittliche Antwortzeit von mehreren Sekunden angezeigt werden. Je nachdem, wie der Webserver mit der Last umgeht, können auch gelegentliche HTTP-Serverfehler angezeigt werden.

  6. Nach zehn Minuten sollten die folgenden Trends in diesem Diagramm sichtbar sein:

    • Die CPU-Zeit nimmt deutlich zu.
    • Die Anzahl der HTTP 4.xx-Fehler nimmt ab.
    • Die durchschnittliche Antwortzeit verringert sich.

    Screenshot: Diagramm „Metriken“ für die Web-App mit drei Linien, die auf automatische Skalierungen zeigen

    Jede deutlich erkennbare Spitze bei der CPU-Zeit zeigt an, dass mehr CPU-Verarbeitungsleistung verfügbar wurde. Diese Änderung ist ein Ergebnis der automatischen Skalierung.

  7. Wechseln Sie zurück zur Seite Übersicht der Web-App, und sehen Sie sich die Diagramme an. In diesen Übersichtsdiagrammen sollten die folgenden Trends erkennbar sein:

    • In den Metriken für „Eingehende Daten“, „Ausgehende Daten“ und „Anforderungen“ ist ein Anstieg der Werte sichtbar.
    • Die durchschnittliche Antwortzeit hat sich verringert.

    Screenshot: Diagramme auf der Seite „Übersicht“ der Web-App

  8. Klicken Sie zuerst auf Horizontal hochskalieren (App Service-Plan) und anschließend auf Ausführungsverlauf. Wählen Sie 1 Stunde aus. Aus dem Diagramm sollte nun ersichtlich werden, dass eine automatische Skalierung stattfand. Die Anzahl von Instanzen hat sich erhöht und beträgt je nach Ausführungsdauer der Client-App möglicherweise bereits fünf. Außerdem sollten als Ergebnis der automatischen Skalierung einige zugehörige Ereignisse angezeigt werden.

    Screenshot: Diagramm, das zeigt, wie durch die automatische Skalierung die Anzahl der Instanzen für die Webanwendung erhöht wurde

    Hinweis

    Automatische Skalierungsereignisse werden paarweise gemeldet. Das erste Ereignis tritt auf, wenn durch die automatische Skalierung eine Erhöhung der Instanzenanzahl ausgelöst wurde. Das zweite Ereignis tritt auf, wenn die automatische Skalierung abgeschlossen wird.

  9. Wechseln Sie wieder zu Cloud Shell. Sie sollten erkennen können, dass die App schneller ausgeführt wird und weniger Anforderungen fehlschlagen.

  10. Drücken Sie die EINGABETASTE, um die App zu beenden.

  11. Wenn Sie sich nach einigen Minuten den Ausführungsverlauf des App Service-Plans ansehen, können Sie feststellen, dass sich die Anzahl der Instanzen verringert hat. Diese Verringerung resultiert aus der Skalierungsregel, die Ressourcen freigibt.

Sie haben nun die automatische Skalierung für das Reservierungssystem der Hotels konfiguriert. Das System wurde horizontal skaliert, als die CPU-Gesamtauslastung für alle Instanzen, auf denen die Website gehostet ist, innerhalb von fünf Minuten 50 % überschritten hat. Das System wurde anschließend wieder horizontal herunterskaliert, wenn eine CPU-Gesamtauslastung von 30 % innerhalb von fünf Minuten unterschritten wurde. Sie haben das Reservierungssystem der Hotels einem Auslastungstest unterzogen und überwacht, wann eine automatische Skalierung erfolgt ist.