Didacticiel : exécuter un test de charge pour identifier les goulots d’étranglement de performances dans une application Web
Dans ce didacticiel, vous allez apprendre à identifier les goulots d’étranglement de performances dans une application Web à l’aide du test de charge Azure. Vous allez créer un test de charge pour un exemple d’application Node.js.
L’exemple d’application se compose d’une API web Node.js qui interagit avec une base de données NoSQL. Vous allez déployer l’API web pour Azure App Service des applications web et utiliser Azure Cosmos DB en tant que base de données.
En savoir plus sur les concepts clés du Test de charge Azure.
Ce didacticiel vous montre comment effectuer les opérations suivantes :
- Déployer l’exemple d’application.
- créer et exécuter un test de charge.
- Identifier les goulots d’étranglement des performances dans l’application.
- Supprimez un goulot d’étranglement.
- Réexécutez le test de charge pour vérifier les améliorations des performances.
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, version 2.2.0 ou ultérieure. Exécutez
az --version
pour rechercher la version installée sur votre ordinateur local. 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.
Déployer l’exemple d’application
Avant de pouvoir charger le test de l’exemple d’application, vous devez le déployer et l’exécuter. Utilisez les commandes Azure CLI, les commandes Git et les commandes PowerShell pour ce faire.
Ouvrez Windows PowerShell, connectez-vous à Azure, puis définissez l’abonnement :
az login az account set --subscription <your-Azure-Subscription-ID>
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.
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
À 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.
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.Pour afficher les composants de l’application, connectez-vous au portail Azure et accédez au groupe de ressources que vous avez créé.
Maintenant que l’application est déployée et en cours d’exécution, vous pouvez exécuter votre premier test de charge sur celle-ci.
Configurer et créer le test de charge
Dans cette section, vous allez créer un test de charge à l’aide d’un exemple de script de test Apache JMeter.
Le référentiel source de l’exemple d’application comprend un script Apache JMeter nommé SampleApp.jmx. Ce script effectue trois appels d’API à l’application web sur chaque itération de test :
add
: effectue une opération d’insertion de données sur Azure Cosmos DB pour le nombre de visiteurs sur l’application web.get
: effectue une opération GET à partir d’Azure Cosmos DB pour récupérer le nombre.lasttimestamp
: met à jour l’horodatage de l’accès du dernier utilisateur au site web.
Notes
L’exemple de script Apache JMeter requiert deux plug-ins : Custom Thread Groups
et Throughput Shaping Timer
. Pour ouvrir le script sur votre instance Apache JMeter locale, vous devez installer les deux plug-ins. Pour ce faire, vous pouvez utiliser le Gestionnaire de plug-ins Apache JMeter.
Créer la ressource de test de charge Azure
La ressource de test de charge Azure est une ressource de haut niveau pour vos activités de test de charge. Cette ressource fournit un emplacement centralisé pour afficher et gérer les tests de charge, les résultats des tests et les artefacts associés.
Si vous avez déjà une ressource de test de charge, ignorez cette section et allez à Créer un test de charge.
Si vous n’avez pas encore de ressource de test de charge Azure, créez-en une maintenant :
Connectez-vous au Portail Azure à l’aide des informations d’identification de votre abonnement Azure.
Sélectionnez le bouton du menu en haut à gauche du portail, puis +Créer une ressource.
Utilisez la barre de recherche pour rechercher les tests de charge Azure.
Sélectionnez Test de charge Azure.
Dans le volet Test de charge Azure , sélectionnez Créer.
Fournissez les informations suivantes pour configurer votre nouvelle ressource de test de charge Azure :
Champ Description Abonnement Sélectionnez l’abonnement Azure que vous souhaitez utiliser pour cette ressource de test de charge Azure. Groupe de ressources Sélectionnez un groupe de ressources existant. Cliquez sur Créer nouveau, puis entrez un nom unique pour le nouveau groupe de ressources. Nom Entrez un nom unique pour identifier votre ressource de test de charge Azure.
Le nom ne peut pas contenir de caractères spéciaux, tels que \/"" [] :| <> + =;, ? * @ & ou une espace vide. Le nom ne peut pas commencer par un trait de soulignement (_) et ne peut pas se terminer par un point (.) ou un trait d’union (-). Sa longueur doit être comprise entre 1 et 64 caractères.Lieu Sélectionnez un emplacement géographique pour héberger votre ressource de test de charge Azure.
Cet emplacement détermine également où les moteurs de test sont hébergés et d’où proviennent les demandes du client JMeter.Notes
Vous pouvez aussi configurer plus de détails sous l’onglet Étiquettes. Les étiquettes sont des paires nom/valeur qui vous permettent de catégoriser les ressources et d’afficher une facturation centralisée en appliquant la même étiquette à plusieurs ressources et groupes de ressources.
Lorsque vous avez terminé de configurer la ressource, sélectionnez Vérifier + créer.
Passez en revue tous les paramètres de configuration et sélectionnez Créer pour démarrer le déploiement de la ressource de test de charge Azure.
Une fois le processus terminé, un message indiquant la réussite du déploiement s’affiche.
Pour afficher la nouvelle ressource, sélectionnez Accéder à la ressource.
Si vous le souhaitez, vous pouvez gérer l’accès à votre ressource de Test de charge Azure.
Le test de charge Azure utilise le contrôle d’accès en fonction du rôle (RBAC) pour gérer les autorisations de votre ressource. Si vous rencontrez ce message, votre compte ne dispose pas des autorisations nécessaires pour gérer les tests.
Créer un test de charge
Vous créez ensuite un test de charge dans votre ressource de test de charge pour l’exemple d’application. Vous créez le test de charge au moyen d’un script JMeter existant dans l’exemple de référentiel d’application.
Rendez-vous dans votre ressource de test de charge et sélectionnez Créer dans la page Vue d’ensemble .
Dans l’onglet Notions de base, entrez le Nom du test et les informations de Description du test . Si vous le souhaitez, vous pouvez activer la case à cocher Exécuter le test après la création pour démarrer automatiquement le test de charge après l’avoir créé.
Sous l’onglet plan de test , sélectionnez la méthode de test script JMeter , puis sélectionnez le script de test SampleApp.jmx dans le répertoire cloné de l’exemple d’application. Ensuite, sélectionnez Télécharger pour télécharger le fichier sur Azure et configurer le test de charge.
Si vous le souhaitez, vous pouvez sélectionner et télécharger des fichiers de configuration Apache JMeter supplémentaires ou d’autres fichiers référencés dans le fichier JMX. Par exemple, si votre script de test utilise des jeux de données CSV, vous pouvez télécharger le ou les fichiers .csv correspondants.
Dans l’onglet Paramètres, ajoutez une nouvelle variable d’environnement. Entrez webapp pour le Nom et pour la Valeur. Remplacez le texte d’espace réservé
<yourappname>
par l’URL de l’exemple d’application récemment déployé. N’incluez pas les préfixeshttps://
.Le script de test Apache JMeter utilise la variable d’environnement pour récupérer l’URL de l’application web. Le script appelle ensuite les trois API dans l’application web.
Dans l'onglet Chargement, configurez les détails suivants. Pour ce tutoriel, vous pouvez laisser la valeur par défaut.
Paramètre Valeur Description Instances du moteur 1 Nombre de moteurs de test parallèles qui exécutent le script Apache JMeter. Sous l’onglet analyse, spécifiez les composants d’application que vous souhaitez analyser avec les métriques de ressources. Sélectionnez Ajouter/modifier pour gérer la liste des composants d’application.
Sélectionnez Vérifier + Créer, vérifiez les paramètres, puis sélectionnez Créer.
Notes
Vous pouvez mettre à jour la configuration de test à tout moment, par exemple pour télécharger un autre fichier JMX. Choisissez votre test dans la liste des tests, puis sélectionnez Modifier.
Exécuter le test de charge dans le Portail Azure
Dans cette section, vous allez utiliser la Portail Azure pour démarrer manuellement le test de charge que vous avez créé précédemment. Si vous avez activé la case à cocher Exécuter le test après la création , le test est déjà en cours d’exécution.
Sélectionnez Tests pour afficher la liste des tests, puis sélectionnez le test que vous avez créé.
Conseil
Vous pouvez utiliser la zone de recherche et le filtre d’Intervalle de temps pour limiter le nombre de tests.
Dans la page de détails du test, sélectionnez Exécuter ou Exécuter le test. Sélectionnez ensuite Exécuter dans le volet de confirmation Exécuter le test pour démarrer le test de charge.
Le test de charge Azure commence à surveiller et à afficher les métriques de serveur de l’application sur le tableau de bord.
Vous pouvez voir les métriques côté client de diffusion en continu pendant que le test est en cours d’exécution. Par défaut, les résultats sont actualisés automatiquement toutes les cinq secondes.
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.
Identifier les goulots d’étranglement des performances
Dans cette section, vous allez analyser 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.
Tout d’abord, examinez les métriques côté client. Vous remarquerez que le dixième centile de la métrique de Temps de réponse pour les requêtes d'
get
API et est plus élevé que pour l'lasttimestamp
API.Vous pouvez voir un modèle similaire pour les Erreurs, où l' API présente moins d’erreurs que les autres API.
Les résultats des
add
API etget
sont similaires, tandis que l'lasttimestamp
API se comporte différemment. La cause peut être liée à la base de données, car lesadd
get
API et impliquent l’accès à la base de données.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.
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.
Examinez maintenant les métriques côté serveur 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 avoir provoqué des erreurs de limitation de base de données. Il peut également avoir des temps de réponse accrus pour les
add
etget
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 allez allouer plus de ressources à la base de données, afin de 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 :
Accédez à la ressource Azure Cosmos DB que vous avez configurée dans le cadre du déploiement de l’exemple d’application.
Ouvrez le volet Explorateur de données.
Sélectionnez mettre à l' échelle Paramètreset mettez à jour la valeur de débit sur 1200.
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 :
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.
Vous verrez une nouvelle entrée de série de tests avec une colonne d’État qui parcourt les États de Provisionnement, d' Exécutionet Terminé . À tout moment, sélectionnez la série de tests pour surveiller la progression du test de charge.
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.
Vérifiez les métriques côté serveur pour Azure Cosmos DB et assurez-vous que les performances ont été améliorées.
La valeur de consommation du RU normalisé Azure Cosmos DB est désormais bien inférieure à 100%.
Maintenant que vous avez modifié les paramètres de mise à l’échelle de la base de données, vous pouvez constater que :
- Le temps de réponse des
add
etget
API a été amélioré. - 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 :
Sélectionnez le bouton du menu en haut à gauche, puis Groupes de ressources.
Dans la liste, sélectionnez le groupe de ressources créé.
Sélectionnez Supprimer le groupe de ressources.
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.
Étapes suivantes
Passez au didacticiel suivant pour apprendre à configurer un flux de travail de test de régression automatisé à l’aide de Azure Pipelines ou GitHub Actions.