Rapportpfenawresfarhat 170812135554
Rapportpfenawresfarhat 170812135554
Rapportpfenawresfarhat 170812135554
et de la Recherche Scientifique
Université de Carthage
Institut National des Sciences
Appliquées et de Technologie
Sujet :
Refonte et déploiement d’une solution de messagerie
en utilisant l’architecture microservices.
Réalisé par : Nawres FARHAT
Entreprise d’accueil :
Soutenu le 16/06/2017
Au terme de ce travail, j’exprime mes vifs remerciements à toute personne ayant contribué,
de près ou de loin, à la réalisation de ce travail.
Ma profonde gratitude s’adresse à la société Sofrecom Tunisie qui m’a accueilli et à Mon-
sieur Amine SALHI mon tuteur de stage qui a dirigé mon projet de fin d’études, pour son
engagement permanent, son soutien constant et la confiance totale qu’il m’a accordée.
J’adresse aussi mes profonds remerciements à Madame Arwa HEDHILI SBAI, pour son
encadrement, pour son assistance, pour tout le temps précieux qu’elle m’a octroyé et pour ses
conseils qui m’ont été bien utiles pour la rédaction de ce rapport.
Je tiens à remercier également toute l’équipe de Messaging Pro chez Sofrecom, Monsieur
Slimen HMIDI, Monsieur Mohamed TAGHOUTI, Monsieur Baha eddine BOUKHZAR et Mon-
sieur Ahmed LOUHICHI, pour le temps qu’ils m’ont consacré durant cette période et pour le
partage de leur expertise et connaissances. C’est grâce à leur confiance et leur encouragement
que j’ai été apte à accomplir mes missions et à surmonter toute difficulté rencontrée tout en
gagnant de l’expérience.
Je remercie également mon collègue Tayeb BEN ACHOUR pour sa collaboration pour réus-
sir le projet, et Monsieur Khaled NASSER pour l’agréable intégration au sein de Sofrecom.
Je tiens, par ailleurs, à exprimer mon immense reconnaissance à : Madame Leila BAC-
COUCHE, pour l’honneur qu’elle a bien voulu me faire en acceptant de présider le jury chargé
d’évaluer ce travail. Et Monsieur Mejdi JRIBI , d’avoir accepté d’examiner ce travail. J’espère
que le présent projet soit à la hauteur de vos attentes.
i
Table des Matières
Introduction Générale 1
ii
Remerciements
iii
Remerciements
iv
Table des Matières
Conclusion générale 81
Bibliographique 82
Glossaire 84
Annexes 85
v
Liste des Figures
vi
Liste des Figures
vii
Liste des Figures
viii
Liste des Tableaux
ix
Introduction Générale
La communication est omniprésente dans notre société. Elle présente un élément inhérent
à l’existence humaine sans laquelle l’interaction entre les différents membres, moraux et phy-
siques, de la société sera pénible. Communiquer c’est informer, influencer, partager, échanger,
convaincre, séduire, etc. Nous parlons, ainsi, d’une autre sorte de Cogito : "je communique donc
j’existe".
Actuellement, la communication gagne une nouvelle dimension grâce à l’expansion du phé-
nomène de la globalisation, qui n’a pas seulement transformé le monde en un village planétaire,
mais aussi à un marché très compétitif dans lequel les stratégies de communications sont dé-
sormais un élément clé à la pérennité et le succès.
A titre d’exemple, dans le monde des affaires, les moyens de communication jouent un
rôle crucial dans l’identification de la culture de l’entreprise (son image et sa réputation) et
dans la personnalisation de ses objectifs. En effet, la communication est le levier marketing qui
permettra à l’entreprise de commercialiser et faire connaître ses produits et services et influencer
l’opinion publique.
Dans ce cadre, les entreprises contemporaines privilégient les interactions virtuelles comme
les e-mails, SMS, internet et réseaux sociaux par rapport à la communication verbale et ges-
tuelle. Particulièrement, les messages textuels et les messages vocaux présentent un moyen
favorable de communication grâce à sa simplicité, sa rapidité, le bas prix et la fiabilité. D’une
part, les entreprises utilisent souvent ces messages pour lancer leurs campagnes marketing, leurs
campagnes de promotion ainsi que la diffusion des renseignements et des informations. D’autre
part, l’Etat peut bénéficier de ces messages afin de sensibiliser ses citoyens. Par exemple, durant
les élections, elle communique à travers les messages textuels les procédures et les renseigne-
ments relatifs au vote. Elle optimise son budget en réduisant les dépenses et en augmentant les
recettes (lutte contre le gaspillage de l’eau, incitation à la rationalisation de la consommation
de l’électricité, etc.)
Dans ces différents contextes, les entreprises et l’Etat ont besoin de diffuser avec un grand
débit des SMS en masse, au tarif le plus raisonnable et qui cible un public varié et au nombre
assez élevé. Ils ont besoin aussi d’envoyer des messages en différents formats (textes, audio,
etc.), d’organiser et de gérer facilement les campagnes et de personnaliser l’envoie pour chaque
récepteur. Dans cette optique, s’inscrit notre projet de fin d’étude qui consiste à migrer une
application de messaging d’une architecture monolithique vers une architecture microservices.
Le présent rapport qui décrit la refonte de Messaging Pro est structuré en cinq chapitres.
Le premier chapitre concerne la présentation de l’organise d’accueil, contexte du sujet, la pro-
1
Introduction Générale
2
Chapitre I
Plan
1 Présentation de l’entreprise . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 Le groupe Sofrecom . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Sofrecom Tunisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Context du sujet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Problématique du projet . . . . . . . . . . . . . . . . . . . . . . . . . 5
4 Diagnostic technique . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5 La méthodologie : SCRUM . . . . . . . . . . . . . . . . . . . . . . . 8
5.1 Les rôles dans SCRUM . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2 Planification d’un projet par Scrum . . . . . . . . . . . . . . . . . . . 8
Introduction
Dans ce premier chapitre introductif, nous présentons l’organisme d’accueil Sofrecom et sa
filiale Sofrecom Tunisie. Nous présentons par la suite, le contexte du sujet, la problématique
et un diagnostic technique de la solution existante. Enfin, nous présentons la méthode de
développement choisie pour la réalisation de notre solution.
1 Présentation de l’entreprise
1.1 Le groupe Sofrecom
Sofrecom, filiale d’Orange, développe depuis 50 ans un savoir-faire unique dans les métiers de
l’opérateur, ce qui en fait un leader mondial du conseil et de l’ingénierie télécom. Ces dernières
années, plus de 200 acteurs majeurs, dans plus de 100 pays, ont confié à Sofrecom la conduite de
leurs projets stratégiques et opérationnels. Le Know-How Network de Sofrecom, c’est aussi la
garantie d’un transfert de savoir-faire, de compétences et d’expertises pour une transformation
durable s’appuyant sur des méthodologies certifiées au niveau international.
3
I.2 Context du sujet
2 Context du sujet
Messaging Pro est une application web de messaging développée par Sofrecom pour ses fi-
liales Oranges. Le projet a été initié par Sofrecom Tunisie en 2014, afin de le vendre à plusieurs
filiales d’Orange groupe en Afrique et Moyen Orient. Actuellement, Messaging Pro est déployée
sur l’infrastructure d’Orange Congo, Orange Botswana, Orange Kenya, Orange Jordan, Orange
Madagascar. Elle est disponible avec sa troisième génération qui offre les services de messagerie
au gouvernement ou à ses clients Business.
Messaging Pro permet à ses clients de gérer leurs campagnes SMS et vocales ainsi que lancer
des campagnes des quiz et des sondages. Nous décrivons dans la figure I.1, un scénario typique
d’inscription des entreprises à la plateforme pour avoir la main de créer des campagnes. Ce
scénario montre les actions nécessaires et les rôles de chaque intervenant dans la chaîne de
messagerie entre l’agence Orange et l’entreprise.
1. Direction des Systèmes dInforamtion.
2. OLS : Orange Labs Services
4
I.3 Problématique du projet
3 Problématique du projet
Après chaque itération le produit, Messaging pro, subit des améliorations. Des fonctionna-
lités s’ajoutent pour répondre mieux au marché, s’aligner plus au besoin du client et élargir sa
clientèle cible. Le projet a commencé depuis trois ans, et selon son plan d’évolution, il continuera
à évoluer pendant au moins quelques années. Ceci a généré plusieurs défis.
En effet, la taille de projet n’a cessé d’augmenter pour devenir une application monolithique
gigantesque, difficile à gérer et à comprendre. Même le respect des bonnes pratiques et les efforts
fournis pour maintenir un code modulaire et évolutif n’as pas pu éliminer la complexité de ce
produit. Avec une application qui comporte des milliers des lignes et un nombre important de
classes plusieurs problèmes se présentent.
En premier lieu, faire évoluer l’équipe est devenu de plus en plus coûteux. En effet, un nouveau
développeur au projet implique le sacrifice de plusieurs jours et semaines pour comprendre le
code existant et pour qu’il soit capable de le modifier ou d’ajouter d’autres fonctionnalités. En
second lieu, la modification de quelques lignes au niveau de l’application entraîne le redéploie-
ment, le ré-teste (les tests unitaires, les tests de régression, les tests IHM) et la révision de la
qualité de code de toute l’application. La répétition manuelle de toute la chaîne de déploiement
après chaque modification rend le travail de l’équipe de test plus ennuyeux, plus gênant et
5
I.4 Diagnostic technique
4 Diagnostic technique
Outre les problèmes générés par l’architecture monolithique, l’application présente des pro-
blèmes technologiques. Avant de passer aux critiques, nous présentons l’architecture technique
existante dans la figure I.2.
6
I.4 Diagnostic technique
La figure I.2, montre que l’application existante est décomposée en deux applications appe-
lées par l’équipe front-end et backend. Elle possède deux modes de communication synchrone
(HTTP REST) et asynchrone (communication à base de messages). Les deux parties partagent
une base de données MySQL.
L’application backend communique avec un serveur SMSC 3 pour envoyer les messages
textuels et avec l’OMS 4 pour envoyer les messages vocaux. Cette architecture présente plusieurs
limites. En effet, après certain temps, la base MySQL a signalé des problèmes de performance
particulièrement pour les filiales où le nombre des habitants est très important, exemple le
Congo. En plus, l’application utilise la plateforme de messaging ActiveMQ pour communiquer
entre les deux applications. Or cette plateforme a présenté des limites. En effet, ActiveMQ
n’est plus capable de fonctionner normalement avec un seuil supérieur à 10 mille messages. En
outre, le framwork Play utilisé dans la couche présentation de l’application frontend présente
des problèmes des performances à cause de son utilisation d’un moteur de template qui génère
3. Le SMSC : est l’abréviation de short Message Service Center. Il permet de gérer le transfert de messages
SMS entre les téléphones mobiles. Le protocole utilisé pour communiquer avec l’SMSC est le SMPP (Short
message Peer to Peer)
4. L’OMS : est le serveur qui permet le transfert des messages vocaux, le protocole utilisé pour communiquer
avec l’OMS est le HTTP
7
I.5 La méthodologie : SCRUM
la vue coté backend et l’envoie au client. Cette génération coté serveur peut prendre plusieurs
secondes voir quelques minutes dans quelques cas.
5 La méthodologie : SCRUM
Dans le contexte de notre projet où les dimensions de notre produit n’est pas fixe dès le
début et où nous avons besoin de collaborer et dialoguer avec le reste des membres de l’équipe
en quotidien pour pouvoir réussir toutes les étapes (développement, et automatisation de la
chaîne de déploiement), l’utilisation d’une méthode agile est une priorité pour pouvoir réussir
la mission dans les meilleures conditions. Nous avons choisi de travailler avec la méthode Scrum,
utilisée par l’équipe de Messaging Pro, qui présente une implémentation de l’approche agile.
Nous présentons, dans la suite, les différents intervenants dans notre projet ainsi que le cycle
de vie de la méthode Scrum.
8
I.5 La méthodologie : SCRUM
4. Durant le sprint, l’équipe se réunit chaque jour, "Daily Scrum", pour synchroniser les
tâches.
5. A la fin du sprint, le travail doit être achevé pour faire une démonstration au client.
6. Le sprint est clôturé par un "sprint review" pour discuter les prochaines étapes du projet
et par un "sprint retrospective" pour parler des manières à appliquer pour rendre l’équipe
plus productive
Conclusion
A travers ce premier chapitre, nous avons exposé le cadre de notre travail ainsi que la
méthodologie adoptée pour la conception et le développement des tâches demandées. Nous
pouvons passer au chapitre suivant qui est réservé à présenter les concepts théoriques relatifs
à notre projet.
9
Chapitre II
Plan
1 Relation entre les microservices et DevOps . . . . . . . . . . . . . 10
2 Architecture microservices . . . . . . . . . . . . . . . . . . . . . . . 11
3 Caractéristiques d’une architecture microservices . . . . . . . . . . 11
4 Domain driven design . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5 Architecture orientée évènements . . . . . . . . . . . . . . . . . . . 14
Introduction
Afin d’atteindre les objectifs de notre projet, l’étude des concepts théoriques relatifs à notre
projet et des différents moyens mis à notre disposition est une étape inévitable. Ensuite, nous
pouvons dégager la solution envisageable qui peut faire face aux problèmes liés à la solution
existante. Dans ce chapitre, nous présentons les concepts et les termes clés qui s’inscrivent dans
le contexte de notre projet à savoir la relation entre les microservices et DevOps 1 , l’architecture
microservices, ses caractéristiques, le domaine driven design (DDD) et l’architecture orientée
évènements (EDA).
10
II.2 Architecture microservices
Le mariage entre l’architecture des microservices et l’approche DevOps a vu le jour dans des
entreprises comme Amazon, Netflix, SoundCloud, Facebook, Google, etc. Dans de nombreux
cas, ces entreprises ont commencé par des applications monolithiques, qui ont rapidement évolué
vers des services décomposés. Avec cette évolution architecturale, ces entreprises ont également
excellé avec DevOps, elles ont partagé des approches communes pour le développement de
logiciels.
En outre, les microservices apportent une productivité supplémentaire à DevOps en adop-
tant un ensemble d’outils communs, qui peut être utilisé à la fois pour le développement (Dev)
et les opérations (Ops). Ceci a facilité la tâche, en permettant aux membres des équipes Dev
et Ops de travailler ensemble sur un problème et de le résoudre avec succès. [2]
2 Architecture microservices
L’architecture microservices développe une application comme un ensemble de petits ser-
vices. Chaque service fonctionne moyennant son propre processus qui communique avec des
mécanismes légers. Les services sont développés autour des compétences métiers qui sont dé-
ployés d’une façon indépendante par un processus automatisé.[Martin Fowler] Ces services sont
isolés et autonomes mais ils communiquent entre eux pour fournir les fonctionnalités nécessaires.
Les microservices sont généralement implémentés et pilotés par des petites équipes avec suffi-
samment d’autonomie. Chaque équipe peut changer l’implémentation de chaque service voir le
remplacer par un autre avec un impact minimal sur le reste de système. [3]
Cette architecture présente plusieurs avantages comme l’hétérogénéité technologique, la
résistance contre l’échec, la scalabilité sur mesure, la facilité de déploiement, l’alignement or-
ganisationnel, la réutilisabilité, etc. [4]
11
II.3 Caractéristiques d’une architecture microservices
composants plus explicite. En effet, la plupart des langages sont incapables de fournir un bon
mécanisme pour définir une interface publiée explicitement. Souvent, la documentation et la
discipline empêchent les clients de rompre l’encapsulation d’un composant, ce qui entraîne un
couplage fort entre les composants. Les services résolvent ce problème grâce à l’utilisation des
mécanismes d’appel distants explicites.
— Organisation autour des capacités métiers
La décomposition classique des applications logicielles consiste à décomposer l’application
selon les couches techniques, ceci permet d’avoir trois équipes (équipe interface utilisateur,
équipe développement métier et équipe base de données). Cependant, une application en mi-
croservices est décomposée en des services centrés sur des capacités métiers et où les équipes
sont inter-fonctionnelles, avec tous les niveaux de compétences (UI, stockage, gestion de projet).
— Produits, pas projets
Avec les microservices, une équipe est responsable d’un produit tout au long de son cycle de
vie. Une équipe de développement assume la pleine responsabilité du logiciel en production. Ceci
mène les développeurs à rester au courant du comportement de leurs produits en production et
augmente le contact avec le client vu qu’ils doivent prendre une partie de la charge du support.
— Extrémités Intelligentes et canaux stupides
La communauté microservices favorise l’utilisation des canaux de communication stupides
et des extrémités intelligents. Les applications en microservices visent à être aussi découplées et
aussi cohérentes. Elles reçoivent une demande, appliquent la logique appropriée et produisent
une réponse. Celles-ci sont chorégraphiées en utilisant des protocoles REST simples plutôt que
des protocoles complexes tels que WS-Choreography ou BPEL où l’orchestration est effectuée
par un outil central. Les deux protocoles souvent utilisés sont le HTTP et le messaging avec
des bus de messagerie asynchrones et légers. L’infrastructure pour le bus de messaging est
typiquement stupide, l’intelligence est concrétisée toujours dans les extrémités qui produisent
et consomment le message (dans les services).
— Une gouvernance décentralisée
L’une des conséquences de la gouvernance centralisée est la normalisation de l’application
sur une seule plateforme technologique. L’expérience montre que cette approche présente des
limites, en effet "pas tous les problèmes sont des clous et pas toutes les solutions sont des
marteaux ", il est donc difficile de trouver une seule technologie qui résout tous les problèmes.
Avec une architecture microservices, nous sommes capables de développer chaque service en
utilisant une technologie, un langage ou une plateforme différente ce qui permet de résoudre
le problème d’une façon efficace. Un autre aspect de la gouvernance décentralisée concerne les
équipes qui construisent les microservices. Ces équipes préfèrent l’idée de produire des outils
utiles afin que d’autres développeurs puissent les utiliser pour résoudre des problèmes similaires.
12
II.4 Domain driven design
13
II.5 Architecture orientée évènements
le rôle d’un langage ubiquitaire 2 pour faciliter la communication entre les développeurs et les
experts métiers et il présente le composant le plus important dans la conception de l’application.
Par ailleurs, la modélisation d’un domaine introduit l’utilisation du pattern contextes bornés
(bounded contexts). Ce pattern divise un grand modèle du domaine en contextes bornés centrés
sur des capacités métier. Nous utilisons les contextes bornés pour notre application. Nous
définissons les relations entre ces contextes à l’aide de Bounded Context Map. La figure II.1
montre comment l’outil Bounded Context Map est utilisé pour relier entre deux domaines. Les
liaisons expriment les dépendances entre les domaines.
14
II.5 Architecture orientée évènements
Conclusion
Nous avons éclairci à travers ce chapitre les concepts de base reliés à une architecture micro-
services et à notre projet en général. Dans le prochain chapitre, nous abordons la spécification
des besoins fonctionnels et non fonctionnels et nous détaillons nos microservices théoriquement
et techniquement.
15
Chapitre III
Plan
1 Spécification des besoins . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1 Identification des acteurs . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2 Backlog de produit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3 Les besoins non fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . 19
2 Division Messaging Pro en microservices . . . . . . . . . . . . . . . 19
3 Planification des Sprints . . . . . . . . . . . . . . . . . . . . . . . . . 22
4 L’architecture de l’application en microservices . . . . . . . . . . . 23
5 Les choix technologiques . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1 Choix des frameworks de back-end . . . . . . . . . . . . . . . . . . . . 24
5.2 Choix des frameworks front-end . . . . . . . . . . . . . . . . . . . . . 26
5.3 L’architecture technique . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Introduction
Ce chapitre présente le sprint de démarrage au cours duquel nous spécifions nos besoins
fonctionnels et non fonctionnels, nous divisons l’application existante en microservices, nous
planifions notre "release" et nous fixons les choix technologiques qui vont nous servir pour
l’architecture globale des microservices. D’autres choix technologiques seront fixés durant les
sprints suivants selon le besoin spécifique de chaque microservice.
16
III.1 Spécification des besoins
17
III.1 Spécification des besoins
18
III.2 Division Messaging Pro en microservices
Nous utilisons un "story point" pour estimer l’effort nécessaire à une équipe pour implémen-
ter une fonctionnalité. Trois éléments doivent être pris en compte pour l’estimation : l’effort
pour le développement, la complexité et le risque. Pour estimer la taille d’une fonctionnalité
nous allons choisir la séquence de Fibbonacci 1 qui est la plus utilisée.
19
III.2 Division Messaging Pro en microservices
nos contextes bornés. Nous présentons dans La figure III.1 chaque contexte avec une couleur
différente. La couleur jaune présente le contexte des clients, la couleur orange présente le
contexte de listes de contacts, la couleur rose présente le contexte utilisateur, la couleur bleu
présente le contexte des paquets, la couleur gris présente le contexte des campagnes vocales, la
couleur violet présente le contexte des campagnes SMS.
20
III.2 Division Messaging Pro en microservices
21
III.3 Planification des Sprints
Nous présentons dans la figure III.2 notre carte de mapping simplifiée où les relations entre
les contextes sont affichées sans noms et sans multiplicités.
L’utilisation du pattern Bounded context nous a permis d’avoir six microservices : SMSCampaign-
Service, VoiceCampaign-Service, Utilisateur-Service, Bundle-Service, Customer-Service, Contact-
Service.
User Story ID 1, 2, 3, 4, 5, 6, 7, 8. 9, 10, 11, 12, 13, 20, 21, 22, 23, 24. 25, 26, 26, 27, 28,
14, 15, 16, 17, 18, 29.
19.
22
III.4 L’architecture de l’application en microservices
23
III.5 Les choix technologiques
C’est un framework java créé par l’équipe Pivotal qui permet de simplifier le démarrage et
le développement de nouvelles applications Spring en réduisant la complexité de configuration
[9]. Spring Boot offre les avantages suivants [10] :
— Faciliter la création des applications Spring.
— Offrir un serveur d’application intégré (Tomcat, Jetty), donc nous n’avons pas besoin
de la déployer tant que fichier war.
— Fournir un "starter" POM pour simplifier la configuration Maven.
— Pas des fichiers XML à configurer.
— Fournir des fonctionnalités prêtes à la production, comme des métriques et contrôles de
santé (health check).
5.1.2 Dropwizard
Dropwizard est créé par Coda Hale à Yammer en 2011 pour alimenter les architectures des
systèmes distribués de l’entreprise (appelé maintenant Microservices). Le projet a commencé
par le rassemblement des quelques bibliothèques pour écrire des web services REST puis il a
24
III.5 Les choix technologiques
évolué en gardant toujours son identité comme un framework web minimal, facile à utiliser et
prêt à la production.
Or, Spring Boot présente de nombreux avantages compétitifs. En effet, Spring boot offre une
gamme riche des choix au niveau de serveur d’application utilisé, des implémentations REST,
des outils de manipulation des JSON, des outils de logging et plusieurs autres intégrations [11].
Nous choisissons donc le spring boot comme étant notre framework backend.
Notre deuxième choix technologique est Spring Cloud qui fournit des outils facilitant le
développement de certains patterns communs dans une architecture distribuée comme la ges-
tion de configuration, la découverte des services (Service discovery) et le coupe circuit (circuit
breaker). Nous utilisons Spring Cloud pour rependre aux exigences et aux patterns liés à une
architecture microservices. Une liste des composants requis pour notre architecture sera décrite
dans le tableau III.3. Nous notons que la comparaison entre Eureka, Consul et Zookeeper est
Tableau III.3 – Les composants d’une architecture microservice et l’apport du Spring cloud
fournie par l’annexe A. En outre, Spring Cloud offre un autre projet ”Spring Cloud Stream”
qui permet de développer des microservices à base de messages ”message-driven microservices”.
Spring Cloud Stream est basé sur Spring Intégration pour pouvoir se connecter aux ńmessages
brokerż 2 . Il possède trois "messages broker" Kafka 3 , ActiveMQ 4 et RabbitMQ 5 . Nous présen-
tons dans la prochaine section une étude comparative entre ces outils.
25
III.5 Les choix technologiques
— RabbitMQ a montré ses limites avec 3 600 messages/s, l’ajout des threads et des noeuds
aussi n’a pas amélioré les performances.
— Kafka offre les meilleures performances en terme débit d’envoi et de réception des mes-
sages et présente une meilleur scalabilité. Nous choisissons donc Kafka.
5.2.1 Angular 2
Angular 2 est l’un des frameworks le plus avancé pour le web crée par Google. Angular 2
est le résultat de reconstruction d’Angular JS, développé avec TypeScript, et sa version stable
était lancée en 14 Septembre 2016. Angular 2 a apporté plusieurs améliorations par rapport à
son prédécesseur Angular JS avec des performances améliorées, une modularité accrue, du code
plus expressif et un respect des nouveaux standards du web. [13]
5.2.2 React
React est l’une des bibliothèques JavaScript les plus populaires développées par Facebook
pour construire des interfaces utilisateurs. React permet de créer des composants réutilisables
pour construire des interfaces graphiques. [14]
Comme nous avons déjà mentionné les deux critères choisis pour la comparaison sont la per-
formance et la modularité du code. En ce qui concerne la performance, la figure III.4 [15]
montre une analyse du temps nécessaire pour afficher un certain nombre d’articles. L’analyse
est faite pour comparer 4 framworks Angular 2, Angular JS, React JS et Blaze, mais nous nous
intéressons seulement aux résultats d’Angular 2 et React JS.
26
III.5 Les choix technologiques
Selon la courbe, Angular est le plus performant, avec l’affichage de 50 000 articles dans
moins de 1000 millisecondes. En outre, en ce qui concerne la modularité du code et la lisibilité,
Angular utilise Type Script qui permet une meilleure organisation du code avec les interfaces et
un typage statique. Angular et React sont à base de composants ce qui permet d’avoir un code
modulaire et réutilisable. Après l’évaluation de ces deux critères, nous avons choisi Angular 2.
Nous utilisons aussi le framework Boosted Orange [16] pour la charte graphique, Git [17] afin
de gérer les différentes versions. et l’outil Junit pour les tests Unitaires. Ce dernier répond au
développement piloté par les tests appelés en anglais (Le TDD : Test Driven Development) qui
est fortement recommandé pour produire un code d’haute qualité et fiable.
27
III.5 Les choix technologiques
Cette architecture minimale se compose alors d’un frontend développé avec Angular 2 et
d’un backend développé avec Spring Boot et Spring Cloud.
D’abord, le microservice consulte le serveur de configuration pour avoir sa propre configu-
ration. Une fois que le service est démarré, l’agent "consule" le détecte et l’enregistre dans le
serveur de découverte. Pour rediriger une requête de L’API Gateway vers un microservice "A" le
"load balancer" consulte le service de découverte pour connaître toutes les instances disponibles
du microservice concerné, dans ce cadre plusieurs situations sont envisagées :
— Si plusieurs instances d’un service sont disponibles, le load balancer Ribbon choisit une
instance selon l’algorithme "Round Robin".
— Si le service n’a pas répondu (à cause d’un "time out" ou une erreur de communication),
le circuit breaker hystrix redirige l’appel vers une autre instance, si aucune autre instance
n’est disponible, hystrix redirige la requête vers une méthode de "fallback" interne du
service consommateur (L’API Gateway dans notre cas).
— Si, après plusieurs tentatives, le service n’arrive pas à répondre, Hystrix ouvre le circuit et
appelle directement la méthode "fallback". Puis, il envoie un nombre limité des requêtes
28
III.5 Les choix technologiques
Conclusion
Durant ce chapitre, nous avons d’abord spécifié nos besoins ce qui nous a aidé à avoir une
vision plus claire et une compréhension plus profonde du sujet. Ensuite, nous avons présenté
les microservices qui composent notre application. Puis, nous avons planifié nos sprints. Après,
nous avons présenté l’architecture globale d’une application en microservices. Enfin, nous avons
spécifié les technologies utilisées tout au long du projet et nous avons présenté l’architecture
technique cible. Dans le chapitre suivant, nous abordons les deux premiers sprints.
29
Chapitre IV
Plan
1 Microservice Bundle-Service . . . . . . . . . . . . . . . . . . . . . . . 31
1.1 Analyse fonctionnelle de microservice " Bundle-Service " . . . . . . . . 31
1.2 Conception de microservice Bundle-Service . . . . . . . . . . . . . . . 32
1.3 Réalisation de microservice "Bundle-Service" . . . . . . . . . . . . . . 34
2 Microservice PhoneNumber-Service . . . . . . . . . . . . . . . . . . 36
2.1 Conception de microservice "PhoneNumber-Service" . . . . . . . . . . 37
2.2 Implémentation de microservice "PhoneNumber-Service" . . . . . . . . 38
3 Microservice Customer-Service . . . . . . . . . . . . . . . . . . . . . 39
3.1 Analyse fonctionnelle de microservice "Customer-Service" . . . . . . . 39
3.2 Conception de microservice "Customer-Service" . . . . . . . . . . . . . 40
3.3 Réalisation de microservice "Customer-Service" . . . . . . . . . . . . . 41
4 Microservice User-Service . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1 Analyse fonctionnelle de microservice "User-Service" . . . . . . . . . . 42
4.2 Conception de microservice "User-Service" . . . . . . . . . . . . . . . . 43
4.3 Réalisation de microservice "User-Service" . . . . . . . . . . . . . . . . 46
5 Microservice "ContactList-service" . . . . . . . . . . . . . . . . . . . 49
5.1 Analyse fonctionnelle de microservice "ContactList-Service" . . . . . . 49
5.2 Conception de microservice "ContactList-Service" . . . . . . . . . . . . 51
5.3 Réalisation de microservice "ContactList-Service" . . . . . . . . . . . . 53
Introduction
Au cours de ce chapitre, nous détaillons les étapes effectuées durant le premier et le deuxième
sprint. L’objectif du premier sprint est la réalisation du microservice "Bundle-Servcie","PhoneNumber-
Service"et "Customer-Service". Quant à l’objectif du deuxième sprint, il s’agit de réaliser les mi-
croservices "User-Service" et "ContactList-Service". Pour chaque microservice, nous présentons
30
IV.1 Microservice Bundle-Service
l’analyse des besoins, la conception proposée ainsi que les interfaces homme-machine dévelop-
pées.
1 Microservice Bundle-Service
Dans cette partie, nous décrivons la démarche suivie pour concevoir et développer notre pre-
mier microservice Bundle-Service. Nous rappelons que ce service permet de gérer les paquets. 1
1. Paquet : Un client doit acheter un paquet pour pouvoir lancer des campagnes. Chaque paquet a son prix
, et définit les prix de chaque type d’SMS et d’appel vocal.
31
IV.1 Microservice Bundle-Service
La figure IV.2 présente l’architecture logicielle de microservice Bund Service qui est consti-
tuée de trois couches :
— IntegrationLayer : Elle joue le rôle de façade du microservice, elle assure la communi-
cation avec les autres composants du système et elle délègue le traitement à la couche
Business Logic Layer.
— Business Logic Layer : Elle est la responsable du logique métier.
— Data Aceess Layer : Elle est la responsable de la communication avec le serveur de
stockage des données.
Bundle-Service présente 4 packages qui sont présentés dans la figure IV.3 comme suit :
— com.olt.domain : présente le package de nos entités.
32
IV.1 Microservice Bundle-Service
33
IV.1 Microservice Bundle-Service
Pour mettre en place notre microservice "Bundle-Service", nous choisissons les outils tech-
nologiques présentés dans la figure IV.5 :
34
IV.1 Microservice Bundle-Service
Nous exposons les interfaces liées au microservice Bundles-Service. La figure IV.6 présente
l’interface d’ajout d’un nouveau paquet.
Une fois le paquet est créé, il est ajouté à la liste des paquets existants. Pour chaque paquet,
nous avons la possibilité de l’éditer ou bien de le supprimer, voir figure IV.7.
35
IV.2 Microservice PhoneNumber-Service
Les résultats des tests sont présentés dans la figure IV.8. Cette figure montre la réussite
des 5 tests unitaires. Ces testes permettent de tester l’ajout, la modification , la suppression, la
recherche par un identifiant, et la recherche de tous les "Bundles".
2 Microservice PhoneNumber-Service
Nous avons eu recours à l’externalisation de la vérification de numéro de téléphone dans un
microservice à part vu qu’il est un traitement sollicité aux plusieurs niveaux de notre système.
Cette externalisation permet d’avoir un code faiblement couplé où le changement au niveau de
cette fonctionnalité va impliquer seulement le changement de ce microservice. Le microservice
PhoneNumber-Service est le responsable de la vérification de la validité et le type d’un numéro
de téléphone. Ce microservice expose une seule interface avec une seule méthode, elle permet
de retourner le type de numéro de téléphone. La méthode retourne :
— 0 si le numéro est Invalide
— 1 si le numéro est Onnet (appartient à l’opérateur orange)
— 2 si le numéro est Offnet (appartient à un autre opérateur local)
36
IV.2 Microservice PhoneNumber-Service
37
IV.2 Microservice PhoneNumber-Service
38
IV.3 Microservice Customer-Service
3 Microservice Customer-Service
3.1 Analyse fonctionnelle de microservice "Customer-Service"
Ce microservice concerne l’administrateur supérieur qui a le droit de créer un nouveau
client, de le modifier, de le supprimer et de consulter la liste des clients existants. Un compte
client représente le compte créé pour l’entreprise lors de son inscription sur notre plateforme.
Le diagramme ci-dessous montre le diagramme de cas d’utilisation de microservice Customer-
Service.
39
IV.3 Microservice Customer-Service
40
IV.3 Microservice Customer-Service
Les interfaces présentées par la figure IV.14 et la figure IV.15 présentent respectivement
l’interface de liste des clients inscrits dans la plateforme et le formulaire d’ajout d’un nouveau
client.
41
IV.4 Microservice User-Service
La figure IV.16 présente les tests unitaire développés pour tester le microservice Customer-
Service. Ces tests permettent de tester la création, l’ajout, la modification et la recherche de
tous les clients.
4 Microservice User-Service
4.1 Analyse fonctionnelle de microservice "User-Service"
Un administrateur a le droit de gérer les comptes utilisateur, il peut créer un nouveau
compte utilisateur, activer ou désactiver un compte utilisateur et lister tous les utilisateurs.
Un administrateur supérieur hérite les rôles d’un administrateur et en plus il peut ajouter un
compte administrateur et lister les administrateurs existants. La figure ci-dessous présente le
diagramme de cas d’utilisation de microservice "User-Service".
42
IV.4 Microservice User-Service
43
IV.4 Microservice User-Service
44
IV.4 Microservice User-Service
45
IV.4 Microservice User-Service
46
IV.4 Microservice User-Service
47
IV.4 Microservice User-Service
Pour tester le bon fonctionnement de ce microservice, nous présentons dans la figure IV.24
les résultats des tests unitaires développés. Ces tests permettent de tester l’ajout d’un utilisa-
teur et d’un administrateur, d’activer ou désactiver un compte utilisateur, de trouver tous les
utilisateurs et les administrateurs, de mettre à jour la balance d’un utilisateur soit en ajoutant
ou en soustrayant un montant et de lire à partir du Kafka.
48
IV.5 Microservice "ContactList-service"
5 Microservice "ContactList-service"
Le développement de ContactList-Service est très similaire au développement des microser-
vices précédents. Pour cette raison, nous ne présentons que les diagrammes que nous trouvons
pertinents.
49
IV.5 Microservice "ContactList-service"
50
IV.5 Microservice "ContactList-service"
51
IV.5 Microservice "ContactList-service"
52
IV.5 Microservice "ContactList-service"
Dans cette section, nous présentons les interfaces développées pour le microservice "ContactList-
Service". La figure IV.29 montre la liste des toutes les listes de contacts d’un utilisateur.
La figure IV.30 présente le pop-up affiché à l’utilisateur pour pouvoir créer une liste en
important un fichier.
53
IV.5 Microservice "ContactList-service"
L’interface IV.31 présente le pop-up affiché à l’utilisateur pour pouvoir créer une liste de
contacts manuellement. Pour ajouter un contact, l’utilisateur clique sur le bouton "Add" pour
pouvoir saisir les informations liées à un contact comme indique la figure IV.32.
54
IV.5 Microservice "ContactList-service"
la figure IV.33 présente les résultats des tests unitaires développés pour tester le microservice
"ContactList-Service". Ces tests permettent de tester l’ajout d’une liste de contacts, l’ajout d’un
contact à une liste, l’importation des contacts à partir d’un fichier, la recherche d’une liste par
son identifiant ou bien par l’identifiant d’un utilisateur, la suppression de toutes les listes de
contacts et la recherche de toutes les listes.
Conclusion
Au cours de deux premiers sprints nous avons pu développer les microservices suivants :
"Bundle-Service", "PhoneNumber-Service", "Customer-Service", "User-Service" et "Contact-ListService".
Chaque microservice est développé comme étant un mini produit et intégré avec le frontend
à l’aide de l’API Gateway. Après avoir validé ces microservices avec le "product owner", nous
avons envoyé chaque microservice à son entrepôt Git (nous avons un entrepôt Git par micro-
service) qui se trouve dans un serveur Git distant pour qu’il soit automatiquement déployé.
Dans le chapitre suivant, nous étudions les deux derniers sprints.
55
Chapitre V
Plan
1 Microservice "SMSCampaign-Service" . . . . . . . . . . . . . . . . . 56
1.1 Analyse des besoins fonctionnels du "SMSCampaign-Service" . . . . . 57
1.2 Conception de microservice "SMSCampaign-Service" . . . . . . . . . . 60
1.3 Réalisation de microservice "SMSCampaign-Service" . . . . . . . . . . 66
2 Microservice "VoiceCampaign-Service" . . . . . . . . . . . . . . . . 71
2.1 Analyse fonctionnelle de microservice "VoiceCampaign-Service" . . . . 71
2.2 Conception de microservice "VoiceCampaign-Service" . . . . . . . . . 72
2.3 Réalisation de microservice "VoiceCampaign-Service" . . . . . . . . . . 78
Introduction
Après avoir développé les microservices : Bundle-Service, Customer-Service, User-Service,
Contact-ListService et PhoneNumber-Service, nous passons au développement des microser-
vices SMSCampaign-Service et VoiceCampaign-Service qui sont les plus importants dans notre
architecture. Ce chapitre présente les cycles de vie du troisième et quatrième Sprint,à savoir
l’analyse fonctionnelle détaillée, la conception, les choix technologiques, la réalisation et les
tests de chaque microservice.
1 Microservice "SMSCampaign-Service"
Dans cette partie, nous décrivons la démarche suivie pour concevoir et développer le mi-
croservice "SMSCampaign-Service". Ce dernier permet de gérer le cycle de vie d’une campagne
SMS.
56
V.1 Microservice "SMSCampaign-Service"
Créer une campagne SMS implique implicitement son lancement, soit immédiatement soit
dans la date planifiée. Nous présentons dans la figure V.2 le diagramme de séquence système
lié à la création d’une campagne SMS. Pour des raisons de clarté, le lancement dune campagne
est présenté par un autre diagramme de séquence. Au remplissage du formulaire l’utilisateur a
le droit d’attacher un fichier contenant des numéros, de choisir des listes des contacts ou/et de
taper les numéros manuellement. Nous supposons que l’utilisateur a choisi toutes les actions.
57
V.1 Microservice "SMSCampaign-Service"
58
V.1 Microservice "SMSCampaign-Service"
La figure V.3 présente le diagramme de séquence système "lancer une campagne" qui est
déjà référé dans le diagramme de séquence de la figure V.2
59
V.1 Microservice "SMSCampaign-Service"
60
V.1 Microservice "SMSCampaign-Service"
Nous avons déjà expliqué dans le chapitre 2 section 5 l’architecture EDA 1 . L’utilisation
de cette dernière dans notre microservice "SMSCampaign-Service" va nous garantir une
architecture faiblement couplée, évolutive, qui respecte le principe "single responsibility
principle" 2 où chaque fonctionnalité est encapsulée dans une classe. Une autre raison
pour adopter cette architecture c’est réduire les coûts des accès (lecture/écriture) à la
base de données. En effet, la lecture à partir d’un "message broker" est beaucoup moins
coûteuse et beaucoup plus rapide que la lecture d’une base de données. Finalement
l’application communique avec le SMSC via le protocole smpp qui est un protocole
asynchrone donc les communications avec cet acteur doivent se faire avec un "message
broker".
A l’aide du modèle de domaine, nous dégageons les objets à persister dans notre base de
données. La figure V.4 présente le modèle de domaine du "SMSCampaignService".
1. EDA : Event Driven Architecture
2. single responsibility principle :chaque classe doit avoir une responsabilité unique
61
V.1 Microservice "SMSCampaign-Service"
Une campagne SMS peut avoir plusieurs états tout au long de son cycle de vie, les transitions
entre ces états sont représentées dans le diagramme d’état de la figure V.5
62
V.1 Microservice "SMSCampaign-Service"
Un message SMS peut avoir plusieurs états tout au long de son cycle de vie, les transitions
entre ces états sont représentées dans le diagramme d’état de la figure V.6
63
V.1 Microservice "SMSCampaign-Service"
64
V.1 Microservice "SMSCampaign-Service"
La figure V.7 explique le processus de création d’une campagne SMS et son lancement
au niveau de microservice "SMSCampaign-Service". La couleur bleu présente les classes de
"SMSCampaign-Service" et la couleur vert présente les topics 3 utilisées.
1. Une fois que l’API Gateway met le message contenant les détails de la campagne SMS
dans la topic, il est consommé par "SMSCampaignCreator".
2. L’SMSCampaignCreator crée un objet campagne ainsi que les SMS à envoyer, et il les
stocke dans la base de données.
3. Le "SMSCreator" produit un message avec l’identifiant de l’utilisateur et le coût de
la campagne, pour mettre à jour la balance de l’utilisateur, et le met dans la topic
"BalancUpdaterTopic". Nous parlons ici de la consistance à base d’évènement.
4. Une fois que la date du lancement correspond à la date actuelle "SMS Message loader"
charge la campagne et ses SMS à partir de la base.
5. Il crée une topic avec un nom qui se compose de "topic.+idCmpaign" dans laquelle il
met tous les SMS relatifs à cette campagne.
6. Ensuite, il met la campagne concernée dans une topic appelée "campaign".
7. Le "SMS Sender" qui est en écoute sur la topic "campaign", la détecte et la consomme.
8. Ensuite, il consomme tous les SMS de la campagne concernée.
9. Pour chaque SMS consommé, le "SMS sender" vérifie l’état actuel de la campagne.
— Si elle est en attente, il met à jour son état à "lancée" (il s’agit du premier message)
et il envoie le message au SMSC.
— Si elle est suspendue, il remet le message dans la topic.
— Si elle est démarrée il envoie le message au SMSC.
10. Le SMSC renvoie une réponse au "SMS Sender" avec une smppID, SmsCampaignId,
messageId. Le smppID est l’identifiant unique du message dans le SMSC.
11. "SMS Sender" reçoit le message envoyé par SMSC et il le met dans la "topic SMSSent".
12. "SMS Sent Event Handler" consomme le message depuis la topic "SMSSent".
13. "SMS Sent Event Handler" met à jour le message avec l’état envoyé, et il lui affecte une
smppID.
14. Après un certain moment, le SMSC enverra une autre réponse avec le smppID et l’état
de livraison de chaque SMS envoyé.
3. Topic : c’est un canal qui implémente la sémantique Publier/Abonner
65
V.1 Microservice "SMSCampaign-Service"
15. "SMS Receiver" reçoit ce message et il le met dans la topic "SMS Deliv".
16. "SMSDeliv Event Handler" consomme le message depuis la topic "SMS Deliv" et il met
à jour le message concerné.
66
V.1 Microservice "SMSCampaign-Service"
Comme nous avons déjà précisé que la solution existante utilise MySQL qui présente plu-
sieurs problèmes de performances. En effet la fonctionnalité principale de Messaging Pro est
l’envoi des messages en masse donc la performance est une exigence. Or, l’utilisation des bases
de données relationnelles cause plusieurs problèmes de performance dont nous citons :
— Un inter-blocage, lors de l’ajout ou mise à jour d’une campagne, ce qui implique l’indis-
ponibilité des fonctionnalités de l’application.
— Les données sont en train d’augmenter d’une manière exponentielle, donc la scalabilité
est devenue indispensable pour l’application, or une base de données relationnelle pose
des problèmes de scalabilité.
— L’application est en plein essor, chaque jour des améliorations sont effectuées et des
fonctionnalités sont ajoutées. Ce qui implique des modifications à effectuer au niveau
des schémas des tables qui ne sont pas beaucoup appréciées par les administrateurs
des bases relationnelles. Tous ces problèmes mettent en question le choix de la base
relationnelle, et nous pousse à réfléchir aux bases des données NoSQL.
Il existe quatre types des bases des données NoSQL[18] :
— Clé/Valeur :
Les données sont représentées par un couple clé/valeur.
— Orienté Colonne :
Ce modèle rassemble a une base de données rationnelles sauf que dans cette famille le
nombre des colonnes peut varier dun enregistrement à un autre.
— Orienté document :
ce modèle étend le paradigme clef/valeur avec pour valeur un document Json/xml.
Chaque document est un objet qui contient un ou plusieurs champs, et chaque champ
contient une valeur typée
— Orienté graphe :
Ce modèle est basé sur les théories des graphes. Il sappuie sur la notion de nuds, de
relations et de propriétés qui leur sont rattachées.
Pour notre analyse, nous excluons la base de données clé/valeur qui est adéquate pour la
représentation des données simples avec une seule clé comme le cas de stockage de session
utilisateur. Nous excluons aussi la base de données orientée graphe qui est plus appropriée à la
représentation des données d’un réseau social, ce qui n’est pas notre cas. Et nous gardons pour
la comparaison les bases des données orientée colonnes et orientée document. Nous choisissons
de comparer les deux candidats les plus matures de chaque famille qui sont Mongodb coté base
de données orientée document et Cassandra coté base de données orientée colonnes.
Dans ce qui suit, nous présentons les raisons qui nous ont poussé à choisir MongoDB et ne pas
Cassandra :
67
V.1 Microservice "SMSCampaign-Service"
— Nous sommes dans un contexte web où les données circulent avec des documents JSON 4
qui est le format de stockage d’une valeur dans MongoDB.
— Notre traitement présente plusieurs opérations de recherches, d’où le besoin d’indexer
les champs concernés, ce qui n’est pas possible avec Cassandra.
— Cassandra est plus performante avec les traitements analytiques, ce qui ne présente pas
notre besoin.
— Nous pouvons utilisé des modèles des données normalisées avec MongoDB grace à l’uti-
lisation de Réference pour présenter les relations entre deux documents.
1.3.1.4 SMPPSIM
Pour simuler l’SMSC nous avons utilisé un outil open Source SMPPSim développé par
Selenium Software qui permet de tester les applications à base de Smpp.
68
V.1 Microservice "SMSCampaign-Service"
Nous présentons dans cette partie les interfaces réalisées pour pouvoir gérer une campagne
SMS. La figure V.9 présente le formulaire de création d’une nouvelle campagne SMS.
La figure V.10 montre la liste des campagnes SMS créés. Quatre parmi 5 campagnes sont
lancées et terminées et une est suspendue avant d’être lancée.
69
V.1 Microservice "SMSCampaign-Service"
Au niveau de l’interface présentée par la figure V.10 un utilisateur peut reprendre la dernière
campagne qui est suspendue comme il peut l’annuler. La figure V.11 montre le résultat d’une
action d’annulation de la dernière campagne.
Figure V.11 – La liste des campagnes SMS après annulation d’une campagne
70
V.2 Microservice "VoiceCampaign-Service"
2 Microservice "VoiceCampaign-Service"
Le microservice ""VoiceCampaign-Service" permet de gérer les campagnes vocales. Nous
décrivons dans cette partie la démarche suivie pour concevoir et développer ce microservice.
71
V.2 Microservice "VoiceCampaign-Service"
72
V.2 Microservice "VoiceCampaign-Service"
Un message vocal peut avoir plusieurs statuts tout au long de son cycle de vie, La figure
V.15 illustre le diagramme d’état d’un message vocal.
73
V.2 Microservice "VoiceCampaign-Service"
L’envoi d’une campagne vocale se fait automatiquement une fois que la date du lancement
correspond à la date actuelle. Pour mieux illustrer le fonctionnement interne, nous avons re-
présenté l’enchaînement des actions avec un diagramme de séquence représenté dans la figure
V.16
74
V.2 Microservice "VoiceCampaign-Service"
75
V.2 Microservice "VoiceCampaign-Service"
Nous représentons dans la figure V.17 le diagramme de séquence relatif à l’annulation d’une
campagne vocale.
76
V.2 Microservice "VoiceCampaign-Service"
77
V.2 Microservice "VoiceCampaign-Service"
Nous présentons dans ce qui suit les interfaces relatives au microservices "VoiceCampaign-
Service". La figure V.19 présente le formulaire de création d’une nouvelle campagne vocale.
78
V.2 Microservice "VoiceCampaign-Service"
79
V.2 Microservice "VoiceCampaign-Service"
Conclusion
Au cours de ce dernier chapitre, nous avons réussi à développer les deux microservices
principaux SMSCampaignService et VoiceCampaignService. L’architecture globale de notre
solution est présentée par l’annexe B. Nous avons réussi à tester les communications entre
notre SMSCampaignService et le SMSC en utilisant SMPPSIM déjà mentionné dans le chapitre
5 section 1.3.1.4. Nous avons aussi réussi à tester les communications entre le microservice
VoiceCampaign-Service et l’OMS. A la fin de chaque sprint, nous avons validé chaque produit
avec le "product owner" et nous avons envoyé chacun d’eux à un entrepôt Git distant pour être
automatiquement déployé en suivant la chaine de déploiement décrite dans l’annexe C.
80
Conclusion générale
Notre projet de fin d’études effectué au sein de Sofrecom a abouti à une refonte de l’ap-
plication "Messaging Pro". Nous avons commencé par une identification des limites liées à une
architecture microservice et un diagnostic technique de la solution existante. Ensuite, nous
étions responsables de la mise en place de l’architecture de la solution ainsi que la collecte
des besoins, la conception, la réalisation et les tests. Le travail réalisé n’a pas été une simple
migration mais une réécriture complète de la solution.
Nous avons pu résoudre à travers cette refonte les problèmes techniques liées à la base de
données, au message broker et au framework frontend existants ainsi que les limites liées à
l’architecture monolithique.
A présent, notre solution répond pratiquement aux objectifs énoncés au début du stage.
En effet, nous avons pu développer les besoins fonctionnels et non fonctionnels initialement
dégagés et chaque microservice a pu passer par la chaîne de déploiement avec succès.
Faute de temps, nous avons travaillé que sur la refonte de la deuxième version de Messaging
Pro. Inclure les fonctionnalités ajoutées par la troisième version est le prochain objectif de
l’équipe. Il sera toujours intéressant d’ajouter un module pour superviser l’application et les
temps des réponses des composants de système.
81
Bibliographique
[3] Christian Posta. Microservices for Java Developers. O’Reilly (2016). 11, 24
[7] David Chou. Using events in highly distributed architectures. Microsoft-The architecture
Journal (2008). [En ligne ; consulté le 30-Mars-2017]. 14
[8] Asanka Abeysinghe. Event-driven architecture : The path to increased agility and high
expandability. White paper WSO2 (2016). 14
[11] 25
[15] Shawn McKay. Comparing Performance of Blaze, React, Angular-Meteor and Angular
2 with Meteor. http://tiny.cc/7kclly, (2015). [En ligne ; consulté le 03-Mai-2017].
26
82
Bibliographique
[23] https://groups.google.com/forum/#!topic/consul-tool/fsLGavCv-j8.
[En ligne ; consulté le 06-Mars-2017]. 85
83
Glossaire
— REST : REpresentational state transfer
— BPEL : Business Process Execution Language
— HTTP : Hypertext Transfer Protocol
— WS : Web Service
— DDD : Domain Driven Design
— EDA : Event Driven architecture
— POC : proof de concept
— DAO : Data Access Layer
— ORM : Object-relational mapping
— API : Application Programming Interface
— IHM : Interface Homme Machine
— XML : eXtensible Markup Language.
84
Annexes
Annexe A : Spring Cloud Consul, Spring Cloud Netflix
Eureka et Spring Cloud Zookeeper
Spring Cloud fournit trois technologies pour le service de découverte, nous décrivons par la
suite chaque technologie et nous procéderons à une comparaison entre eux.
Spring Cloud Consul Consul est un système distribué et hautement disponible qui permet
de découvrir et de configurer les services dans notre infrastructure[19]. Spring Cloud Consul
offre une intégration de Consul pour les applications Spring Boot[20]. Spring Cloud Consul
offre :
— Un Service de découverte : les instances sont enregistrées à l’aide de l’agent consul et
les clients peuvent découvrir les instances en utilisant des beans gérer par spring.
— Un support pour Ribbon qui est un "load balancer".
— Une configuration distribuée en utilisant Consul Key/value store.
— Un support Zuul 1
— Control Bus : Un contrôle d’évènement distribué à l’aide de Consul Events
Spring Cloud Zookeeper Spring Cloud Zookeeper fournit une intégration d’Apache Zoo-
keeper pour les applications Spring Boot[21].
— un Service de découverte : les instances sont enregistrées à l’aide de l’agent zookeeper
et les clients peuvent découvrir les instances en utilisant des beans gérer par spring
— Un support pour Ribbon qui est un load balancer.
— Une configuration distribuée en utilisant consul Key/Value store.
— Un support Zuul
Eureka de Netflix Eureka est un service de découverte de Netflix qui permet aux microser-
vices de s’inscrire eux-mêmes au moment de l’exécution[22].
85
Tableau A.1 – Comparaison entre Eureka et Consul
Eureka Consul
Enregistrement Une instance d’un microservice Une instance est détectée par un
au serveur de s’auto inscrit dans un serveur de agent consul qui s’occupe de son
d’enregistre- d’enregistrement. Une instance enregistrement dans le serveur de
ment maintient son inscription à tra- découverte. L’agent Consul uti-
vers un mécanisme de battement lise un mécanisme de "healthche-
du coeur. Si le service d’enregis- cking" 2 chaque 10 seconde, si la
trement ne reçoit pas aucun bat- vérification échoue le service est
tement pendant une période spé- marqué comme critique. Les ser-
cifique (par défaut 30 seconde), vices sont enregistrés par n’im-
le service sera supprimé de ser- porte quels serveurs puis,elles se-
veur de d’enregistrement. Les ser- ront répliquées sur les autres ser-
vices requêtent un seul service veurs.
pour s’inscrire, qui va répliquer ⇒Équilibrage de charge
les données aux autres serveurs
⇒un seul point d’échec
Le théorème AP. Par défaut c’est CP.
CAP 3 : Les clients peuvent lire des don- Mais il supporte 3 modes de
nées erronées ou manquantes. consistance,(consistency, default,
stale). Donc il peut devenir un AP
avec le mode stale.
Lancement lancé automatiquement Lancé à partir de la ligne de com-
mande.
Equilibrage de Ribbon Ribbon
charge
Echec : quand ? Échec si tous les serveurs sont en Échec si la plupart des serveurs
panne. sont en panne.
Mais, Eureka dispose de méca-
nisme de cache coté client : même
si le serveur tombe en panne le
client peut continuer à chercher
et communiquer avec d’autres
services
Autres - Consul offre un stockage de confi-
guration, par la suite il peut être
à la fois un service de découverte
ainsi qu’un serveur de configura-
tion
Consul offre une consistance modifiable, en effet on peut basculer entre un système haute-
ment disponible ou hautement consistant, ce qui convient avec notre besoin, surtout qu’on ne
86
sait pas exactement ce que nous voulons avoir, il sera génial de tester les deux modes et décider
après de changer avec un coût nul. Aussi les services dans Eureka garde une connexion avec le
serveur pour qu’ils puissent survivre, avec consul ceci est géré par un agent, nos services auront
donc moins de responsabilités. Le dernier point sur lequel nous voulons insister c’est qu’avec
Eureka, un seul serveur qui se charge de l’inscription des services ce qui présente un seul point
d’échec (SPOF). Suite à cette étude nous choisissons Consul.
Nous comparons par la suite Consul et Zookeeper. [25] Consul et zookeeper se rassemblent
beaucoup, un des problèmes de zookeeper était avec limplémentation de service de découverte
qui est un problème résolu avec Spring Cloud Zookeeper. Consul présente des avantages ar-
chitecturaux avec la notions des clients consul et le protocole gossip, ainsi quil présente un
couplage faible entre les services et les serveurs et il offre des mécanismes de "healthchech" plus
avancés. Pour cela nous avons garder Consul.
87
Annexe B : Architecture globale en microservices de Mes-
saging Pro
La figure A.1 présente l’architecture globale en microservices de Messaging Pro.
88
Annexe C : Chaîne de déploiement
Chaque microservice envoyé au serveur Git, il sera automatiquement déployé en suivant la
chaîne de déploiement présenté par le diagramme dactivité de la figure A.2.
Une fois que le microservice est envoyé au serveur Git, il sera récupéré pour construire le JAR,
si la construction échoue une notification sera envoyée à l’équipe de développement et le pro-
cessus suspend. Sinon, les tests unitaires seront lancés.
Si ces derniers échouent une notification sera envoyée à l’équipe de développement et le pro-
cessus suspend. Sinon une analyse de qualité de code sera lancée.
Si l’analyse échoue une notification sera envoyée à l’équipe de développement et le processus
suspend. Sinon le jar obtenu sera déployé dans le serveur d’hébergement (il héberge les arte-
facts).
Une fois que le JAR est hébergé une notification sera envoyée à l’équipe de d’intégration et il
sera déployé dans l’environnement de test.
Une fois qu’il est déployé dans ce dernier une notification sera envoyée à l’équipe de test. Si le
produit a présenté des problèmes dans l’environnement de test une notification sera envoyée à
l’équipe de développement et le processus suspend. Sinon il sera déployé dans l’environnement
de pré-production.
Une fois que ceci est fait une notification sera envoyée à l’équipe d’intégration et le produit
sera supervisé.
89
Figure A.2 – Diagramme d’activité de la chaîne de déploiement
90
91
إعادة هيكلة و نشر تطبيق بعث الرسائل باستخدام الميكروسرفس: العنوان
يلخص هذا التقرير األعمال المنجزة في إطار تربص نهاية الدراسة للحصول على دبلوم مهندس وطني في هندسة:ملخّص
.البرمجيات داخل المؤسسة سوفركوم
و يتمثل العمل في إعادة تصميم تطبيق واب يقوم بإرسال عدد كبير من الرسائل النصية و الصوتية وفق ا للمكرسرفسس وإيجاد
.بديل لبعض التكنولوجيات القديمة التي استوفت حدودها
. اباشي كافكا, اباشي كمال, سبرينغ كالود, سبرييغ بوت, التصميم حسب المجال, ليونة, مكروسرفيس: المف اتيح
Résumé: Le présent rapport synthétise le travail effectué dans le cadre du projet de fin
d'études
pour l'obtention du diplôme national d'ingénieur en génie logiciel au sein de l’entreprise
Sofrecom.
Le travail consiste à une refonte d’une application web de messaging en se basant sur une
architecture en microservices ainsi que trouver des alternatifs pour quelques technologies qui
ont présenté leurs limites.
Mots-clés : Microservices, Agile, Domain Driven Design, Spring Boot, Spring Cloud, Apache
Camel, Apache Kafka.
Abstract: This report summarizes the work carried out as part of the final project to obtain the
national software engineer degree in Sofrecom company.
The work consists of a redesign of a web application of messaging based on microservices
architecture as well as finding alternatives for some technologies that have presented their
limits.
Key Word: Microservices, Agile, Domain Driven Design, Spring Boot, Spring Cloud, Apache
Camel, Apache Kafka.