Interview de Philippe Mouawad – développeur et membre PMC du projet Apache JMeter

Après l'interview de Milamber, voici l'interview de Philippe Mouawad (développeur et membre PMC du projet Apache JMeter).

Présentation

Bonjour Philippe, peux-tu te présenter rapidement ?

J'ai démarré dans le développement objet C++ en 2000 et depuis 12 ans je suis dans le développement J2EE.
Je travaille pour Ubik-ingénierie, une SSII implantée dans le Nord et sur Paris depuis 7 ans sur 3 types de missions :

  • Gestion de projets
  • Développement de briques logicielles réutilisables dans divers domaines dont le test de charges, le batch, les POCs
  • Tests de montée en charge, profiling, optimisations et tuning

Depuis 3 ans, mon travail s'est concentré sur les problématiques de mobilité (Android, IPhone) et je travaille actuellement sur un projet passionnant alliant :

  • La problématique multi plate-forme : Un développement => N déploiements
  • La sécurité
  • Les modes connectés/déconnectés

Côté JMeter, j'ai soumis mon premier patch en décembre 2008 et depuis octobre 2011 je suis committer et membre du PMC Jmeter.

Apache JMeter

Pourquoi participer à JMeter et pas un autre ?

J'ai contribué à d'autres projets Open-source avant dont Commons-dbcp, Ofbiz, Tomcat JDBC Pool toujours en lien avec mon travail.

En ce qui concerne JMeter, j'ai commencé par quelques patchs qui me bloquaient lors de mes missions, puis comme nous développons dans notre société un outillage de montée en charge autour de JMeter, mes contributions sur le sujet se sont intensifiées

Compte tenu des connaissances acquises sur le code source de JMeter j'ai décidé de contribuer plus activement sur le plan personnel (soirs, weekend) aux corrections et évolutions.

J'aime bien ce projet parce que l'équipe est vraiment motivée, et la communauté d'utilisateurs est très volontaire sur les mailing lists.
Les nouveaux arrivants sont très vite aidés, et à leur tour ils se mettent à aider les autres. Il y a une sorte de fraternité qui me plaît 🙂

Avant que je devienne Commiter mes patchs étaient pris en compte très vite alors que sur d'autres projets je devais attendre plusieurs mois.
 

Que pense tu des nouveaux concurrents open source de JMeter (en particulier Gatling, Tsung et du tout nouveau Iago de twitter) ?

Gatling semble intéressant pour son approche multiplexée, le projet reste jeune aujourd'hui, mais prometteur.
Je n'ai pas regardé TSung.
Pour Iago c'est à priori plus une brique logicielle qu'un outil autonome, mais vu son éditeur c'est une solution à suivre.

Souvent, on me dit que la partie injection (puissance nécessaire pour simuler beaucoup d'utilisateurs) et reporting de JMeter est son point faible, qu'en penses-tu ?

Milamber a dit l'essentiel sur la partie injection dans votre interview, je pense que cette « limitation » n'en est clairement pas une.
J'ai utilisé JMeter pour faire des tirs sur des sites E-commerce encaissant autour de 550 000 Visiteurs/jour et je n'ai pas constaté de problèmes de ce côté. Et encore ce seuil n'était pas une limite de JMeter mais juste le besoin du client.

Mais pour autant nous poursuivons les optimisations en terme de performance et de gestion mémoire. Un certain nombre d'amélioration et corrections de fuites mémoires sont intervenues sur les versions 2.6 et 2.7 et je pense que ça va continuer.
Pour la partie reporting, je reconnais que le noyau a ses limites, mais des plugins existent.

Si oui, que fais-tu pour pallier cette faiblesse ?

Pour la partie Injection, je renvoie vers ce que décrit Milamber dans votre interview.

J'ajouterai qu'en mode tir distribué, il faut faire attention à la configuration du "mode" du SampleSender (propriété mode dans le fichier jmeter.properties) qui peut impacter les performances.
Cette classe gère la remontée des résultats des injecteurs vers le contrôleur, il y a différentes implémentations, il faut choisir la bonne.

Pour ce besoin, nous avons développé un mode inclus dans notre PACK qui permet d'optimiser encore plus le trafic inter-injecteurs ce qui nous permet de monter très haut en terme de VUs.

Et les points forts ?

Les points forts sont :

  • Son côté Open Source qui assure :
    • Une pérennité que n'apporte pas un produit totalement lié à une seule société
    • Une visibilité sur les problèmes éventuels du produit (BUGZILLA est public ainsi que le code source)
    • Une communauté large et très active sur les mailings lists, et une réactivité sur les corrections de bugs qui est à la hauteur de supports de solutions propriétaires
  • La richesse des protocoles déjà implémentés
  • Enfin le plus important, JMeter est construit en plugin, de ce fait il est très facile d'en créer de nouveaux. C'est cette architecture du produit qui garantit qu'il pourra sans trop d'efforts de développement traiter d'autres protocoles à l'avenir.

Peux-tu nous parler de quelques cas extrêmes (beaucoup de virtual user, protocole pas supporté par d'autres outils...) où tu as utilisé JMeter ?

J'ai deux cas auxquels je pense qui illustrent la puissance de JMeter :

  • Sur une mission où la charge à injecter était très élevée, nous avons dû passer en tir distribué, les modes (SampleSender) existants ne répondaient pas à nos besoins, mon collègue Benoît W. a développé un SampleSender optimisé, et soumis un patch permettant de le plugger. Le patch a été accepté en quelques jours, ce cas illustre à la fois l'extensibilité du produit et la réactivité des commiters
  • Une autre mission consistait à monter en charge des Webservices utilisant un algorithme de cryptage propriétaire. Nous avons réussi à tirer ce protocole grâce au Sampler BeanShell combiné au mécanisme de découverte de classes de JMeter. Je pense que cette mission n'aurait pas pu être réalisée aussi facilement avec un autre outil.

Peux-tu nous parler des futures évolutions de JMeter ?

Il n'y a pas de road map officielle, mais nous espérons pouvoir traiter les points suivants assez rapidement :

  • Permettre la création à la volée des threads JMeter plutôt que dès le début du tir pour répondre à une demande de Kirk Pepperdine
  • Permettre le sampling parallèle pour simuler de façon encore plus réaliste les requêtes Ajax, mais là ça va sûrement prendre un peu de temps
  • De mon côté, faire évoluer le sampler FTP pour permettre les sampling SFTP et FTPS

Et bien sûr les corrections de bugs qui pourraient être soumis entre temps.

Ton employeur a créé un package JMeter, peux-tu nous en dire plus ?

UBIK_LOAD_PACK est un assemblage de composants qui répondent aux besoins des différentes phases d'un test :

  • Phases Scripting & Tirs => les protocoles et le paramétrage :
    • Le pack propose des Plugins JMeter permettant de monter en charge les protocoles :
    • Plugin permettant d'améliorer la productivité dans le scripting d'applications utilisant JSON
    • Outil de paramétrage d'une campagne
  • Phase Tir => le Monitoring :
    • Outillage de détection de problèmes divers (deadlock ...)
    • Outillage de suivi des indicateurs principaux J2EE
  • Phase Post Tir => Le Reporting :
    • Génération de graphes d'analyse
    • Génération automatisée de comptes-rendus de tirs

Nous avons construit ce PACK au fur et à mesure de nos campagnes de tests, il bénéficie donc de nos retours d'expérience sur le sujet, et nous l'utilisons dans le cadre de nos missions de tests.

Construit autour de JMeter, il nous permet d'être compétitif par rapport à d'autres solutions qui partent de zéro.

Test de charge

Peux-tu nous donner 2-3 exemples qui montrent l'importance d'un test de charge avant la mise en production d'une application ?

trois exemples me viennent à l'esprit :

  • Un client qui après quelques incidents marquants en période de soldes a décidé de les préparer par des campagnes de tests, ceci lui a permis :
    • De sizer sa plate-forme de façon adéquate
    • De réaliser les optimisations nécessaires sur le code
    • Et ainsi de passer ces périodes de façon plus pérenne
  • Un client qui nous a sollicité suite à des problèmes sur une version de son site E-commerce, après une semaine d'instabilité un rollback de la version a été décidé. Après avoir diagnostiqué le problème, nous avons réalisé un test de charge comparatif axé sur ce point particulier, et ainsi pu valider que les correctifs livrés résolvaient le problème, le passage en production s'est ainsi fait plus sereinement.
  • A contrario, j'ai connaissance d'un site e-commerce grand public très connu qui le premier jour des soldes n'a pu encaisser la charge, résultat 45 commandes le premier jour des soldes !

Je pense que ces exemples montrent l'importance des tests de charge.
Le coût de ces tests, qui n'est pas bénin je le reconnais, est à mettre en rapport avec le coût d'une indisponibilité ou de lenteurs, l'impact sur l'image de marque, les clients mécontents, le chiffre d'affaire perdu...

Quel est pour toi l'aspect le plus important dans les tests de charge ?

Je pense que l'essentiel est de savoir les utiliser, j'entends par cela d'être capable pendant une campagne de proposer en direct les optimisations sur la plate-forme ou sur le code et de pouvoir les valider juste après.
Je pense que les campagnes menées par de simples testeurs qui n'ont pas de connaissance en terme de codage ou d'optimisation ne sont pas très utiles, à moins de mobiliser beaucoup d'experts de chaque domaine, ce qui renchérit le coût de la campagne et est souvent impossible compte tenu des plannings.
Un autre aspect critique est d'être réaliste, trop souvent vous avez deux extrêmes, des tirs trop violents pas du tout représentatif sur un jeu de données trop réduit ou au contraire des tests trop optimistes pour se rassurer et qui au final ne servent à rien.

Quel est le plus grand changement que tu as vu dans le monde du test de charge depuis tes débuts ?

Je n'ai pas vraiment assisté à de gros changements. J'ai juste l'impression que les clients en font de plus en plus.

Quels sont les problèmes que tu rencontres le plus souvent lors d'une campagne de test de charge ?

Les deux problèmes principaux sont la qualité du jeu de test et la représentativité de la plate-forme.
Le jeu de test est essentiel pour être réaliste et éviter notamment les effets de cache et autres problèmes.
Pour la plate-forme il est critique d'en avoir une iso prod ou de tirer sur la production mais dans ce cas, cela demande beaucoup de coordination, de préparation pour l'initialisation de la Base de données et les restaurations une fois les tests finis, et si le produit testé est en production il faut tirer de nuit ou le week-end ce qui renchérit encore les coûts.

Que penses-tu des outils de test de charge dans les nuages ?

C'est intéressant pour des sites grands publics, pour des intranets je vois moins l'intérêt.
Il faut s'assurer des bandes passantes pour le premier, des ouvertures de firewall pour le second et vérifier que ce dernier ne représentera pas un goulot artificiel. Finalement le temps gagné par la mise à disposition de l'infrastructure est perdu par les délais d'ouvertures de ports, les limites posés par les hébergeurs, les composants intermédiaires ... En résumé, je pense qu'il faut vérifier que l'approche CLOUD très à la mode en ce moment est vraiment utile à son cas d'utilisation.

Pour la partie tuning et profiling, tu utilise quoi comme outil ?

J'utilise JConsole, VisualVM, Visualgc et les outils fournis par les OS et notre outil de récupération de métriques.

Quelles qualités sont importantes pour devenir un bon testeur ?

Répondre à cette question suppose que je pense être un bon testeur 🙂 , je vais essayer, je dirais :

  • Une connaissance du codage, des protocoles en jeu et des plates-formes
  • La curiosité
  • L'écoute
  • La précision

Ton parcours

Je vois que tu blog aussi sur le site de ton employeur, peux-tu nous dire :

Pourquoi l'avoir créé ?

En fait, c'est plus un wiki qui regroupe d'autres articles, notamment sur une solution de Batchs en java d'Ubik-Ingénierie. Le wiki a été créé pour ce besoin initialement.
Je l'ai ensuite enrichi avec quelques articles sur JMeter. J'ai écrit le premier article suite à une demande sur la mailing-list JMeter que j'avais déjà traitée dans le cadre d'une mission.
Je me suis dit que ça pouvait aider certains comme les articles de Milamber ont pu m'aider au début.

Ce qu'il t'a apporté ?

Peut-être une visibilité supplémentaire ?

Combien de temps passes-tu dessus ?

Très peu de temps, une heure tous les trois mois je pense.

Comment es-tu devenu membre PMC de JMeter et développeur actif ?

C'était sur la version 2.5, mes patchs étaient très vite pris en compte par Sebb et Milamber ce qui m'a encouragé à poursuivre.
Après ces contributions sorties au sein de la 2.5.1, l'équipe Apache Jakarta (à l'époque) m'a proposé de devenir Commiter Apache, comme c'était un « petit rêve », j'ai accepté 🙂
Depuis j'ai essayé de m'impliquer encore plus pour mériter cette reconnaissance.

Tes conseils pour réaliser le même parcours que toi ?

Je n'ai pas de conseils particuliers. Je pense que chaque parcours est unique.
J'ai la chance d'être passionné par les problématiques de performance et de stabilité et par le développement, être commiter JMeter combine ces deux aspects, que demander de plus 🙂

Comment as-tu commencé dans les tests de charges ?

En fait, j'ai plutôt commencé sur le tuning et le profiling, j'adore trouver la cause des problèmes.
Et souvent sur ces missions il y a du suspens, une certaine tension car le projet est souvent en risque, du frisson :-). Tous ses aspects me plaisent, enfin quand je trouve 🙂
Finalement le test de charge est la prolongation naturelle de cette première passion 🙂 .

Mot de la fin

Quelque chose à ajouter ?

Merci d'avoir pensé à moi pour cet interview.
Et merci pour tes contributions à JMeter.

Une réponse à to “Interview de Philippe Mouawad – développeur et membre PMC du projet Apache JMeter”

  • jpl:

    L’un des points parmi les plus importants des tests de performance, outre les aspects techniques, est probablement la définition des objectifs de la (des) campagne(s) de tests. Le receuil des exigences est très difficile à réaliser car généralement les personnes « sachantes » ne savent pas exprimer ces exigences. Il faut donc les accompagner par un questionnement précis. C’est, selon moi, une tâche préparatoire absolumment essentielle qui va conditionner un certain nombre d’actions ultérieures. J’ajouterai que ces informations doivent également être exprimées en terme fonctionnel (versus technique). Par exemple si vous demandez à une personne le nombre d’utilisateurs simultanés, il est fort probable qu’il ne saura pas vous répondre précisémment. Par contre si vous demandez quel est le nombre de commandes que le système doit être capable d’absorber en une heure, le « marketing » pourra vous apporter des informations très précises sur les attentes de l’entreprise. Il sera donc également intéressant de communiquer les résultats des tests selon les mêmes axes d’analyse.

Laisser un commentaire

Merci d'effectuer cette opération simple pour valider le commentaire *

Mots-clés
RSS Feed