Retour d’expérience - Architecture MicroService chez BotsUnit
Session GWT Devoxx France 2012 Cobra
1. GWT à l'épreuve du feu
by Sami Jaber (DNG Consulting)
twitter @samijaber
http://www.dng-consulting.com
1
2. Abstract
• Qu'est-ce que le projet Cobra ?
• Une démo, une démo, une démo !
• Les défis techniques d'un tel projet
2
3. Speaker
• Consultant, formateur et fondateur de la société DNG Consulting,
spécialisée dans le développement d'applications JEE et .NET
• Auteur livre "Programmation GWT 2" paru chez Eyrolles
• http://www.dng-consulting.com : expertise technologies Google
• Blog : http://www.samijaber.com & Twitter : @samijaber
• Projet réalisé en commun avec Palo-IT (http://www.palo-it.com)
3
4. Arkadin & Cobra
Spécialiste des services de collaboration à Offrir le meilleur support possible à nos clients
distance (160M€ CA, 1000 Collaborateurs)
avec notamment, un temps d’attente ou de
Présence Globale (29 Pays, 25K Clients) avec résolution de problème le plus court possible
Forte Culture cliente locale (70% de nos
ressources humaines, 15 langues) Une application de gestion de conférences audio
& web, utilisée par les opérateurs de notre
11M Conférences, 40M de Participants, 2.5B de Service Client répartis sur un plan mondial (US,
Minutes UK, Asie, …)
4
5. Cobra en image
Support Level
Participants en
Liste des participants
conférence
5
7. L'architecture technique Cobra
clients
Ponts téléphoniques
Ponts téléphoniques
Plateforme Audio
Plateforme Audio
COM (Component Object Model)
COM (Component Object Model)
Cobra Cobra
Backend Backend
Cobra Server US Cobra Server UK
Console
Console Inter-Cobra communication
REST + RestEasy
Inter-Cobra communication
REST + RestEasy GWT
GWT
7
8. Pourquoi le choix GWT
• La culture et l'architecture en place dans la société aurait penché pour un
choix .NET en Silverlight ou Flash (des compétences que nous avons par
ailleurs)
• … Mais les contraintes de délais, la nécessité de supporter du quasi temps
réel et une ergonomie AJAX ont joué en faveur de GWT
• Aujourd'hui, après 2 ans de développement (équipe de 6 à 8 personnes),
ce choix s'avère plus que jamais pertinent
• On estime à +100% la productivité générée par ce choix technique
• Dans l'équipe, aucun développeur n'est un gourou de JavaScript et ne
souhaite le devenir, on aime Java !
8
9. Les défis techniques
• Un projet en mode agile
• Gestion du push sur HTTP (GWT EventService – Atmosphere)
• Ponts Java/COM, performances, fuites mémoire
• Code Splitting
• Tests fonctionnels avec Selenium
• Le monitoring (DevOps)
• Jboss 7.1, EJB 3/JPA 2
9
10. Gestion de projet en mode agile
• Des itérations relativement
courtes de 3 semaines JIRA
• Un outillage SCRUM complet :
JIRA, FishEye, SVN
Jenkins (intégration continue)
Confluence & Google docs
(documentation & tests)
FishEye
QA Director (tests
fonctionnels)
Transparence => Confiance
10
11. Défi technique principal : le push
• L'application nécessitait de pouvoir recevoir une centaine d'évènements
par seconde
• Notre choix s'est porté sur GWT EventService, un framework
OpenSource qui gère du short/long polling & streaming
• Nécessité de patcher pour gérer plus finement certaines déconnexions
réseau intempestives (merci l'Open Source!)
• Nous avons également étudié le projet Atmosphere, un excellent produit
même si peu mature au moment de notre évaluation
• Cobra sait gérer aujourd'hui 25 appels par seconde et des centaines
d'évènements par seconde (possible de faire mieux!)
11
12. Communication avec .NET
• Toute la plateforme destinée à gérer les conférences téléphoniques est
développée en .NET (par les équipes Arkadin)
• Il fallait un moyen performant en mode In-Process d'appeler des
services .NET : nous avons opté pour COM (Component Object Model)
• L'outil Java/COM retenu initialement, Comfyj de Teamdev, s'est avéré
buggué (fuites mémoires, problèmes de perfs, …)
• Nous avons dû le remplacer par un pont Open Source : Jacob, moins
riche, moins documenté mais … OpenSource !
• Après quelques patchs et optimisations, Jacob a tenu la charge
Outils clés : DebugDiag, WinDebug, ProcExp
12
13. Fragmentation du code JS
• L'application est très importante, plusieurs dizaines de milliers de lignes de
code
• GWT propose une fonctionnalité très puissante, celle de générer plusieurs
fichiers JavaScript
des fragments de code chargés uniquement si l'utilisateur sollicite la
fonctionnalité en question (à la manière d'un ClassLoader Java)
• Le FrontEnd et le BackEnd ont été "codesplittés", ce qui a réduit
considérablement le temps de chargement de l'application
Un opérateur (non admin) ne charge ainsi à aucun moment le JavaScript
de l'application de BackEnd
13
14. Plateforme JEE serveur
• Jboss 7.1 : compatible OSGI, empreinte mémoire réduite, support EJB 3.1
et JPA 2 (Java Persistence API 2)
• Stack Metro (implémentation JAX-WS) pour la communication avec les
WebServices .NET (Basic Profile)
• Ehcache comme cache applicatif
• Utilisation de REST Easy pour la communication entre les différents
serveurs Cobra (lorsqu'un groupe de support est fermé, il communique
avec un autre groupe actif dans le monde pour prendre le relai)
• Grâce à ce mécanisme, un support 24/7 est possible !
14
15. Tests fonctionnels (1/2)
• Comme le montre la démo, cette application est très riche et très
complexe
• Les tests unitaires ne suffisent pas à garantir la qualité dans ce type
d'application où l'interaction avec l'utilisateur est primordiale
• Nous avons donc bâti un environnement de tests fonctionnels basé sur
l'outil Selenium simulant des opérateurs de type "robots"
• Un robot "client" entre en conférence puis est intercepté par un robot
"opérateur" qui l'assiste, un robot agit à une vitesse qu'aucun humain n'est
capable d'assurer manuellement avec un navigateur
• Nous avons également utilisé ces robots pour nos benchs
• Un humain peut se tromper en testant, pas un robot
15
16. Tests fonctionnels (2/2)
• Piloter une IHM Web avec un robot nécessite de générer des identifiants de
composants graphiques <div id="MoveToConf">…</div>
• Plutôt que de "polluer" l'application de production avec des attributs ID dans
les pages HTML, nous avons utilisé une autre fonctionnalité clé de GWT : Le
Defferred Binding
Permet de générer des fichiers JavaScript différents en fonction d'un
paramètre personnalisé
Le testeur charge http://server/cobra.html?debug=true et la production
http://server/cobra.html (on fait ainsi l'économie de balises inutiles en
production)
16
17. Monitoring & DevOps
• Assuré par l'outil OpenSource JavaMelody (
http://code.google.com/p/javamelody/)
• Simple et peu intrusif mais surtout gère des indicateurs GWT (temps
d'appels des services RPC)
• Nous avons dû là encore le patcher pour le rendre compatible Jboss 7
(encore merci à l'Open Source!)
17