Tutoriel : 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 des performances dans une application web à l’aide d’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 sur des applications web Azure App Service 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 des performances à l’aide du tableau de bord de test de charge.

Prérequis

  • 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 de la configuration requise

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 qui se compose 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

    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 vous avez déployé et exécuté l’exemple d’application, 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 (jmx fichier). L’exemple de référentiel d’applications 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 de l’Portail Azure, suivez les étapes de démarrage rapide : créez un test de charge avec un script JMeter.

Procédez comme suit 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 à l’exemple de répertoire 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 <load-testing-resource-group-name> réservé de texte 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 az load create commande.

    Remplacez l’espace <load-testing-resource-name> réservé de texte 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 az load test create commande.

    Remplacez l’espace <web-app-hostname> réservé de texte par le nom d’hôte App Service de l’exemple d’application. Cette valeur est de la forme myapp.azurewebsites.net. N’incluez pas la https:// partie 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 Sampleapp.yaml test de charge, qui fait référence au SampleApp.jmx script de test JMeter. Vous utilisez un paramètre de ligne de commande pour passer l’exemple de nom d’hôte 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 sur 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. Sélectionnez la case activée box en regard de votre test de charge, puis sélectionnez Modifier.

    Screenshot that shows the list of load tests in the Azure portal, highlighting how to select a test from the list and the Edit button to modify the load test configuration.

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

  5. Sélectionnez les case activée boxes de l’exemple d’application que vous avez déployé précédemment, puis sélectionnez Appliquer.

    Screenshot that shows how to add app components to a load test in the Azure portal.

    Conseil

    Vous pouvez utiliser le filtre de groupe de ressources pour afficher uniquement 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 pour 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 flux de travail 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 exécutions de test.

  4. Sélectionnez Exécuter, puis Réexécutez pour démarrer le test de charge.

    Si vous le souhaitez, vous pouvez entrer une description d’exécution de test.

    Screenshot that shows how to start a load test in the Azure portal.

    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 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 sur le tableau de bord s’actualisent automatiquement.

    Screenshot that shows the client-side metrics graphs in the load test dashboard in the Azure portal.

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

    Conseil

    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 des 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 pour la métrique de temps de réponse pour les add demandes d’API est get supérieur à celui de l’API lasttimestamp .

    Screenshot that shows the client-side metrics.

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

    Screenshot that shows the error chart.

    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.

    Screenshot that shows the Azure App Service plan metrics.

    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.

    Screenshot that shows Azure Cosmos DB metrics.

    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. Il peut également augmenter les temps de réponse pour les API web et get les add API web.

    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 davantage 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.

    Screenshot that shows Data Explorer tab.

  3. Sélectionnez Scale &Paramètres et mettez à jour la valeur de débit sur 1200.

    Screenshot that shows the updated Azure Cosmos DB scale settings.

  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.

    Screenshot that shows selections for running the load test.

    Vous pouvez voir une nouvelle entrée d’exécution de test avec une colonne d’état qui passe par les états Provisioning, 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. Vérifiez les métriques côté serveur pour Azure Cosmos DB et vérifiez que les performances ont été améliorées.

    Screenshot that shows the Azure Cosmos DB client-side metrics after update of the scale settings.

    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 que :

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

Par conséquent, les performances globales de votre application ont été 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. Screenshot of the selections to delete a resource group in the Azure portal.

  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.