Il existe moins bien mais c’est plus cher !
De ActiveMQ vers XMPP : mais pourquoi j’y ai pas pensé plus tôt ?

Suite à des projets personnels et professionnels, j’ai été confronté à une problématique de communication inter-processus (temps réel ou pas !). Ces agents devaient effectuer un traitement bien spécifique sur l’information qui transitait sur le bus de distribution du message.
Je travaille sur un système de monitoring multiple ressources, multisites, et surtout multiple-évènements. J’utilisais comme transport sur mon bus d’évènement une file Apache ActiveMQ, cependant je me suis retrouvé dans le cas où je devais programmer des fonctions de monitoring inter-agents.
Chaque agent expose sa présence à la connexion au bus. C’est le manager qui surveille le système à l’aide de messages envoyés via un bus de contrôle.
Pour en revenir à nos moutons, pourquoi parler de XMPP ? Tout simplement parce que c’est un protocole tellement simple : seulement 3 types de messages (synchrone, asynchrone, présence). Que ce protocole possède des spécifications ouvertes : il est à l’origine du protocole Jabber.
Après analyse, je me suis aperçu que j’avais codé exactement le comportement de XMPP (les trois types de message), alors je me suis dis pourquoi pas tout migrer sur du XMPP ? [Et c'est à ce moment que quelqu'un me dit toujours que je suis un grand malade !] Ce que j’ai fait. Aujourd’hui la technologie apporte les solutions à des problèmes bien précis, et j’avoue je me régale toujours à détourner les fonctionnalités de ces technologies pour résoudre mes problèmes.
Problématiques :
- Comment distribuer les messages à un agent en particulier ?
- Comment distribuer les messages à un groupe d’agent ?
- Comment connaître l’état d’un agent ?
- Comment savoir si un agent est connecté au système ?
Voici les problématiques que j’ai résolu via l’utilisation du protocole XMPP comme bus de communication.
1. Comment distribuer les messages à un agent en particulier ?
Les messages émis sur le bus sont nominatifs, c-à-d qu’ils ont une source et une destination.
2. Comment distribuer les messages à un groupe d’agent ?
Les messages peuvent être transmis à des groupes de contacts (buddy), ou il est possible de simuler un “broadcast” de message via l’utilisation d’un salon privé de conférence, espèce de canal IRC mais pour Jabber.
3. Comment connaître l’état d’un agent ?
L’état de l’agent (disponible, occupé, etc…) correspond à l’information de statut associée à la présence du contact sur le réseau.
4. Comment savoir si un agent est connecté au système ?
Le protocole XMPP gère les présences des agents sur le réseau. A la connexion d’un agent, celui ci informe tous les autres de sa présence.
Quels sont les avantages ?
- Le système est bcp plus réactif, les messages sont visibles dans un protocole exploitable par tous les agents capables de comprendre le XMPP. Il sera possible de créer des agents dans différents langages.
- Le système permet des communications multi-sites, en effet XMPP permet le routage des messages inter-serveurs (voir fonctionnement Jabber entre 2 domaines différents).
- Il n’est pas nécessaire d’avoir un serveur de file d’attente sur la machine.
- Protocole ouvert et extensible, tout peut être transporté dans le flux XML.
Quels sont les inconvénients ?
- Il est nécessaire d’installer un serveur Jabber (Openfire ou eJabberd). Personnellement j’utilise eJabberd, qui possède des fonctionnalités de clustering plutôt impressionnante. D’ailleurs faudrait que je jette un oeil sur ce langage Erlang.
- Nécessite la connaissance du protocole XMPP un minimum, alors qu’avec les MQ (MessageQueue) traditionnelle c’est transparent.
- Interaction avec un client Jabber traditionnel : peut être aussi un avantage, mais moi je vois une possibilité de détournement, (boh c’est le consultant sécu qui parle là !)
- Il est possible que par l’utilisation du XML comme descripteur du protocole on obtienne une surcharge d’informations inutiles dans les messages.

Tiens j'ai une idée ! ![]()
Quelques idées sur le papier numérique :
Il serait agréable d’avoir un standard de communication permettant d’agréger de manière simple et unique tout les protocoles réseaux. Jabber contient le concept de passerelle permettant de “traduire” du MSN en XMPP.
Pourquoi ne pas faire une passerelle SNMP / XMPP, CMMI / XMPP pour les protocoles d’interrogations des devices. Il existe déja du XMLRPC over XMPP et du SOAP over XMPP, ce qui montre bien que XMPP est un protocole de transport tout comme le HTTP.
Je serais d’avis de travailler dans le sens de réduire la taille d’un paquet XMPP, en le passant en octet comme avec l’EBML utilisé pour le conteneur numérique Matrovska (MKV). Cependant cherche-t-on a avoir un protocole rapide ou plutôt facile d’utilisation et surtout facile à implémenter (Un parseur XML suffit et en avant Guingamp !). Il me semble avoir entendu parlé du XMPP en utilisant du YAML, qui est un langage qui se base sur les tabulations plutot que le couple de balise ouverture/fermeture. Il n’y a pas de fermeture de balise, il suffit de revenir d’un cran pour fermer le contexte en cours.
Voila je termine ce long post qui je pense doit être le plus long que mon blog n’ai jamais eut ! A vous les commentaires !
No related posts.
| Imprimer l'article | Cette entrée a été posté par Zenithar le 24 février 2009 à 0 h 27 min, et placée dans Développement, Logiciels. Vous pouvez suivre les réponses à cette entrée via RSS 2.0. Les commentaires et les pings sont fermés pour l'instant |
Mise en place d’une infrastructure de service Web
about 11 months ago - 2 commentaires
Bonsoir à tous, je me suis enfin motivé pour rédiger un multi-post, même si a mon avis un blog n’est pas fait dans cette objectif. (c’est plus le rôle d’un wiki) Je vais parler de la mise en service LAMP (Linux Apache MySQL PHP) avancée, en y ajoutant des contraintes de sécurité. Ce post sera pour une fois, orienté besoin, et non pas tartine technologique et lego système.
Jabber: Open Instant Messaging and a Whole Lot More, Powered by XMPP
about 5 years ago - 4 commentaires
Jabber: Open Instant Messaging and a Whole Lot More, Powered by XMPP Avez vous déja utiliser autre chose que MSN, ou AIM ? si non pourquoi ? Personnellement, j’utilise Jabber sur le serveur . Porquoi Jabber, parce que c’est complètement gratuit, libre, et fiable. J’ai jamais eu de bug, de virus, de spam par Jabber.
Les commentaires sont fermés.
Additional comments powered by BackType
about 1 year ago
Ben je le dis à la fin de ton article : "Tu es un grand malade ! " Mais l'idée est bonne. Tu n'utilisais pas déjà ce principe pour monitorer tes machines ? Tu m'en avais parlé je crois.
).
L'autre avantage c'est que le protocole peut évoluer et t'apporter de nouveaux besoins sans avoir à y travailler forcèment toi meme.
De plus il y a une gestion du SSL déjà incluse je crois (oué j'ai vu le mot multisite et pas de chiffrement évoqué donc ca m'a titillé
Code bien !
about 1 year ago
Ah bravo, c'est comme ça que tu dors toi ? Finalement tu te couches plus tard que moi ^^
about 1 year ago
intéressant, est-ce qu'avec XMPP tu arrives à avoir le même comportement qu'avec une queue sous ActiveMQ ? (c'est à dire la distribution round-robin des messages aux comsommateurs)
about 1 year ago
La distribution round-robin est possible sur les connexions "composants" avec un serveur eJabberd cependant je n'ai pas testé. Concernant OpenFire, je ne connais pas bcp ce serveur.
Autre piste :
Il faudrait voir en jouant avec la priorité lors de la connexion en utilisant un même JID.
Voici comment je procède :
Pour faire le traitement associé au message, j'envoie ce message à tous les agents, qui répondent lorsqu'ils ne sont pas occupé, ou que leur file de traitement local peut accueillir un message. Chaque agent envoie une réponse (ACK) indiquant le démarrage et la fin du traitement du / des message(s) ou la mise en attente pour traitement sur l'agent. Cette réponse est interceptée par le manager, contrôlant ainsi le traitements des messages, et l'état des agents.
Après en cherchant un peu on trouve facilement des différences entre ActiveMQ et XMPP.
Je pense qu'a ce sujet il faudrait plus comparer ActiveMQ vs eJabberd, ou ActiveMQ vs OpenFire, qui implémente le protocole XMPP. Chaque serveur peut avoir des fonctionnalités différentes, et des comportements différents au niveau de la distribution des messages, même si au final le message doit être délivré !
about 1 year ago
@Guillaume : Voici un lien qui pourrait t'intéresser – <a href=”http://tinyurl.com/68s4ft” target=”_blank”>http://tinyurl.com/68s4ft