Exercice : Mettre manuellement à l’échelle une application web

Effectué

Vous devez procéder au scale-out d’un système quand vous vous attendez à une augmentation du trafic. Vous pouvez aussi effectuer un scale-out en réponse à une baisse des performances.

Dans l’exemple du système de réservation hôtelière, vous augmentez le nombre d’instances de l’application web en anticipation d’une hausse du trafic liée à un événement particulier, une offre spéciale ou des variations saisonnières. Vous avez ensuite effectué l’opération inverse quand la demande a diminué.

Dans cet exercice, vous créez un plan App Service et déployez une application web avec ce plan. Vous supervisez les performances de l’application web soumise à une charge. Vous effectuez ensuite un scale-out de l’application et vérifiez que le plan a amélioré ses performances.

L’exercice s’appuie sur un exemple d’application web qui implémente une API web. L’API web expose les opérations HTTP POST et GET qui créent et récupèrent les réservations des clients pour un site web de réservation hôtelière. Les réservations ne sont pas enregistrées. L’opération GET récupère juste les données factices.

L’exercice exécute aussi une application cliente qui simule l’exécution simultanée d’opérations POST et GET par plusieurs utilisateurs. Cette application fournit la charge de travail que vous utilisez pour tester les performances de l’application web avant et après la mise à l’échelle.

Créer un plan App Service et une application web

Important

Vous avez besoin de votre propre abonnement Azure pour exécuter cet exercice et des frais pourraient vous être facturés. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

  1. Connectez-vous au portail Azure.

  2. Dans le menu du portail Azure ou dans la page Accueil, sélectionnez Créer une ressource. Le volet Créer une ressource apparaît.

  3. Dans le volet du menu de gauche, sous Catégories, sélectionnez Web, recherchez et sélectionnez Application web, puis sélectionnez Créer. Le volet Créer une application web s’affiche.

  4. Sous l’onglet Informations de base, entrez les valeurs suivantes pour chaque paramètre.

    Notes

    Le nom de l’application web doit être unique. Nous vous suggérons d’utiliser quelque chose comme <votre nom ou vos initiales>hotelsystem. Utilisez ce nom partout où vous voyez <your-webapp-name> dans cet exercice.

    Paramètre Valeur
    Détails du projet
    Abonnement Sélectionnez l’abonnement Azure que vous souhaitez utiliser pour cet exercice
    Groupe de ressources Sélectionnez le lien Créer, puis entrez un nouveau groupe de ressources appelé mslearn-scale
    Détails de l’instance
    Nom Voir la Remarque avant le tableau. Entrez un nom unique facile à mémoriser parce que vous en aurez besoin plus loin dans cet exercice.
    Publier Code
    Pile d’exécution .NET 6 (LTS)
    Système d'exploitation Windows
    Région Accepter les valeurs par défaut
    Plan App Service
    Plan Windows Accepter les valeurs par défaut
    Plan tarifaire Accepter les valeurs par défaut
  5. Sélectionnez Vérifier + créer>Créer. Attendez que l’application web soit créée et déployée.

Générer et déployer l’application web

  1. Dans la barre des tâches Azure, sélectionnez l’icône Cloud Shell pour ouvrir Azure Cloud Shell, puis exécutez la commande suivante pour télécharger le code source du système de réservation d’hôtel.

    Screenshot of Cloud Shell icon in taskbar.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  2. Accédez au dossier mslearn-hotel-reservation-system/src.

    cd mslearn-hotel-reservation-system/src
    
  3. Générez les applications pour le système hôtelier. Il y a deux applications : une application web qui implémente l’API web pour le système et une application cliente que vous utilisez pour tester l’application web en condition de charge.

    dotnet build
    
  4. Préparez l’application web HotelReservationSystem pour la publication.

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Accédez au dossier website, qui contient les fichiers publiés. Compressez les fichiers et déployez-les dans l’application web que vous avez créée dans la tâche précédente. Copiez le code suivant dans le Bloc-notes et remplacez <your-webapp-name> par le nom de votre application web, puis collez le bloc de code modifié dans Cloud Shell et exécutez-le.

    cd website
    zip website.zip *
    az webapp deployment source config-zip --src website.zip --name <your-webapp-name> --resource-group mslearn-scale
    
  6. Accédez à http://<your-webapp-name>.azurewebsites.net/api/reservations/1 dans votre navigateur web. Un document JSON apparaît et contient les détails de la réservation numéro 1.

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

Superviser les performances de l’application web avant le scale-out

  1. Revenez à Cloud Shell et accédez au dossier ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  2. Modifiez le fichier App.config dans ce dossier à l’aide de l’éditeur de code.

    code App.config
    
  3. Décommentez la ligne qui spécifie ReservationsServiceURI et remplacez la valeur YOUR WEBSITE NAME par le nom de votre application web. Ce fichier doit se présenter comme cet exemple.

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

    Notes

    Le paramètre NumClients de ce fichier spécifie le nombre de clients qui peuvent se connecter simultanément à l’application web et d’effectuer une tâche. Le travail consiste à créer une réservation, puis à exécuter une requête pour extraire les détails de la réservation. Toutes les données utilisées sont factices. Elles ne sont conservées nulle part. Gardez la valeur 100.

  4. Enregistrez le fichier en sélectionnant Ctrl+S.

  5. Modifiez le fichier HotelReservationSystemTestClient.csproj dans ce dossier en utilisant l’éditeur de code.

    code HotelReservationSystemTestClient.csproj
    
  6. Modifiez la ligne qui spécifie TargetFramework afin qu’elle corresponde à la pile d’exécution que vous avez sélectionnée pour votre application web. Remplacez la valeur TargetFramework par netcoreapp7.0. Ce fichier doit se présenter comme cet exemple.

    <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. Enregistrez le fichier en sélectionnant Ctrl+S, puis fermez l’éditeur de code en appuyant sur Ctrl+Q.

  8. Regénérez l’application cliente de test avec la nouvelle configuration.

    dotnet build
    
  9. Exécutez l’application cliente. Vous voyez plusieurs messages apparaître quand les clients commencent à se connecter, font des réservations et exécutent des requêtes. Laissez le système s’exécuter pendant quelques minutes. Les réponses sont lentes et les requêtes client commencent à échouer avec des erreurs HTTP 408 (dépassement du délai d’attente).

    dotnet run
    

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

  10. Dans le portail Azure, sélectionnez Accéder à la ressource pour ouvrir votre application web.

  11. Dans le volet du menu de gauche, sélectionnez Supervision, puis sélectionnez Métriques.

  12. À droite de la barre de menus du volet de votre application web, sélectionnez Heure locale : 24 dernières heures (automatique), sélectionnez 30 dernières minutes, puis sélectionnez Appliquer.

  13. Dans le volet, sous Titre du graphique, ajoutez les métriques suivantes au graphique :

    • Sélectionnez Ajouter une métrique et, dans la liste déroulante Métrique, sélectionnez Temps UC. Pour Agrégation, sélectionnez Somme.
    • Sélectionnez Ajouter une métrique et, dans la liste déroulante Métrique, sélectionnez Erreurs de serveur HTTP. Pour Agrégation, sélectionnez Somme.
    • Sélectionnez Ajouter une métrique et, dans la liste déroulante Métrique, sélectionnez HTTP 4xx. Pour Agrégation, sélectionnez Somme.
    • Sélectionnez Ajouter une métrique et, dans la liste déroulante Métrique, sélectionnez Délai de réponse. Sous Agrégation, sélectionnez Moy.
  14. Dans la barre de menus de droite, sélectionnez Épingler au tableau de bord. Le volet Épingler au tableau de bord s’affiche. Sélectionnez l’onglet Créer.

  15. Dans la liste déroulante Nom du tableau de bord, entrez le nom de votre application web, puis sélectionnez Créer et épingler.

  16. Laissez le système s’exécuter pendant cinq minutes le temps qu’il se stabilise et notez le temps processeur, le nombre d’erreurs HTTP 4xx et le temps de réponse moyen. Vous devriez voir un nombre significatif d’erreurs HTTP 4xx. Ces erreurs sont des erreurs HTTP 408 de dépassement de délai d’attente. Le temps de réponse moyen est de plusieurs secondes. Une erreur de serveur HTTP peut occasionnellement se produire si le serveur a du mal à supporter la charge de travail.

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

  17. Laissez l’application cliente s’exécuter pendant que vous effectuez la tâche suivante.

Effectuer le scale-out de l’application web et vérifier l’amélioration des performances

  1. Dans le portail Azure, sélectionnez le nom de votre application web (App Service) et, dans le volet du menu de gauche, sous Paramètres, sélectionnez Scale-out (plan App Service). Le volet Scale-out (plan App Service) s’affiche.

  2. Sous l’onglet Configurer, sélectionnez Mise à l’échelle manuelle, puis définissez Nombre d’instances sur 5. Sélectionnez Enregistrer.

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

  3. Basculez vers l’instance Cloud Shell qui exécute l’application cliente. Vous devriez voir une diminution du nombre de requêtes qui échouent avec des erreurs, même si certaines dépassent encore le délai d’attente.

  4. Exécutez l’application pendant cinq minutes de plus. Ensuite, accédez ensuite au graphique où figurent les métriques de l’application dans le tableau de bord du portail Azure. Vous devriez voir une augmentation considérable du temps processeur sachant que la puissance processeur disponible est désormais cinq fois supérieure. Le temps de réponse moyen devrait baisser, tout comme le nombre d’erreurs HTTP 4xx. Le graphique suivant présente un ensemble de résultats types. Le moment où le scale-up s’est produit est indiqué.

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

  5. Si vous souhaitez poursuivre vos expérimentations, essayez de faire passer le nombre d’instances du plan App Service à 10. Le nombre maximal d’instances prises en charge par le niveau S1 est de 10. Vous devriez constater une nouvelle augmentation du temps processeur ainsi qu’une baisse correspondante du temps de réponse et des erreurs HTTP 4xx.

  6. Revenez à l’instance Cloud Shell qui exécute l’application cliente. Sélectionnez Entrée pour arrêter l’application.

  7. Dans le portail Azure, réaffectez la valeur 1 au nombre d’instances. Sélectionnez votre application web et, dans le volet du menu de gauche, sélectionnez Scale-out (plan App Service). Sous l’onglet Configurer, définissez le nombre d’instances sur 1, puis sélectionnez Enregistrer.