Übung: Manuelles Skalieren einer Web-App

Abgeschlossen

Sie sollten ein System horizontal skalieren, wenn Sie zusätzlichen Datenverkehr erwarten. Sie können auch als Reaktion auf eine Leistungsverschlechterung horizontal skalieren.

Im Beispiel des Hotelreservierungssystems erhöhen Sie die Anzahl der Web-App-Instanzen, wenn Sie aufgrund einer besonderen Veranstaltung, eines Sonderangebots oder saisonaler Schwankungen mit zusätzlichem Datenverkehr rechnen. Wenn die Nachfrage nachlässt, skalieren Sie das System wieder herunter.

In dieser Übung erstellen Sie einen App Service-Plan und stellen eine Web-App mit diesem Plan bereit. Sie überwachen die Leistung der Web-App, während diese ausgelastet wird. Dann skalieren Sie die App horizontal und überprüfen Sie, ob der Plan die Leistung der App verbessert hat.

In der Übung wird eine Beispiel-Web-App verwendet, die eine Web-API implementiert. Die Web-API macht HTTP POST- und GET-Vorgänge verfügbar, die Kundenbuchungen für eine Hotelreservierungswebsite erstellen und abrufen. Die Buchungen werden nicht gespeichert. Der GET-Vorgang ruft einfach Dummydaten ab.

In dieser Übung führen Sie außerdem eine Client-App aus, die gleichzeitig durchgeführte POST- und GET-Vorgänge mehrerer Benutzer simuliert. Diese App stellt die Workload zur Verfügung, mit der Sie die Leistung der Web-App vor und nach der Skalierung testen.

Erstellen eines App Service-Plans und einer Web-App

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 oder auf der Startseite die Option Ressource erstellen aus. Der Bereich Ressource erstellen wird angezeigt.

  3. Wählen Sie im Menü unter Kategorien, Web aus, suchen Sie nach Web-App, und wählen Sie dann Erstellen aus. Der Bereich Web-App erstellen wird angezeigt.

  4. 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 Wählen Sie den Link Neu erstellen aus, und geben Sie eine neue Ressourcengruppe mit dem Namen mslearn-scale ein.
    Instanzendetails
    Name Siehe „Hinweis“ vor der Tabelle. Geben Sie einen eindeutigen, leicht zu merkenden Namen ein, den Sie später in dieser Übung benötigen.
    Veröffentlichen Code
    Laufzeitstapel .NET 6 (LTS)
    Betriebssystem Windows
    Region Akzeptieren Sie den Standardwert.
    App Service-Plan
    Windows-Plan Akzeptieren Sie den Standardwert.
    Tarif Akzeptieren Sie den Standardwert.
  5. Wählen Sie Bewerten + erstellen>Erstellen aus. Warten Sie, bis die Web-App erstellt und bereitgestellt wurde.

Erstellen und Bereitstellen der Web-App

  1. Wählen Sie auf der Azure-Taskleiste das Symbol „Cloud Shell“ aus, um Azure Cloud Shell zu öffnen, und führen Sie den folgenden Befehl aus, um den Quellcode für das Hotelreservierungssystem herunterzuladen.

    Screenshot: Symbol „Cloud Shell“ in der Taskleiste

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

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

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

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Wechseln Sie zum Ordner website mit den veröffentlichten Dateien. Zippen Sie die Dateien, und stellen Sie sie für die Web-App bereit, die Sie in der vorherigen Aufgabe erstellt haben. Kopieren Sie den folgenden Code in die Editor-Anwendung, und ersetzen Sie <your-webapp-name> durch den Namen Ihrer Web-App. Fügen Sie dann den bearbeiteten Codeblock in die Cloud Shell ein, und führen Sie ihn aus.

    cd website
    zip website.zip *
    az webapp deploy --src-path website.zip --name <your-webapp-name> --resource-group mslearn-scale
    
  6. Rufen Sie über Ihren Webbrowser http://<your-webapp-name>.azurewebsites.net/api/reservations/1 auf. Ein JSON-Dokument wird angezeigt, das die Details für die Reservierungsnummer 1 enthält.

    Screenshot: ausgeführte Web-App mit den Details für die Reservierungsnummer 1 im JSON-Format

Überwachen der Leistung der Web-App vor dem horizontalen Skalieren

  1. Wechseln Sie wieder zu Cloud Shell und anschließend zum Ordner ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  2. Bearbeiten Sie die Datei App.config in diesem Ordner mit dem Code-Editor.

    code App.config
    
  3. Heben Sie für die Zeile, in der ReservationsServiceURI angegeben wird, die Auskommentierung auf, und ersetzen Sie den Wert YOUR WEBSITE NAME durch den Namen Ihrer Web-App. Die Datei sollte wie in diesem 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>
    

    Hinweis

    In der NumClients-Einstellung in dieser Datei wird die Anzahl der Clients festgelegt, die gleichzeitig versuchen können, eine Verbindung mit der Web-App herzustellen und Aktionen auszuführen. Diese Aktionen bestehen darin, eine Reservierung zu erstellen und anschließend eine Abfrage durchzuführen, um Informationen zur Reservierung abzurufen. Bei den Daten handelt es sich um Testdaten, Sie werden nirgendwo dauerhaft gespeichert. Behalten Sie den Wert 100 bei.

  4. Speichern Sie die Datei mit STRG+S.

  5. Bearbeiten Sie die Datei HotelReservationSystemTestClient.csproj in diesem Ordner mithilfe des Code-Editors.

    code HotelReservationSystemTestClient.csproj
    
  6. Bearbeiten Sie die Zeile, in der das TargetFramework angegeben ist so, dass sie dem Laufzeitstapel entspricht, den Sie für Ihre Web-App ausgewählt haben. Ändern Sie den TargetFramework-Wert in netcoreapp7.0. Die Datei sollte wie in diesem Beispiel aussehen.

    <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. Speichern Sie die Datei mit STRG+S, und schließen Sie den Code-Editor mit STRG+Q drücken.

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

    dotnet build
    
  9. Führen Sie die Client-App aus. Es werden mehrere Meldungen angezeigt, sobald die Clients gestartet werden und Reservierungen vornehmen sowie Abfragen ausführen. Beobachten Sie einige Minuten lang, wie das System ausgeführt wird. Die Antworten treffen nur langsam ein. Kurz darauf schlagen die Clientanforderungen fehl, und es werden Fehlermeldungen des Typs HTTP 408 (Timeout) angezeigt.

    dotnet run
    

    Screenshot der ausgeführten Client-App, in der Antworten und Fehlermeldungen angezeigt werden

  10. Wählen Sie im Azure-Portal Zu Ressource wechseln aus, um Ihre Web-App zu öffnen.

  11. Wählen Sie im linken Menübereich Überwachung und dann Metriken aus.

  12. Wählen Sie auf der rechten Seite der Menüleiste im Bereich Ihrer Web-App den Zeitbereich Ortszeit: Letzte 24 Stunden (automatisch), Letzte 30 Minuten und dann Anwenden aus.

  13. Fügen Sie im Bereich unter Diagrammtitel die folgenden Metriken zum Diagramm hinzu:

    • Wählen Sie Metrik hinzufügen aus, und wählen Sie unter der Dropdownliste Metrik die Option CPU-Zeit aus. Wählen Sie für Aggregation die Option Summe aus.
    • Wählen Sie Metrik hinzufügen aus, und wählen Sie unter der Dropdownliste Metrik die Option HTTP-Serverfehler aus. Wählen Sie für Aggregation die Option Summe aus.
    • Wählen Sie Metrik hinzufügen aus, und wählen Sie unter der Dropdownliste Metrik die Option HTTP 4xx aus. Wählen Sie für Aggregation die Option Summe aus.
    • Wählen Sie Metrik hinzufügen aus, und wählen Sie unter der Dropdownliste Metrik die Option Antwortzeit aus. Wählen Sie unter Aggregation die Option Durchschn. aus.
  14. Wählen Sie in der rechten Menüleiste An Dashboard anheften aus. Das Fenster An Dashboard anheften wird eingeblendet. Wählen Sie die Registerkarte Neu erstellen aus.

  15. Geben Sie in der Dropdownliste Dashboardname den Namen Ihrer Web-App ein, und wählen Sie dann Create and pin (Erstellen und anheften) aus.

  16. Warten Sie ungefähr fünf Minuten, bis sich das System stabilisiert hat, und achten Sie anschließend auf die CPU-Zeit, die Anzahl der HTTP 4xx-Fehlermeldungen und die durchschnittliche Antwortzeit. Sie sollten eine erhebliche Anzahl von HTTP 4xx-Fehlern sehen. Diese Fehler sind HTTP 408-Timeoutfehler. Die durchschnittliche Reaktionszeit beträgt mehrere Sekunden. Je nachdem, wie der Webserver mit der Last umgeht, werden möglicherweise auch gelegentliche HTTP-Serverfehler angezeigt.

    Screenshot: Leistungsmetriken für die Web-App vor dem horizontalen Skalieren

  17. Setzen Sie die Ausführung der Client-App fort, während Sie die nächste Aufgabe ausführen.

Horizontales Skalieren der Web-App und Überprüfen der Leistungsverbesserung

  1. Wählen Sie im Azure-Portal den Namen Ihrer Web-App (App Service) und dann im Menü unter Einstellungen die Option Aufskalieren (App Service-Plan) aus. Der Bereich Aufskalieren (App Service Plan) wird angezeigt.

  2. Wählen Sie auf der Registerkarte Konfigurieren die Option Manuell skalieren aus, und legen Sie die Anzahl der Instanzen auf 5 fest. Wählen Sie Speichern.

    Screenshot: Seite „Konfigurieren“ für den App Service-Plan, horizontales Skalieren auf fünf Instanzen

  3. Wechseln Sie zur Cloud Shell-Instanz, welche die Client-App ausführt. Sie sollten weniger Anforderungen sehen, die fehlerhaft sind, obwohl es noch einige Timeouts geben wird.

  4. Führen Sie die App weitere fünf Minuten lang aus. Wechseln Sie anschließend zum Diagramm, in dem die App-Metriken auf dem Dashboard im Azure-Portal angezeigt werden. Sie sollten sehen, dass sich die CPU-Zeit deutlich erhöht, da nun fünfmal mehr CPU-Leistung zur Verfügung steht. Die durchschnittliche Antwortzeit sollte sinken, und die Anzahl von HTTP 4xx-Fehlern sollte sich ebenfalls verringern. Im unten stehenden Diagramm werden typische Ergebnisse dargestellt. Der Zeitpunkt der horizontalen Skalierung ist hervorgehoben.

    Screenshot: Leistungsmetriken für die Web-App nach dem horizontalen Skalieren auf fünf Instanzen

  5. Wenn Sie noch weitere Konfigurationen ausprobieren möchten, können Sie die Anzahl der Instanzen für den App Service-Plan auf zehn erhöhen. Die maximale Anzahl von Instanzen, die von der S1-Ebene unterstützt wird, ist 10. Sie sollten eine weitere Erhöhung der CPU-Zeit und eine entsprechende Verkürzung der Antwortzeit sowie eine Verringerung der HTTP 4xx-Fehler feststellen.

  6. Wechseln Sie zur Cloud Shell-Instanz, welche die Client-App ausführt. Drücken Sie die EINGABETASTE, um die App zu beenden.

  7. Legen Sie im Azure-Portal die Anzahl der Instanzen wieder auf 1 fest. Wählen Sie Ihre Web-App und im Menü Aufskalieren (App Service Plan) aus. Legen Sie auf der Registerkarte Konfigurieren die Anzahl der Instanzen auf 1 fest, und wählen Sie dann Speichern aus.