MongooseIM 2.1.0, MongoosePush, MongooseICE, Tide

Posté par  (site web personnel) . Édité par Davy Defaud, Pierre Jarillon et RyDroid. Modéré par bubar🦥. Licence CC By‑SA.
26
5
nov.
2017
XMPP

MongooseIM est une plate‐forme libre de chat ou messagerie instantanée, permettant de construire des applications et clients intégrant des fonctionnalités de messagerie instantanée, qu’ils soient pour le mobile ou pour les ordinateurs de bureau.
Logo de la plate‐forme MongooseIM

La plate‐forme MongooseIM (par Erlang Solutions) passe en version 2.1.0, faisant un grand pas en avant. Le serveur central MongooseIM, qui donne son nom à la plate‐forme, codé en Erlang sous licence GPL v2, a reçu énormément d’attention tant au niveau code qu’au niveau documentation. MongoosePush est un tout nouveau serveur de « Notifications Push » pour les systèmes Apple iOS et Android, codé en Elixir sous licence Apache 2.0. MongooseICE est un serveur STUN et TURN, pour découvrir les adresses IP dans le cadre de communications temps réel pair à pair, ou pour relayer le flux, il est également codé en Elixir sous licence Apache 2.0. Finalement, Tide est une infrastructure de tests de charge en continu, intégré à GitHub.

Sommaire

Petit bout d’histoire et de contexte

Dans ses version 1.x, c’est‐à‐dire de 1.0 à 1.6, MongooseIM était un serveur discret et autonome. Puis, avec sa version 2.0, MongooseIM a pivoté vers une plate‐forme homogène et cohérente. Généralement une plate‐forme permet de construire quelque chose par dessus et, plus précisément, la plate‐forme MongooseIM permet de construire des applications de messagerie instantanée (chat) en utilisant ses composants logiciels.

Les composants logiciels sont basés sur des standards ouverts tels que XMPP, REST, OpenAPI et JSON. Cette plate‐forme convient au déploiement de serveurs XMPP fédérés standards prêts à l’emploi, aussi bien qu’aux entreprises (de la startup en amorçage ou « solo‐preneuriat », au grand groupe ou à la licorne) pour construire leur propre application de messagerie instantanée (ou application fournissant tout autre service, auquel on ajoute de la messagerie instantanée). Le serveur MongooseIM permet de connecter plusieurs dizaines de millions d’utilisateurs.

Les composants livrés avec la plate‐forme MongooseIM 2.0 étaient (et sont toujours) :

  • amoc : A Murder of Crows, outil de test massivement parallèle en Erlang sous licence Apache 2.0 ;
  • Escalus : client XMPP en Erlang sous licence Apache 2.0  ;
  • XMPPFramework : bibliothèque XMPP en Objective-C pour iOS (tiers) ;
  • Jayme : bibliothèque REST en Swift pour iOS par Inaka ;
  • Smack : bibliothèque XMPP en Java pour Android par IgniteRealTime (tiers) ;
  • Retrofit : bibliothèque REST en Java pour Android par Square (tiers) ;
  • Mangosta iOS et Mangosta Android : clients iOS et Android, libres sous licence Apache 2.0, orientés « team chat » (comme Slack, HipChat, MatterMost, Rocket.Chat, Zulip, Let’s Chat, Cisco Spark, Matrix/Riot, Ring, Gitter, Flock, Keybase, Microsoft Teams, Google Hangouts Chat, Unify Circuit, RingCentral Gip, Zang Spaces, Mitel MiTeam, Flowdock, etc.), et social (comme Movim et Salut à Toi).

Portée par cette logique de plate‐forme, MongooseIM 2.0 avait aussi apporté une API REST (OpenAPI avec du JSON), à la fois pour les back‐ends/serveurs à des fins de contrôle et d’échange de données dans l’infrastructure, et aussi pour le frontal/client/app pour simplifier et fluidifier le développement pour les non‐aficionados de XMPP.

La version 2.1 est le renforcement de cette posture de plate‐forme, améliorant l’existant et apportant encore de nouveaux composants logiciels à l’écosystème. Le futur de cette plate‐forme est suggéré à la fin de cet article, dans la partie feuille de route, ouverte à votre influence.
OpenAPI

MongooseIM 2.1.0

Cette version 2.1.0 est un grand pas en avant en termes de qualité. Le focus a été porté sur la cohérence du code et de la documentation.

Voici un survol très rapide des changements majeurs :

  • compatibilité Erlang/OTP 20 ;
  • recherche plein texte sur MAM (Message Archive Management) ;
  • XMPP pipelining ;
  • distribution Erlang chiffrée par TLS (à l’intérieur d’une grappe de serveurs — cluster) ;
  • accumulateurs, méta‐données sur les messages pour une inspection et une traçabilité plus fines ;
  • authentification par jeton Web JSON ;
  • passage à rebar3 ;
  • configuration des groupes (pools) pour SGBDR ;
  • bien meilleure couverture de tests (69 % à ce jour) ;
  • améliorations de MAM, MUC light et nos API REST (OpenAPI+JSON) côté serveur et côté client ;
  • énormément de travail de fond sur la documentation.

Pour les plus voraces en détails :

MongoosePush et MongooseICE

MongoosePush est un tout nouveau serveur de « Notifications Push » pour appareils iOS et Android. Ces notifications passent par les serveurs tiers APNS (Apple Push Notification Service) et FCM (Firebase Cloud Messaging, anciennement GCM pour Google Cloud Messaging) pour atteindre l’appareil. Vous pouvez l’utiliser avec la XEP-0357 : Push Notifications. Sinon, il est possible d’utiliser le module mod_aws_sns passant par Amazon AWS SNS (Simple Notification Service) ou le module générique de notifications par HTTP mod_http_notification.

MongooseICE est un serveur STUN et TURN, donc il permet deux choses dans le cadre de communications binaires temps réel pair à pair : découvrir les adresses IP des appareils désirant entrer en communication, ou de relayer le flux binaire entre les deux appareils. Cela aide énormément à l’établissement des appels voix et vidéo et aussi du partage d’écran, par exemple. Ce type de serveur est généralement couplé avec MongooseIM qui route la partie « signalling » par Jingle.

MongoosePush et MongooseICE sont tous les deux des serveurs autonomes et indépendants, pouvant fonctionner en dehors de la plate‐forme MongooseIM. Il sont tous les deux codés en Elixir et sont tous les deux placés sous licence Apache 2.0.
XMPP

Le schéma de composants de la plate‐forme MongooseIM ressemble désormais à ceci :
Plate‐forme MongooseIM : composants logiciels

Tide

Tide est une infrastructure que l’on a développée en interne chez Erlang Solutions, en relation étroite avec l’équipe MongooseIM. Il nous sert pour les tests de charge en continu. Nous passons donc au stade public.

Tide s’intègre au processus de développement sur Git (GitHub). Chaque fusion (merge) d’une demande d’intégration (pull request) est testée et graphée. Cela nous permet de détecter toute régression en termes de performance. L’analyse n’est pas aisée et nécessite toujours de l’expertise humaine.

Amélioration des performances à travers le temps

Ce graphe montre un des progrès de MongooseIM sur l’année en cours. Il mesure le TTD (Time To Delivery) d’une grappe de serveurs MongooseIM, c’est‐à‐dire la durée entre l’instant où le message de l’expéditeur est reçu et l’instant où il est renvoyé au destinataire. Il ne prend pas en compte le réseau entre l’utilisateur et la grappe de serveurs MongooseIM.

Pour l’instant Tide est réservé à un usage dédié à la plate‐forme MongooseIM et nous pensons ouvrir cette infrastructure à nos clients et, éventuellement, à d’autres usages.

Mini‐livre blanc sur la construction et la croissance d’applications de messagerie instantanée

Ce mini‐livre blanc, au format PDF, Boost your engine growth with chat and social value (Augmentez la puissance de votre moteur de croissance avec de la valeur autour de la messagerie instantanée et du social) est dédié aux décideurs des entreprises et administrations, type directeur technique ou DSI, PDG, fondateurs de start‐ups… Il évolue autour des applications de messagerie instantanée ou applications intégrant de la messagerie instantanée.

La problématique solutionnée par ce papier tourne autour des mêmes doutes et risques que l’on retrouve dans ces types d’entreprises. Comment séduire une base d’utilisateurs autour de votre application en construction ? Que faire pour auto‐entretenir cette communauté ? Comment créer une dynamique de viralité ?

À travers des modélisations telles que les « Pirate Metrics » (AARRR) ou la loi de Metcalfe, je m’efforce de mettre en évidence les effets attendus des fonctionnalités majeures de la messagerie instantanée. Cela permettra aux stratèges de reconnecter la réalité de la messagerie instantanée au business qu’ils sont en train de bâtir.
Boost your engine growth with chat and social value

Feuille de route (« roadmap ») à court et moyen terme

MongooseIM 2.1.1 sera une version d’optimisation et de maintenance. Elle sera probablement rendue publique avant la fin de l’année, en fonction des retours que l’on recevra. On peut déjà annoncer toujours plus de qualité, de performance et de documentation.

Ensuite, les versions MongooseIM 3.x livreront la capacité de déployer MongooseIM à l’échelle planétaire, avec du « géo‐clustering ». Cela permet aux utilisateurs d’une région de se connecter de manière transparente à une grappe de serveurs locale, afin de réduire la latence du réseau utilisateur, et de bénéficier d’un routage ultra‐rapide entre régions.
MongooseIM à l’échelle planétaire

Appel de l’aventure

Si vous avez le temps et le courage de jouer avec MongooseIM, MongoosePush, MongooseICE et Tide, nous serons heureux d’en discuter ouvertement avec vous. Devant la variété de nos composants logiciels, vous trouverez sans doute votre bonheur, si vous souhaitez « hacker ». La documentation est continuellement ouverte à toute suggestion, bien évidemment.

Vous souhaitez contribuer, influencer ?

Aller plus loin

  • # mongosta

    Posté par  (site web personnel, Mastodon) . Évalué à 8.

    Salut,

    déjà félicitations pour cette sortie, Mongoose IM a l'air de bien avancer.
    Est-ce que votre client Mangosta est destiné à rester un logiciel de démo, ou vous comptez à terme en faire un logiciel utilisable au quotidien au même titre que des Conversation ou Movim (ou SàT bientôt) ?

    Aussi est-ce que ces logiciels communiquent via XMPP ou via l'API REST (en d'autres termes : est-ce que ce sont des clients XMPP indépendants du serveur, ou des clients Mongoose IM, donc liés à celui-ci ?)

    En tout cas c'est super de voir un projet de plus s'intéresser au blogage via XMPP et à ce qui tourne autour.

    On se voit au POSS :)

    • [^] # Re: mongosta

      Posté par  (site web personnel) . Évalué à 6.

      Mangosta iOS et Android, pour l'instant, c'est de la démo cradouille et vite faite, aussi exemple de code rapide… faute de moyens et de ressources. :'(

      Ça utilise bien évidemment XMPP avec les bibliothèques Smack et XMPPFramework, mais il existe aussi du code dans les dépôts pour passer par les API REST/OpenAPI avec du SSE, mais ce n'est évidemment pas aussi abouti.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.