# Outils et technologies
Nous documentons ici les raisons des choix dâoutils, de technologies et de processus pour Mojaloop, ainsi que les liens et versions recommandĂ©s pour chacun.
CHOIX DâOUTILS
- DĂ©veloppement dâAPI
- Open API 3.0 est utilisĂ© pour le dĂ©veloppement dâAPI (Swagger 2.0 auparavant).
- ISTIO en tant que passerelle API (WSO2 est dĂ©sormais obsolĂšte avec Mojaloop v16.0.0 - Congo et IaC v5.0.0 et suivants) offre une plateforme dâentreprise pour intĂ©grer API, applications et services web â localement et sur Internet. Il fournit Ă Mojaloop une couche de sĂ©curitĂ© et un portail de dĂ©veloppement.
- Circle-CI â Outil utilisĂ© pour lâintĂ©gration et le dĂ©ploiement continus. Il nous fallait un systĂšme de build et de tests en ligne pouvant fonctionner avec de nombreux petits projets et une Ă©quipe distribuĂ©e. Jenkins a Ă©tĂ© envisagĂ©, mais il impose dâhĂ©berger un serveur et une configuration lourde. CircleCI permet une solution sans hĂ©bergement propre, dĂ©marrable sans coĂ»t et avec une configuration minimale. Nous pensions pouvoir commencer avec CircleCI et migrer plus tard si nĂ©cessaire â ce besoin ne sâest pas prĂ©sentĂ©.
- Dactyl â Nous devons pouvoir imprimer la documentation en ligne. Bien quâon puisse imprimer des fichiers Markdown un par un, nous souhaitons regrouper les fichiers en un ensemble de documents PDF finaux, oĂč une mĂȘme page peut se retrouver dans plus dâun manuel. Dactyl (opens new window) est un outil open source maintenu de conversion Markdown vers PDF. Nous avions dâabord essayĂ© Pandoc, mais il gĂ©rait mal les tableaux. Dactyl corrige cela et est plus flexible.
- DBeaver â DBeaver (opens new window) est un outil multi-plateforme gratuit pour dĂ©veloppeurs, programmeurs SQL, administrateurs et analystes de bases de donnĂ©es. Il prend en charge les bases courantes : MySQL, PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Derby, etc.
- Docker â Le moteur de conteneurs Docker crĂ©e et exĂ©cute des conteneurs Ă partir de fichiers d'images Docker.
- Docker Hub sert Ă lier, construire, tester et pousser les dĂ©pĂŽts de code Mojaloop. Nous devions prendre en charge lâexĂ©cution locale et cloud. Nous avons de nombreux microservices Ă configurations simples et spĂ©cifiques. Le moyen le plus simple de garantir le mĂȘme comportement dans chaque environnement â du dĂ©veloppement local au cloud jusquâĂ la production hĂ©bergĂ©e â est de placer chaque microservice dans un conteneur Docker avec tous les prĂ©requis nĂ©cessaires Ă son exĂ©cution. Le conteneur devient une unitĂ© fermĂ©e, sĂ©curisĂ©e, prĂ©configurĂ©e et exĂ©cutable.
- Draw.io â Nous devons produire des schĂ©mas et diagrammes dâarchitecture pour la documentation avec un outil idĂ©alement gratuit, compatible open source, multi-plateforme, vectoriel et matriciel, WYSIWYG, utilisable avec Markdown et simple. Nous avons Ă©valuĂ© de nombreux outils : Visio, Mermaid, PlantUML, Sketchboard.io, LucidChart, Cacoo, Archi, Google Drawings. Draw.io correspond le mieux Ă nos besoins : gratuit, maintenu, simple, formats adaptĂ©s, intĂ©gration Dropbox et GitHub, multi-plateforme. Pour archiver nos diagrammes, nous sauvegardons deux copies â une en SVG (vectoriel) et une en PNG (matriciel). Nous utilisons le PNG dans la doc car il sâaffiche directement sur GitHub. Le SVG sert de maĂźtre car il est Ă©ditable.
- ESLint â Dans le code JavaScript, nous utilisons ESLint (opens new window) comme guide de style et outil dâapplication du style.
- GitHub â GitHub (opens new window) est un service de dĂ©pĂŽt de code trĂšs rĂ©pandu, basĂ© sur git, le standard des projets open source. Le choix de GitHub Ă©tait donc naturel. Nous crĂ©ons une story pour chaque travail dâintĂ©gration, des bugs pour les problĂšmes, et suivons les stories dans tout le pipeline pour des mĂ©triques fiables.
- Helm â Le gestionnaire de paquets Helm pour Kubernetes fournit des dĂ©ploiements et configurations modĂ©lisĂ©s et permet de maĂźtriser la complexitĂ© globale.
- IaC â Lâinfrastructure as code (IaC) regroupe les outils et scripts pour dĂ©ployer une plateforme Mojaloop au niveau de qualitĂ© souhaitĂ©, du dĂ©veloppement, QA ou sandbox jusquâĂ la prĂ©production ou une qualitĂ© de production Ă©tendue. Elle sâappuie sur les releases Mojaloop comme cĆur et dĂ©ploie tout lâĂ©cosystĂšme nĂ©cessaire au fonctionnement dâun switch Mojaloop.
- Kafka â Cette technologie rĂ©pond au besoin de messagerie Ă fort dĂ©bit et volume tout en limitant les exigences matĂ©rielles.
- JavaScript â Lâapplication Mojaloop est principalement Ă©crite en JavaScript.
- Kubectl â Interface en ligne de commande pour exĂ©cuter des commandes sur les clusters Kubernetes.
- Kubernetes â Outil dâentreprise fournissant une couche dâabstraction, la gestion dâinfrastructure et lâorchestration de conteneurs.
- Markdown â La documentation est un livrable du projet au mĂȘme titre que le code : nous voulons la versionner, la revue, le commit et le suivi des changements comme le code. Nous voulons aussi une consultation en ligne simple sans ouvrir constamment un lecteur dĂ©diĂ©. GitHub intĂšgre Markdown, ce qui convient bien. Les mĂȘmes fichiers servent au wiki et aux documents. Ils peuvent ĂȘtre revus au commit avec les mĂȘmes outils et lus directement sur GitHub. Google Docs, Word et PDF ont Ă©tĂ© Ă©cartĂ©s car ces formats binaires se diffĂ©rencient mal. InconvĂ©nient : Markdown nâautorise quâun formatage simple â pas de tableaux complexes ni de polices variables â mais cela suffit lorsque la prioritĂ© est la clartĂ©.
- Mojaloop Testing Toolkit (TTK) â Le Mojaloop Testing Toolkit (opens new window) est un outil couteau-suisse pour les activitĂ©s Mojaloop, surtout pour les tests bout en bout, les dĂ©monstrations, le mock dâAPI et dâautres scĂ©narios. Les collections de tests Mojaloop utilisent le ML TTK ; câest lâoutil privilĂ©giĂ© pour les tests bout en bout, intĂ©grĂ© aussi aux scripts de tests automatisĂ©s (TTK CLI dans lâIaC et autres environnements dev/qa).
- MySQLWorkbench â MySQL Workbench (opens new window) est un outil visuel unifiĂ© pour architectes, dĂ©veloppeurs et DBA. Il couvre la modĂ©lisation, le dĂ©veloppement SQL et lâadministration (configuration serveur, utilisateurs, sauvegardes, etc.). Disponible sous Windows, Linux et macOS.
- NodeJS â Environnement dâexĂ©cution JavaScript basĂ© sur le moteur V8 de Chrome qui exĂ©cute Mojaloop. NodeJS convient aux microservices simples et dispose dâun vaste Ă©cosystĂšme de bibliothĂšques open source. Les performances sont correctes ; les composants Node ne montent pas beaucoup en vertical, mais nous prĂ©voyons de scaler horizontalement, ce quâil gĂšre bien. Le code Interledger dâorigine et le prototype de niveau un Ă©taient en NodeJS. La plupart des Ă©quipes utilisaient dĂ©jĂ Node, ce qui a motivĂ© ce choix. Dans le code NodeJS, nous utilisons Standard (opens new window) comme guide et application du style.
- NPM â Gestionnaire de paquets pour Mojaloop, le JavaScript Ă©tant le langage par dĂ©faut.
- Percona pour MySQL â Ces outils servent de SGBDR pour assurer haute performance et fonctionnalitĂ©s de niveau entreprise au systĂšme Mojaloop. Il nous fallait un backend SQL compatible open source et scalable en production ; nous avons choisi MySQL.
- Postman â Application Google Chrome pour interagir avec des API HTTP. Elle offre une interface conviviale pour construire des requĂȘtes et lire les rĂ©ponses.
- Rancher 2.0 â La gestion, le provisionnement et la supervision de lâinfrastructure sont assurĂ©s par Rancher 2.0, plateforme Kubernetes dâentreprise pour gĂ©rer dĂ©ploiements et clusters sur cloud et sur site. Rancher facilite pour les Ă©quipes DevOps le test, le dĂ©ploiement et lâexploitation de Mojaloop oĂč quâil tourne.
- Slack â Slack sert Ă la communication interne dâĂ©quipe, en partie parce que plusieurs Ă©quipes lâutilisaient dĂ©jĂ et le prĂ©fĂ©raient au courriel pour rester lĂ©ger.
- SonarCloud â Nous avions besoin dâun tableau de bord en ligne sur la qualitĂ© du code (taille, complexitĂ©, problĂšmes, couverture) agrĂ©geant tous les dĂ©pĂŽts. SonarCloud pour Mojaloop est gratuit avec un peu de configuration. Il propose aussi des contrĂŽles sur les pull requests et des notes selon les quality gates.
- SourceTree â Sourcetree (opens new window) simplifie le travail avec les dĂ©pĂŽts Git pour se concentrer sur le code. Visualisation et gestion via une interface graphique Git. Chaque dĂ©veloppeur reste libre de son outil, dans le respect des recommandations GitHub gĂ©nĂ©rales.
- Visual Studio Code â Visual Studio Code (opens new window) est un Ă©diteur orientĂ© dĂ©veloppement et dĂ©bogage dâapplications web et cloud modernes. Gratuit et disponible sur Linux, macOS et Windows.
- ZenHub â Il nous fallait une gestion de projet lĂ©gĂšre et cloud pour Ă©quipes distribuĂ©es, avec epics, stories, bugs et un tableau projet simple. Les offres en ligne VS et Jira ont Ă©tĂ© envisagĂ©es. Pour une petite Ă©quipe distribuĂ©e, un service en ligne convenait mieux. Pour un projet open source, nous voulions Ă©viter les coĂ»ts rĂ©currents dâun serveur dĂ©diĂ©. Une intĂ©gration forte avec GitHub Ă©tait importante ; suivre le travail par microservice avec ce microservice Ă©tait trĂšs utile. Jira et VS apportaient plus de lourdeur que nĂ©cessaire pour cette taille de projet et sâintĂšgrent moins bien Ă GitHub. ZenHub nous a permis de dĂ©marrer tout de suite. InconvĂ©nient : pas de diagrammes de flux cumulatif ni de suivi du nombre de stories plutĂŽt que des points â nous le faisons manuellement avec une feuille de calcul mise Ă jour quotidiennement et publiĂ©e sur le canal Slack « Project Management ».
CHOIX TECHNOLOGIQUES
- DĂ©veloppement agile â MĂ©thodologie utilisĂ©e pour piloter le projet. Les exigences doivent ĂȘtre affinĂ©es au fil du dĂ©veloppement ; nous avons prĂ©fĂ©rĂ© lâagile au waterfall ou au lean.
- APIs â Pour limiter la confusion due Ă de nombreux microservices changeants, nous utilisons des API fortement dĂ©finies conformes Ă notre modĂšle REST pragmatique. Les API sont dĂ©finies avec OpenAPI. Les Ă©quipes documentent leurs API avec Swagger v2.0 ou RAML v0.8 pour tester, documenter et partager automatiquement. Swagger est lĂ©gĂšrement privilĂ©giĂ© grĂące aux outils gratuits. Mule utilisera RAML 0.8. Swagger peut ĂȘtre converti automatiquement en RAML v0.8, ou manuellement en RAML v1.0 pour plus de lisibilitĂ©.
- Tests automatisĂ©s â La majoritĂ© des tests sont automatisĂ©s pour faciliter la rĂ©gression. Voir la stratĂ©gie de tests automatisĂ©s et les mĂ©triques de qualitĂ© du code.
- HĂ©bergement â Mojaloop est conçu pour ĂȘtre agnostique vis-Ă -vis de lâinfrastructure ; il est pris en charge sur AWS, Azure et en installation sur site.
- Interledger â Mojaloop avait besoin dâun protocole de transport lĂ©ger, ouvert et sĂ©curisĂ© pour les fonds. Interledger.org (opens new window) rĂ©pond Ă ce besoin et permet de se connecter Ă dâautres systĂšmes. Les blockchains ont aussi Ă©tĂ© envisagĂ©es, mais elles envoient des messages trĂšs volumineux, difficiles Ă livrer de façon fiable sur des infrastructures fragiles. De plus, lâanonymat fort des blockchains ne correspond pas Ă un objectif du projet : pour la lutte contre la fraude, les autoritĂ©s rĂ©glementaires doivent pouvoir consulter les donnĂ©es de transferts par compte et par personne.
- Open source â Lâensemble du projet est publiĂ© en open source conformĂ©ment aux principes Level One Project (opens new window). Tous les outils et processus doivent ĂȘtre compatibles open source et favoriser les projets sous licence Apache 2.0 sans contraintes de licences restrictives pour les dĂ©veloppeurs.
- SystĂšme dâexploitation â Windows est trĂšs rĂ©pandu dans les pays cibles, mais nous avions besoin dâun OS sans frais de licence et compatible open source : nous utilisons Linux. Nous ne dĂ©pendons pas dâune distribution particuliĂšre ; nous nous basons sur Amazon Linux de base. Dans les conteneurs Docker, Alpine Linux (opens new window) est utilisĂ©.
- Microservices â Lâarchitecture doit se dĂ©ployer et scaler facilement, avec des composants remplaçables ou mis Ă jour simplement ; elle est donc dĂ©coupĂ©e en microservices.
- Scaled Agile Framework â Quatre Ă©quipes de dĂ©veloppement initiales Ă©taient gĂ©ographiquement sĂ©parĂ©es. Pour garder la premiĂšre phase du projet sur les rails, le Scaled Agile Framework (SAFe) (opens new window) a Ă©tĂ© choisi. Le travail est dĂ©coupĂ© en program increments (PI) dâenviron quatre sprints de deux semaines. Comme pour les sprints, chaque PI a des objectifs dĂ©montrables dĂ©finis en rĂ©union de PI.
- Services â Les microservices sont regroupĂ©s et dĂ©ployĂ©s en quelques services (DFSP, annuaire central, etc.). Chacun dispose dâinterfaces simples, de scripts de configuration, de tests et de documentation.
- ModĂ©lisation des menaces, de la rĂ©silience et de la santĂ© â Le code Mojaloop Ă©change de lâargent dans des environnements Ă infrastructure trĂšs instable ; il doit donc ĂȘtre sĂ©curisĂ©, rĂ©silient, exposer facilement son Ă©tat de santĂ© et tenter automatiquement dây revenir.
- USSD â Les smartphones ne reprĂ©sentent quâenviron 25 % du marchĂ© cible et ne sont pas actuellement pris en charge par la plupart des services de transfert dâargent ; nous avons besoin dâun protocole fonctionnant sur les tĂ©lĂ©phones basiques. Comme M-Pesa, nous utilisons USSD entre le tĂ©lĂ©phone et le fournisseur de services financiers numĂ©riques (DFSP).
