Durant la période 2000 – 2004, quand je travaillais avec Biztalk serveur 2000 et 2002, j'ai toujours souhaité avoir un outil qui me permettait de réaliser des tests de charge et de disponibilité sur mes plateformes de production sans écrire de composants ou code spécifiques.

Heureusement, Microsoft a mis à notre disposition un outil gratuit pour stresser les plateformes BizTalk, fonctionnant essentiellement en ligne de commande : LoadGen. La première version est sortie il y a deux ou 3 ans à destination de  Biztalk serveur 2004, puis en novembre de l'année dernière une nouvelle version est apparue : LoadGen 2007

Il y avait plusieurs motivations pour cette nouvelle version :. La première version n'a pas eu beaucoup de succès  auprès de la communauté. L’arrivée de Biztalk 2006 et Biztalk 2006 R2 ont apporté plusieurs nouveautés, particulièrement les adaptateurs WCF et les fonctionnalités RFID.

L'outil est simple d’utilisation mais la documentation n’est pas bien détaillée et j'ai souffert un peu et « googlé » avant de réussir mon premier test de montée en charge. Dans cet article, je vais m’appuyer sur un scénario de prise de commande qui me permettra d’illustrer l’utilisation de LoadGen 2007 pour simuler la présence d’une charge sur une plateforme Biztalk. Si vous souhaitez reproduire les exemples, il vous faudra d'abord télécharger l'outil Microsoft BizTalk LoadGen 2007 et l'installer.

L'outil se compose principalement d'un exécutable appelé LoadGenConsole.exe qui consomme un fichier de configuration au format xml dans lequel se trouvent tous les paramètres nécessaires pour simuler notre scénario. Le processus testé dans ce scenario est basé sur un des exemples du livre Microsoft® BizTalk® serveur 2004 écrit par Scott Woodgate.(CF :  le chapitre 9, sample orchestration solution).

Le processus principal effectue les actions suivantes : il réceptionne une commande, vérifie le montant du crédit autorisé pour le client,, et valide la commande si le coût est inférieur au montant autorisé. Si la commande est validée, il envoie un message à l’usine pour la planification de celle-ci. (Cette opération est simulée en envoyant un fichier dans un répertoire physique). En parallèle, le processus renvoi également un message d’acquittement au client indiquant le statut de la commande.

Le contrôle du crédit autorisé est fait en appelant une deuxième orchestration qui appelle à son tour un composant .Net

Comme indiqué dans le livre, bien que très simplifié par rapport à un processus d’achat réel, cette implémentation met en avant un certain nombre de techniques et de fonctionnalités de BizTalk Server. Ci-dessous une copie c'écran de l'orchestration
Simple orchestration
Microsoft Loadgen 2007 est livré avec plusieurs exemples de fichiers de configuration qui peuvent être adaptés à vos besoins. Pour notre scénario de test de charge, nous devons tout d'abord créer un fichier de configuration. J'ai choisi de partir du fichier FileToFileG.xml qui se trouve dans le répertoire ConfigFiles \ de consoleConfigFiles et je l'ai appelé FileToFileLG_MessageCreator.xml, copie d’écran ci-dessous.
 
Config

Les tags qui nous intéressent le plus sont :

< NumThreadsPerSection> : spécifie combien de threads concurrent  vont exécuter le test.

< LotSizePerInterval>  : spécifie combien de messages seront envoyés au port de destination dans chaque lot

< StopMode>  : spécifie les conditions d'arrêt par défaut pour l’ensemble des tâches Dans ma configuration, je veux que LoadGen 2007 envoie 4000 messages mais s'arrête après 1 heure dans tous les cas.

< Transport> : permet de préciser le  protocole à utiliser Dans notre cas on utilise l’adapteur  fichier. LoadGen supporte de nombreux protocoles tels que WCF,  SOAP, HTTP .....

Dans le fichier, nous trouvons ensuite un élément appelé « section ». Cet élement décrit les tâches à exécuter par LoadGen. Parmi les possibilités qui nous sont offertes pour générer les messages à soumettre, nous avons le choix entre un système que je caractériserai de « statique »  et un modèle dynamique. Dans le modèle statique, on fourni à loadgen le chemin d’accès vers un fichier à utiliser pour toutes les soumissions. Dans le modèle dynamique, il est possible de préciser à partir d’un modèle de paramètres, comment créer des messages personnalisés.  On parlera suivant le modèle utilisé, de messages statiques ou dynamiques. Je montrerai plus tard comment configurer un générateur de message (messages dynamiques).


Dans tous les cas la première étape consiste à créer un modèle de message au format attendu par l’orchestration. Une fois cette étape effectuée, vous indiquez le chemin d’accès complet à ce fichier dans la balise <Section/SrcFilePath>. Ensuite, nous devons bien évidemment fournir le répertoire dans lequel les messages doivent être générés  Ceci s’effectue grâce à la balise <Section/paramètres/DtsFilepath>. Dans notre cas, il s’agit du répertoire « POIn » .

Voici une copie d’écran du message qui va servir de modèle pour la génération. Vous pouvez constater qu’il s’agit d’une commande au format attendu par l’orchestration.

Template

Une autre balise importante dans l'élément section est la balise « MessageCreator ». Ici nous  avons plusieurs paramètres à préciser :

< Mode> : spécifie le comportement (synchrone ou asynchrone) de l’opération, vous pouvez trouvez plus de détails dans la documentation de LoadGen.

< SleepInterval> : spécifie en millisecondes le délai entre chaque génération de lot de messages.

< TemplateFilePath> : le fichier de configuration pour la génération dynamique de message. Ce fichier sera utilisé par le composant de création de message indiqué dans la balise <assembly>. Comme vous pouvez voir dans la copie d’écran suivante,

Generator

Dans ce fichier, nous définissons les types et les valeurs de chaque champ de notre modèle pour lesquels nous souhaitons générer dynamiquement le contenu. Ceci fait par la création d’une balise <Field> pour chacun des  champs concernés.

LoadGen générera alors des valeurs pour chacun de ces champs en respectant le type, les valeurs minimales et maximales. Il est également possible de paramétrer le champs pour ne pas générer de doublons

De plus, nous pouvons également fournir une liste de valeurs  à utiliser pour un champ donné. Dans notre cas les valeurs de « CustID » sont fixées par une liste  Pour ce faire, J'ai créé un fichier de données appelé CustData.txt où j'ai écrit quelques numéros des comptes client factices que je veux utiliser dans mes messages. Les données sont séparées par un caractère pipe(« | »). Il ne nous reste plus qu’à préciser à l’aide de la balise <InputFilepath> où est le fichier contenant les valeurs à utiliser. Voici comment le fichier de données se présente :

Customdata

Une fois que tous ces fichiers sont configurés, vous pouvez démarrer le test de charge en lançant en ligne de commande  :

C:\Program Files\LoadGen\Bins>LoadGenConsole "E:\Projects\FileToFileLG_MessageCreator.xml"

Vous devriez voir sur l’écran des indicateurs de progression de test et un message de fin de test. La première chose à noter ici est le taux affiché sur l'écran qui est un premier indicateur significatif.

LoadgenCapture

Ma plateforme Biztalk 2006 R2 fonctionne à l'intérieur d'une machine virtuelle sur un serveur quadri-cœur,  avec 4Go de RAM (dont 1Go alloué à la VM Biztalk). Le taux moyen d’envoi des messages est de 428 messages par seconde pour ce premier essai.

Bien évidemment, Il est très intéressant, pendant la simulation de charge, d'observer/enregistrer les compteurs de performance appropriés.

Parmi les autres lectures, je vous conseille un autre article à propos de LoadGen qui décrit étape par étape un test de charge en s’appuyant sur un adaptateur WCF

http://connectedthoughts.wordpress.com/2007/11/05/loadgen-2007-and-a-simple-biztalk-wcf-test/

Enfin, je voudrais mentionner que les copies d’écran ont été réalisés avec un outil open source et gratuit appelé Cropper, écrit par Brian Scott en C# : C’est un magnifique petit outil, facile à installer et à utiliser.

Publié le 06/05/2008  par Salam Elias