URL: https://linuxfr.org/news/mongooseim-2-1-0-mongoosepush-mongooseice-tide Title: MongooseIM 2.1.0, MongoosePush, MongooseICE, Tide Authors: Nÿco Davy Defaud, Pierre Jarillon et RyDroid Date: 2017年10月30日T11:15:08+01:00 License: CC By-SA Tags: xmpp, serveur_xmpp, mongooseim, objective-c et robert_metcalfe Score: 26 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.  La plate‐forme MongooseIM (par [Erlang Solutions](https://www.erlang-solutions.com/)) 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](https://www.gnu.org/licenses/old-licenses/gpl-2.0.fr.html), 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](https://fr.wikipedia.org/wiki/Elixir_(langage)) sous [licence Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). MongooseICE est un serveur [STUN](https://fr.wikipedia.org/wiki/Simple_Traversal_of_UDP_through_NATs) et [TURN](https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT), 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. ---- [Dépôt de code source de MongooseIM sur GitHub](https://github.com/esl/MongooseIM) [Documentation de la plate‐forme MongooseIM](https://mongooseim.readthedocs.io/en/latest/) [MongoosePush, notifications push, en Elixir, sous Apache 2.0](https://github.com/esl/MongoosePush) [MongooseICE, STUN & TURN, en Elixir, sous Apache 2.0](https://github.com/esl/MongooseICE) [Tide, infrastructure de tests de charge en continu](http://tide.erlang-solutions.com/) [« La plate‐forme MongooseIM est disponible en version 2.0.0 » sur LinuxFr.org](https://linuxfr.org/news/la-plate-forme-mongooseim-est-disponible-en-version-2-0-0) [La page « Produit » de MongooseIM, sur erlang-solutions.com](https://www.erlang-solutions.com/products/mongooseim.html) [Boost your engine growth with chat and social value, PDF mini livre blanc](https://www.erlang-solutions.com/resources/case-studies.html#boost-your-engine-growth-with-chat-and-social-value-19) ---- # 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](https://fr.wikipedia.org/wiki/Licorne_(%C3%A9conomie))) 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](https://github.com/esl/amoc) : _A Murder of Crows_, outil de test massivement parallèle en Erlang sous licence Apache 2.0 ; * [Escalus](https://github.com/esl/escalus/) : client XMPP en Erlang sous licence Apache 2.0 ; * [XMPPFramework](https://github.com/robbiehanson/XMPPFramework) : bibliothèque XMPP en Objective-C pour iOS (tiers) ; * [Jayme](https://github.com/inaka/Jayme) : bibliothèque REST en Swift pour iOS par Inaka ; * [Smack](https://github.com/igniterealtime/Smack) : bibliothèque XMPP en Java pour Android par IgniteRealTime (tiers) ; * [Retrofit](https://github.com/square/retrofit) : bibliothèque REST en Java pour Android par Square (tiers) ; * [Mangosta iOS](https://github.com/esl/mangosta-ios) et [Mangosta Android](https://github.com/esl/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](https://linuxfr.org/tags/movim/public) et [Salut à Toi](https://linuxfr.org/tags/s%C3%A0t/public)). 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.  # 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](https://coveralls.io/github/esl/MongooseIM) (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 : * [changements 2.1.0beta1](https://github.com/esl/MongooseIM/releases/tag/2.1.0beta1) ; * [changements 2.1.0beta2](https://github.com/esl/MongooseIM/releases/tag/2.1.0beta2) ; * [changements 2.1.0](https://github.com/esl/MongooseIM/releases/tag/2.1.0). # 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_](https://xmpp.org/extensions/xep-0357.html). Sinon, il est possible d’utiliser le module [_mod_aws_sns_](https://mongooseim.readthedocs.io/en/latest/modules/mod_aws_sns/) passant par Amazon AWS SNS (_Simple Notification Service_) ou le module générique de notifications par HTTP [_mod_http_notification_](https://mongooseim.readthedocs.io/en/latest/modules/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](https://fr.wikipedia.org/wiki/Jingle_(protocole)). 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.  Le schéma de composants de la plate‐forme MongooseIM ressemble désormais à ceci :  # 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.  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](https://www.erlang-solutions.com/resources/case-studies.html#boost-your-engine-growth-with-chat-and-social-value-19)_ (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.  # 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.  # 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 ? * donnez des étoiles, si vous le voulez : [https://github.com/esl/MongooseIM](https://github.com/esl/MongooseIM) ; * générez du « _follow_ », quand vous pouvez : [https://twitter.com/MongooseIM](https://twitter.com/MongooseIM) ; * écrivez vos commentaires, autant que vous le souhaitez : [https://github.com/esl/MongooseIM/issues](https://github.com/esl/MongooseIM/issues).