Partager via


Didacticiel : exécuter un test de charge pour identifier les goulots d’étranglement de performances dans une application Web

Dans ce tutoriel, vous allez apprendre à identifier les goulots d’étranglement de performances dans une application web en utilisant Azure Load Testing. Vous simulez la charge pour un exemple d’application web Node.js, puis utilisez le tableau de bord de test de charge pour analyser les métriques côté client et côté serveur.

L’exemple d’application se compose d’une API web Node.js qui interagit avec une base de données NoSQL. Vous déployez l’API web pour Azure App Service Web Apps et utilisez Azure Cosmos DB comme base de données.

Dans ce tutoriel, vous allez apprendre à :

  • Déployer l’exemple d’application.
  • Créer et exécuter un test de charge.
  • Ajoutez des composants d’application Azure au test de charge.
  • Identifiez les goulots d’étranglement de performances à l’aide du tableau de bord de test de charge.

Conditions préalables

  • Un compte Azure avec un abonnement actif. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
  • Azure CLI installé sur votre ordinateur local.
  • Azure CLI, version 2.2.0 ou ultérieure. Exécutez az --version pour rechercher la version installée sur votre ordinateur. Si vous devez installer ou mettre à niveau Azure CLI, consultez Installer Azure CLI 2.0.
  • Visual Studio Code. Si ce n’est déjà fait, téléchargez et installez-le.
  • Git. Si ce n’est déjà fait, téléchargez et installez-le.

Vérification des prérequis

Avant de commencer, vérifiez votre environnement :

Déployer l’exemple d’application

Dans ce tutoriel, vous générez une charge sur un exemple d’application web que vous déployez sur Azure App Service. Utilisez des commandes Azure CLI, des commandes Git et des commandes PowerShell pour déployer l’exemple d’application dans votre abonnement Azure.

  1. Ouvrez Windows PowerShell, connectez-vous à Azure, puis définissez l’abonnement :

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. Clonez le référentiel source de l’exemple d’application :

    git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
    

    L’exemple d’application est une application Node.js constituée d’un composant web Azure App Service et d’une base de données Azure Cosmos DB. Le référentiel contient un script PowerShell qui déploie l’exemple d’application sur votre abonnement Azure. Il comporte également un script Apache JMeter que vous utiliserez dans les étapes ultérieures.

  3. Accédez au répertoire de l’application Node.js et déployez l’exemple d’application à l’aide de ce script PowerShell :

    cd nodejs-appsvc-cosmosdb-bottleneck
    .\deploymentscript.ps1
    

    Conseil / Astuce

    Vous pouvez installer PowerShell sur Linux/WSL ou macOS.

    Après l’avoir installé, vous pouvez exécuter la commande précédente en tant que pwsh ./deploymentscript.ps1.

  4. À l’invite, fournissez :

    • Votre ID d’abonnement Azure.
    • Un nom unique à votre application web.
    • Un emplacement. Par défaut, l'emplacement est eastus. Vous pouvez obtenir des codes de région en exécutant la commande Get-AzLocation.

    Important

    Pour le nom de votre application Web, utilisez uniquement des lettres minuscules et des chiffres. N’utilisez pas d’espaces ou de caractères spéciaux.

  5. Une fois le déploiement terminé, accédez à l’exemple d’application en cours d’exécution en ouvrant https://<yourappname>.azurewebsites.net dans une fenêtre de navigateur.

Maintenant que l’exemple d’application est déployé et en cours d’exécution, vous pouvez créer une ressource de test de charge Azure et un test de charge.

Créer un test de charge

Dans ce tutoriel, vous créez un test de charge avec Azure CLI en chargeant un script de test JMeter (fichier jmx). L’exemple de référentiel d’application contient déjà un fichier de configuration de test de charge et un script de test JMeter.

Pour créer un test de charge à l’aide du Portail Azure, suivez les étapes dans Démarrage rapide : créer un test de charge avec un script JMeter.

Suivez ces étapes pour créer une ressource de test de charge Azure et un test de charge à l’aide d’Azure CLI :

  1. Ouvrez une fenêtre de terminal et entrez la commande suivante pour vous connecter à votre abonnement Azure.

    az login
    
  2. Accédez au répertoire de l’exemple d’application.

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. Créez un groupe de ressources pour la ressource de test de charge Azure.

    Si vous le souhaitez, vous pouvez également réutiliser le groupe de ressources de l’exemple d’application que vous avez déployé précédemment.

    Remplacez l’espace réservé au texte <load-testing-resource-group-name> par le nom du groupe de ressources.

    resourceGroup="<load-testing-resource-group-name>"
    location="East US"
    
    az group create --name $resourceGroup --location $location
    
  4. Créez une ressource de test de charge Azure avec la commande az load create.

    Remplacez l’espace réservé au texte <load-testing-resource-name> par le nom de la ressource de test de charge.

    # This script requires the following Azure CLI extensions:
    # - load
    
    loadTestResource="<load-testing-resource-name>"
    
    az load create --name $loadTestResource --resource-group $resourceGroup --location $location
    
  5. Créez un test de charge pour simuler la charge sur votre exemple d’application avec la commande az load test create.

    Remplacez l’espace réservé au texte <web-app-hostname> par le nom d’hôte App Service de l’exemple d’application. Cette valeur se présente sous la forme myapp.azurewebsites.net. N’incluez pas la partie https:// de l’URL.

    testId="sample-app-test"
    webappHostname="<web-app-hostname>"
    
    az load test create --test-id $testId --load-test-resource $loadTestResource --resource-group $resourceGroup --load-test-config-file SampleApp.yaml --env webapp=$webappHostname
    

    Cette commande utilise le fichier de configuration de test de charge Sampleapp.yaml, qui fait référence au script de test JMeter SampleApp.jmx. Vous utilisez un paramètre de ligne de commande pour transmettre le nom d’hôte de l’exemple d’application au test de charge.

Vous disposez maintenant d’une ressource de test de charge Azure et d’un test de charge pour générer la charge par rapport à l’exemple d’application web dans votre abonnement Azure.

Ajouter des composants d’application Azure pour surveiller l’application

Azure Load Testing vous permet de surveiller les métriques de ressources pour les composants Azure de votre application. En analysant ces métriques côté serveur, vous pouvez identifier les problèmes de performances et de stabilité dans votre application directement à partir du tableau de bord Azure Load Testing.

Dans ce tutoriel, vous ajoutez les composants Azure pour l’exemple d’application que vous avez déployé sur Azure, comme le service d’application, le compte Cosmos DB, etc.

Pour ajouter les composants d’application Azure pour l’exemple d’application à votre test de charge :

  1. Dans le portail Azure, accédez à votre ressource de test de charge Azure.

  2. Dans le volet gauche, sélectionnez Tests pour afficher la liste des tests de charge

  3. Cochez la case en regard de votre test de charge, puis sélectionnez Modifier.

    Capture d’écran montrant la liste des tests de charge dans le Portail Azure, montrant comment sélectionner un test dans la liste et le bouton Modifier pour modifier la configuration du test de charge.

  4. Accédez à l’onglet Surveillance, puis sélectionnez Ajouter/Modifier.

  5. Cochez les cases de l’exemple d’application que vous avez déployé précédemment, puis sélectionnez Appliquer.

    Capture d’écran montrant comment ajouter des composants d’application à un test de charge dans le Portail Azure.

    Conseil / Astuce

    Vous pouvez utiliser le filtre de groupe de ressources pour n’afficher que les ressources Azure dans l’exemple de groupe de ressources d’application.

  6. Sélectionnez Appliquer pour enregistrer les modifications apportées à la configuration du test de charge.

Vous avez ajouté les composants d’application Azure pour l’exemple d’application à votre test de charge afin d’activer la surveillance des métriques côté serveur pendant l’exécution du test de charge.

Exécuter le test de charge

Vous pouvez maintenant exécuter le test de charge pour simuler la charge sur l’exemple d’application que vous avez déployé dans votre abonnement Azure. Dans ce tutoriel, vous exécutez le test de charge à partir du Portail Azure. Vous pouvez également configurer votre workflow CI/CD pour exécuter votre test de charge.

Pour exécuter votre test de charge dans le Portail Azure :

  1. Dans le portail Azure, accédez à votre ressource de test de charge Azure.

  2. Dans le volet gauche, sélectionnez Tests pour afficher la liste des tests de charge

  3. Sélectionnez le test de charge dans la liste pour afficher les détails du test et la liste des séries de tests.

  4. Sélectionnez Exécuter, puis Exécuter une nouvelle fois pour démarrer le test de charge.

    Si vous le souhaitez, vous pouvez entrer une description de série de tests.

    Capture d’écran montrant comment modifier un test de charge dans le portail Azure.

    Lorsque vous exécutez un test de charge, Azure Load Testing déploie le script de test JMeter et tous les fichiers supplémentaires sur la ou les instances du moteur de test, puis démarre le test de charge.

  5. Lorsque le test de charge démarre, vous devez voir le tableau de bord du test de charge.

    Si le tableau de bord ne s’affiche pas, vous pouvez sélectionner Actualiser, puis sélectionner l’exécution de test dans la liste.

    Le tableau de bord de test de charge présente les détails de l’exécution de test, tels que les métriques côté client et les métriques d’application côté serveur. Les graphiques du tableau de bord s’actualisent automatiquement.

    Capture d’écran montrant les graphiques de métriques côté client dans le tableau de bord de test de charge dans le Portail Azure.

    Vous pouvez appliquer plusieurs filtres ou agréger les résultats à différents centile pour personnaliser les graphiques.

    Conseil / Astuce

    Vous pouvez arrêter un test de charge à tout moment à partir de la Portail Azure en sélectionnant Arrêter.

Attendez que le test de charge se termine complètement avant de passer à la section suivante.

Utiliser des métriques côté serveur pour identifier les goulots d’étranglement des performances

Dans cette section, vous analysez les résultats du test de charge pour identifier les goulots d’étranglement de performances dans l’application. Examinez les métriques côté client et côté serveur pour déterminer la cause racine du problème.

  1. Tout d’abord, examinez les métriques côté client. Vous remarquez que le 90e centile de la métrique Temps de réponse pour les demandes d’API add et get est supérieur à celui de l’API lasttimestamp .

    Capture d’écran montrant les métriques côté client.

    Vous pouvez voir un modèle similaire pour les Erreurs, où l' lasttimestamp API présente moins d’erreurs que les autres API.

    Capture d’écran montrant le graphique d’erreurs.

    Les résultats des add API et get sont similaires, tandis que l' lasttimestamp API se comporte différemment. La cause peut être liée à la base de données, car les addget API et impliquent l’accès à la base de données.

  2. Pour examiner ce goulot d’étranglement plus en détail, faites défiler jusqu’à la section tableau de bord des métriques côté serveur .

    Les métriques côté serveur affichent des informations détaillées sur les composants de votre application Azure : Azure App Service plan, Azure App Service application web et Azure Cosmos DB.

    Capture d’écran montrant les métriques de plan Azure App Service.

    Dans les métriques du plan de Azure App Service, vous pouvez voir que les métriques pourcentage d’UC et pourcentage de mémoire se trouvent dans une plage acceptable.

  3. Examinez maintenant les métriques côté serveur Azure Cosmos DB.

    Capture d’écran montrant les métriques Azure Cosmos DB.

    Notez que la mesure de consommation RU normalisée indique que la base de données s’exécutait rapidement à 100% d’utilisation des ressources. L’utilisation élevée des ressources peut entraîner des erreurs de limitation de base de données. Cela peut également augmenter les temps de réponse des API web add et get.

    vous pouvez également voir que la mesure de débit approvisionnée pour l’instance de Azure Cosmos DB a un débit maximal de 400 unités de débit. L’amélioration du débit approvisionné de la base de données peut résoudre le problème de performances.

Augmenter le débit de la base de données

Dans cette section, vous allouez plus de ressources à la base de données pour résoudre le goulot d’étranglement des performances.

Pour Azure Cosmos DB, augmentez le paramètre de mise à l’échelle RU de la base de données :

  1. Accédez à la ressource Azure Cosmos DB que vous avez configurée dans le cadre du déploiement de l’exemple d’application.

  2. Ouvrez le volet Explorateur de données.

    Capture d’écran montrant l’onglet Explorateur de données.

  3. Sélectionnez Mise à l'échelle et paramètres et mettez à jour la valeur de débit sur 1200.

    Capture d’écran montrant les paramètres de mise à l’échelle Azure Cosmos DB mis à jour.

  4. Sélectionnez Enregistrer pour confirmer les modifications.

Valider les améliorations des performances

Maintenant que vous avez augmenté le débit de la base de données, réexécutez le test de charge et vérifiez que les résultats des performances ont été améliorés :

  1. Dans le tableau de bord de la série de tests, sélectionnez Réexécuter, puis réexécuter dans le volet Réexécuter le test.

    Capture d’écran montrant les sélections pour l’exécution du test de charge.

    Vous pouvez voir une nouvelle entrée de série de tests avec une colonne d’état qui parcourt les états Approvisionnement, En cours d’exécution et Terminé. À tout moment, sélectionnez la série de tests pour surveiller la progression du test de charge.

  2. Une fois le test de charge terminé, vérifiez les résultats du Temps de réponse et les résultats des Erreurs des métriques côté client.

  3. Consultez les métriques côté serveur pour Azure Cosmos DB et vérifiez que les performances ont été améliorées.

    Capture d’écran montrant les métriques côté client Azure Cosmos DB après la mise à jour des paramètres de mise à l’échelle.

    La valeur de consommation du RU normalisé Azure Cosmos DB est désormais bien inférieure à 100%.

Maintenant que vous avez mis à jour les paramètres de mise à l’échelle de la base de données, vous pouvez voir ce qui suit :

  • Le temps de réponse pour les API add et get a été amélioré.
  • La consommation de RU normalisée reste bien sous la limite.

Par conséquent, les performances globales de votre application se sont améliorées.

Nettoyer les ressources

Important

Vous pouvez réutiliser la ressource Test de charge Azure que vous avez créée pour d’autres tutoriels et articles de procédure relatifs à Test de charge Azure.

Si vous n’avez pas l’intention d’utiliser les ressources que vous avez créées, supprimez-les pour éviter la facturation de frais supplémentaires. Si vous avez déployé l’exemple d’application dans un autre groupe de ressources, vous pouvez répéter les étapes suivantes.

Pour supprimer des ressources à l’aide du Portail Azure :

  1. Sélectionnez le bouton du menu en haut à gauche, puis Groupes de ressources.

  2. Dans la liste, sélectionnez le groupe de ressources créé.

  3. Sélectionnez Supprimer le groupe de ressources. Capture d’écran des sélections permettant de supprimer un groupe de ressources dans le portail Azure.

  4. Entrez le nom du groupe de ressources. Puis sélectionnez Supprimer.

Pour supprimer des ressources à l’aide d’Azure CLI, entrez la commande suivante :

az group delete --name <yourresourcegroup>

N’oubliez pas que la suppression du groupe de ressources supprime toutes les ressources qu’il contient.