Migration vers l'Architecture Microservices
Migration vers l'Architecture Microservices
MEMOIRE
En vue de l’obtention du diplôme de Master
Filière: Informatique
Spécialité: Système D’information et Web (SIW)
Thème
Présenté par:
AOUADJ Moncef
1
Resumé
Au cours de la dernière décennie, le développement des applications web a connu des avancées
significatives, stimulé par l’émergence de nouvelles techniques et architectures visant à améliorer
l’efficacité, la scalabilité et l’agilité. Ces développements ont été largement propulsés par
l’adoption généralisée du cloud computing et de DevOps, qui sont devenus des pratiques
fondamentales dans l’ingénierie logicielle moderne. En particulier, l’architecture des mi-
croservices a gagné en importance pour son efficacité dans ces environnements.
L’un des défis majeurs en développement logiciel aujourd’hui est la migration des archi-
tectures traditionnelles, ou ce qu’on appelle les architectures monolithiques, vers des archi-
tectures microservices. Cette transition implique de passer d’un modèle unifié, où les appli-
cations sont développées comme une entité unique, à un modèle microservices décentralisé.
Pour faciliter cela, diverses méthodologies ont été développées, généralement catégorisées
en deux types principaux : les approches techniques et les approches basées sur le retour
d’expérience. Les approches techniques reposent sur des méthodologies définies et des pro-
cessus qui spécifient des objectifs clairs, nécessitent des informations d’entrée spécifiques et
visent à atteindre des résultats précis. Les approches basées sur le retour d’expérience s’ap-
puient sur les expériences pratiques et les insights acquis lors de migrations passées, offrant
une perspective réelle sur les défis et les solutions pour adopter les architectures microservices.
2
Mots-clés :— Applications Web, Cloud Computing, DevOps, Architecture Microservices, Mi-
gration Logicielle, Architectures Monolithiques, Approches Techniques, Approches basées sur le
Retour d’Expérience
3
Abstract
Over the past decade, the development of web applications has significantly advanced, driven by the
emergence of new techniques and architectures aimed at enhancing efficiency, scalability, and agility.
These developments have been largely propelled by the widespread adoption of Cloud computing
and DevOps, which have become cornerstone practices in modern software engineering. Particularly,
the microservices architecture has gained prominence for its effectiveness in these environments.
One of the significant challenges in software development today is migrating from traditional,
monolithic architectures to microservices. This transition involves moving from a unified model,
where applications are developed as a single entity, to a decentralized microservices model. To fa-
cilitate this, various methodologies have been developed, generally categorized into two main types:
technical approaches and feedback approaches. Technical approaches rely on defined methodologies
and processes that specify clear objectives, require specific input information, and aim to achieve
precise outputs. Feedback approaches draw upon the practical experiences and insights gained from
past migrations, offering a real-world perspective on the challenges and solutions in adopting mi-
croservices architectures.
4
CONTENTS
I Introduction 11
1 Introduction 12
1.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2 Problématique et Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
II Background 14
2 Architecture Monolithique 15
2.1 Introduction à l’Architecture Monolithique . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Structure et Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Avantages et Utilisation Initiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Défis et Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4.1 Pile Technologique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4.2 Scalabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4.3 Gestion des Changements et Maintenance . . . . . . . . . . . . . . . . . . . . 17
2.4.4 Déploiement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.5 Dette Architecturale et Silos de Données . . . . . . . . . . . . . . . . . . . . . 18
3 Architecture SOA 19
3.1 Principes et Pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.1 Caractéristiques de SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.2 Pratiques Courantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Catégories de Services en SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4 Architecture Microservices 21
4.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 Les Caractéristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5
4.3 Avantages et Inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6
8 Approches Techniques 38
8.1 Approche pilotée par le domaine (Domain-Driven Design - DDD) : Une approche
stratégique pour la migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.1.1 DDD et la décomposition du monolithe . . . . . . . . . . . . . . . . . . . . . 38
8.1.2 Exemple : le système de gestion des commandes . . . . . . . . . . . . . . . . 38
8.1.3 Identification des agrégats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.1.4 Migration progressive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.1.5 Avantages de l’approche DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.1.6 Défis de l’approche DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2 Approche centrée sur les données pour l’identification des microservices : Une per-
spective nouvelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8.2.2 Avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8.2.3 Processus d’identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8.2.3.1 Analyse du modèle de données . . . . . . . . . . . . . . . . . . . . . 42
8.2.3.2 Construction et prétraitement des documents . . . . . . . . . . . . . 42
8.2.3.3 Enrichissement sémantique des documents . . . . . . . . . . . . . . . 42
8.2.3.4 Classification (clustering) . . . . . . . . . . . . . . . . . . . . . . . . 43
8.2.3.4.1 La vectorisation TF-IDF: . . . . . . . . . . . . . . . . . . . 43
8.2.3.4.2 Détermination du nombre optimal de clusters: . . . . . . . 43
8.2.3.5 Attribution des tables et inférence des noms de microservices . . . . 43
8.3 Approches Automatisées par l’Intelligence Artificielle . . . . . . . . . . . . . . . . . . 45
8.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
8.3.2 Approches proposées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
8.3.2.1 Approche naïve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
8.3.2.2 Approche basée sur les appels co-dépendants . . . . . . . . . . . . . 45
8.3.2.3 Approche basée sur la théorie des graphes . . . . . . . . . . . . . . . 46
8.4 Approche basée sur les processus métier et les objets de données . . . . . . . . . . . 48
8.4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
8.4.2 Algorithme d’identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
8.5 Etude Comparative Entre Les Approches . . . . . . . . . . . . . . . . . . . . . . . . 50
8.5.1 Introduction à l’Étude Comparative . . . . . . . . . . . . . . . . . . . . . . . 50
8.5.2 Critères de Comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
8.5.3 Analyse Approfondie des Approches . . . . . . . . . . . . . . . . . . . . . . . 50
8.5.3.1 Approche Pilotée par le Domaine (Domain-Driven Design - DDD) . 50
8.5.3.1.1 Adaptabilité : . . . . . . . . . . . . . . . . . . . . . . . . . . 50
8.5.3.1.2 Complexité : . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.5.3.1.3 Performance : . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.5.3.1.4 Maintenance : . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.5.3.1.5 Automatisation : . . . . . . . . . . . . . . . . . . . . . . . . 51
7
8.5.3.2 Approche Centrée sur les Données (Data-Centric Process for Mi-
croservice Identification) . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.5.3.2.1 Adaptabilité : . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.5.3.2.2 Complexité : . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.5.3.2.3 Performance : . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.5.3.2.4 Maintenance : . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.5.3.2.5 Automatisation : . . . . . . . . . . . . . . . . . . . . . . . . 52
8.5.3.3 Approches Automatisées par l’Intelligence Artificielle . . . . . . . . . 52
8.5.3.3.1 Adaptabilité : . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.5.3.3.2 Complexité : . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.5.3.3.3 Performance : . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.5.3.3.4 Maintenance : . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.5.3.3.5 Automatisation : . . . . . . . . . . . . . . . . . . . . . . . . 52
8.5.3.4 Approche Basée sur les Processus Métier et les Objets de Données . 53
8.5.3.4.1 Adaptabilité : . . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.5.3.4.2 Complexité : . . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.5.3.4.3 Performance : . . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.5.3.4.4 Maintenance : . . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.5.3.4.5 Automatisation : . . . . . . . . . . . . . . . . . . . . . . . . 53
8.5.4 Tableau Comparatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.5.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
IV Conclusion 55
9 Conclusion 56
Bibliography 60
8
LIST OF FIGURES
9
LIST OF TABLES
10
Part I
Introduction
11
Section 1
Introduction
1.1 Contexte
L’évolution rapide des technologies de l’information a entraîné une transformation significative
des méthodes de développement et de déploiement des applications. Traditionnellement dominées
par des architectures monolithiques, les entreprises sont aujourd’hui confrontées à des défis d’agilité
et d’évolutivité qui remettent en question les anciennes pratiques. L’essor des technologies cloud
et des approches basées sur les microservices offre de nouvelles opportunités pour surmonter ces
obstacles, en permettant des déploiements flexibles et une scalabilité accrue.
Les architectures de microservices, en particulier, offrent une granularité fine et une possibilité
de déploiement indépendant, ce qui les rend idéales pour les environnements dynamiques et évolutifs.
Cette approche favorise également l’adoption de pratiques DevOps, en soutenant un cycle de vie
d’application continu de la conception au déploiement.
12
1.3 Organisation
Le mémoire est structuré de manière à couvrir de manière exhaustive le sujet étudié à travers
plusieurs chapitres détaillés :
• Part 3 : État de l’Art – Analyse approfondie des travaux existants relatifs à la migration
des systèmes monolithiques vers des architectures basées sur les microservices. Ce chapitre
inclut également une revue de la littérature sur les défis, les stratégies, et les résultats obtenus
dans des études de cas pertinentes.
13
Part II
Background
14
Section 2
Architecture Monolithique
15
Figure 2.1: Modèle générique d’architecture monolithique
2.4.2 Scalabilité
La scalabilité d’une architecture monolithique est limitée. Toutes les fonctionnalités partagent
les ressources (CPU et mémoire) d’un même système hôte, ce qui peut conduire à une saturation
des ressources en cas de forte demande pour une fonctionnalité particulière. La mise à l’échelle
verticale, en augmentant la mémoire, est souvent insuffisante, et la mise à l’échelle horizontale, en
16
ajoutant des serveurs redondants, est coûteuse et complexe à gérer [1, 5].
Par conséquent, la mise à l’échelle horizontale, illustrée à la figure 2.2, est la seule solution
réaliste pour augmenter la capacité des monolithes. Cela implique d’ajouter plus d’instances de
l’application entière sur de nouveaux serveurs redondants jusqu’à ce que la capacité soit suffisante
pour traiter les demandes provenant de l’interface utilisateur graphique. Il est également nécessaire
d’utiliser un équilibreur de charge pour distribuer les requêtes entrantes entre les serveurs. La
réplication des sessions est nécessaire pour distribuer les sessions entre les serveurs afin qu’une
session utilisateur puisse être traitée sur plusieurs serveurs. Comme l’illustre la figure 3, il n’y a pas
de base de données partagée entre les instances fonctionnant sur des serveurs distincts. Il est donc
nécessaire de répliquer la base de données pour garantir des instances actuelles et redondantes de
la base de données. Cette technique de mise à l’échelle est coûteuse et ajoute de la complexité au
système exécutant les instances, et n’est pas bien adaptée au déploiement dans le cloud [1].
17
[5, 6].
2.4.4 Déploiement
Le déploiement d’une application monolithique est un autre défi majeur. Il n’est pas possible
de déployer des fonctionnalités individuelles de manière indépendante ; c’est toujours l’application
entière qui doit être déployée. Cela implique souvent des temps d’arrêt pendant le redémarrage de
l’application, à moins d’utiliser des configurations de haute disponibilité qui peuvent être coûteuses
[5, 7].
18
Section 3
Architecture SOA
19
• Réutilisation des services: Les services dans une architecture SOA sont conçus pour être
réutilisés dans différents contextes et applications. Cela permet de réduire les coûts et le temps
de développement en réutilisant des fonctionnalités existantes plutôt que de les reconstruire
à chaque fois.
• Modularité: Chaque service est un module indépendant qui peut être développé, déployé,
maintenu et mis à jour indépendamment des autres services.
• Abstraction: Les détails de l’implémentation des services sont cachés derrière des interfaces
bien définies. Cela permet aux utilisateurs des services de se concentrer sur l’utilisation de
leurs fonctionnalités sans se préoccuper de leur fonctionnement interne.
• Services d’entreprise: Ce sont des services de haut niveau qui sont souvent réutilisables à
travers plusieurs applications et processus métier. Ils sont alignés avec les modèles d’infor-
mation de l’entreprise et fournissent des fonctionnalités essentielles.
• Services internes: Ces services sont généralement conçus pour des besoins spécifiques à
une unité d’affaires et ne sont pas destinés à la réutilisation à l’échelle de l’entreprise.
• Services de produits: Fournis par des fournisseurs externes ou par des produits spécifiques,
ces services sont intégrés dans les solutions SOA pour fournir des fonctionnalités spécialisées.
L’architecture SOA offre une grande flexibilité et peut contribuer à une plus grande agilité
dans les entreprises, mais elle peut aussi introduire des complexités, notamment dans la gestion et
l’orchestration des services. Son succès dépend de la capacité à bien concevoir et implémenter ses
composants, ainsi que de l’adoption de bonnes pratiques en matière de gouvernance et de gestion
des services.
20
Section 4
Architecture Microservices
4.1 Définition
L’architecture des microservices est une approche de conception d’applications comme un en-
semble de services petits, autonomes, et déployables indépendamment. Chaque microservice exécute
un processus d’affaires spécifique et communique via des interfaces légères, typiquement des API
HTTP. Cette architecture se distingue des architectures monolithiques et SOA par sa capacité à
fonctionner indépendamment en choisissant ses propres technologies et plateformes, ce qui permet
une évolutivité et une maintenance améliorées. Selon Newman (2015), les microservices peuvent
être envisagés comme des applications indépendantes qui coopèrent pour former une application
globale plus grande [14].
21
4.2 Les Caractéristiques
Les caractéristiques principales des microservices comprennent:
• Tolérance aux pannes : Ils sont conçus pour être résilients ; l’échec d’un microservice
n’impacte pas directement les autres. Des stratégies comme les circuits breakers sont souvent
utilisées pour gérer les échecs et maintenir la disponibilité du système [16].
• Agilité et flexibilité : Les microservices permettent des itérations rapides et des mises à
jour fréquentes, soutenant l’agilité des entreprises dans des environnements compétitifs.
• Scalabilité : Ils peuvent être scalés indépendamment, ce qui est particulièrement bénéfique
dans des environnements cloud où les ressources peuvent être ajustées dynamiquement pour
répondre à la demande [17].
Inconvénients :
• Consistance des données : Assurer la consistance des données à travers des services
distribués pose des défis particuliers, souvent gérés par des techniques comme les transactions
compensatoires ou les événements asynchrones [18].
22
Section 5
Les architectures logicielles jouent un rôle crucial dans la manière dont les applications sont
conçues, développées et maintenues. Les modèles monolithiques, SOA (Service-Oriented Archi-
tecture) et microservices offrent des approches distinctes avec des avantages et des inconvénients
spécifiques. Cette section fournit une analyse critique de ces architectures, en se concentrant sur
plusieurs aspects clés qui influencent leur adoption et leur efficacité dans différents environnements
de développement. Les facteurs utilisés pour cette comparaison comprennent :
• Maintenance: Considère la facilité avec laquelle chaque architecture peut être mise à jour
et maintenue, en tenant compte de la complexité des mises à jour et de l’impact potentiel des
changements sur l’ensemble du système.
• Gestion des données: Discute de la manière dont chaque architecture gère les données,
notamment en termes de centralisation versus décentralisation et de gestion de la cohérence
des données.
• Sécurité: Analyse les défis et les approches de la sécurité dans chaque architecture, y compris
la gestion des risques de sécurité liés à la distribution et à l’intégration des services.
23
Ces critères sont essentiels pour comprendre les implications pratiques de choisir une architecture
sur une autre en fonction des besoins spécifiques d’un projet ou d’une organisation. Le tableau
suivant résume et compare ces architectures selon ces dimensions clés.
24
Section 6
L’architecture des microservices n’est pas simplement un style architectural, mais une suite de
patterns stratégiques et opérationnels qui aident à décomposer une application en services plus petits
et gérables. Ces patterns ont pour double objectif de déterminer la pertinence des microservices
pour une application spécifique et de faciliter une implémentation efficace de cette architecture,
comme le soutiennent [19, 20].
25
• Soutien: Fonctions qui supportent le noyau mais peuvent être externalisées ou internalisées
selon les besoins.
Cette segmentation permet à chaque service de se concentrer sur des responsabilités claires et bien
définies, améliorant ainsi la cohérence et la qualité du service [22].
• Pattern de Service par Équipe: Services développés par des équipes dédiées, respons-
ables de l’intégralité du cycle de vie du service. Cette approche renforce la propriété et la
responsabilité, accélérant le développement et améliorant la qualité [20].
26
6.2.3 Pattern Éditeur De Sondage
Dans ce pattern, les messages ne sont pas insérés directement dans la file d’attente au moment
de la transaction. Au lieu de cela, une tâche périodique sonde la base de données pour détecter les
nouvelles entrées ou les modifications non traitées. Ce pattern est utilisé lorsque les mécanismes de
push direct ne sont pas disponibles ou souhaitables, assurant que tous les événements sont capturés
et traités, même si cela peut introduire un délai.
• Avantages :
– Scalabilité accrue : Chaque service peut être scalé indépendamment en fonction de ses
besoins en ressources.
– Développement isolé : Les développeurs peuvent mettre à jour ou modifier la base de
données d’un service sans impacter les autres, ce qui accélère les cycles de développement
[20].
– Maintenance simplifiée : Les problèmes de données sont isolés au service concerné,
facilitant les diagnostics et les corrections.
• Avantages :
– Migration facilitée : Les entreprises peuvent migrer vers des microservices sans redéfinir
entièrement leur modèle de données [19].
27
– Réutilisation des schémas : Économise le temps et les ressources en évitant de redévelop-
per les schémas de base de données [20].
• Utilisation :
• Optimisation des performances : Séparer les lectures et les écritures permet d’optimiser
chaque côté individuellement, rendant possible l’utilisation de bases de données optimisées
pour les lectures (comme Elasticsearch) et d’autres pour les écritures (comme PostgreSQL)
[22].
• Flexibilité accrue : Les microservices peuvent évoluer plus facilement en adaptant spéci-
fiquement leurs modèles de données pour répondre aux besoins des requêtes ou des comman-
des, sans compromettre l’efficacité.
• Scalabilité : Les lectures étant souvent plus fréquentes que les écritures, CQRS permet de
scaler les opérations de lecture de manière indépendante pour s’adapter aux fortes demandes
de lecture [20].
28
6.3.5 Pattern API Composition
Dans une architecture microservices, il est souvent nécessaire d’agréger les données provenant de
plusieurs services pour répondre à une requête utilisateur. Le pattern API Composition est utilisé
pour résoudre ce problème en regroupant les réponses de plusieurs microservices via un compositeur
d’API qui combine les résultats et les retourne sous forme d’une réponse unique [19].
• Flexibilité : Il devient plus simple d’ajouter ou de modifier des microservices sans affecter
les clients de l’API puisque les changements peuvent être absorbés par le compositeur.
• Simplification côté client : Au lieu que le client fasse plusieurs appels aux différents
microservices, un seul appel au compositeur d’API suffit pour obtenir toutes les informations
nécessaires, améliorant ainsi la performance perçue par l’utilisateur.
Exemple d’utilisation : Supposons qu’une interface utilisateur doit afficher les informations
détaillées d’un produit, ainsi que les avis des clients. Ces informations pourraient être réparties
entre deux microservices différents. Le compositeur d’API agrège les réponses de ces services et
renvoie une seule réponse intégrée [23].
Note complémentaire : L’utilisation combinée de CQRS et d’API Composition dans une
architecture microservices peut grandement améliorer l’efficacité du système. CQRS optimise les
performances de lecture et d’écriture, tandis que l’API Composition permet d’agréger les réponses
des microservices, rendant l’architecture plus réactive et facile à maintenir [22].
29
• Flexibilité accrue avec moins de dépendance à un service centralisé.
Inconvénients:
• Gestion centralisée de la santé des services, éliminant les instances défaillantes du pool.
Inconvénients:
Inconvénients:
Applications typiques: Des systèmes tels qu’Eureka Server et Apache ZooKeeper sont sou-
vent utilisés pour implémenter ces patterns, offrant des fonctionnalités avancées pour la gestion des
dynamiques de service dans des environnements distribués [22].
6.5.1 API-Gateway
L’API-Gateway est un élément central dans les architectures modernes de microservices, agissant
comme intermédiaire entre les clients externes et les services internes. Inspiré des principes de
30
l’architecture orientée services (SOA), il remplace les architectures traditionnelles basées sur un bus
de services d’entreprise (ESB). L’API-Gateway simplifie les interactions client-service, en gérant
l’acheminement des requêtes, la transformation des protocoles, et la mise en œuvre de logiques
communes telles que l’authentification.
Fonctionnalités clés de l’API-Gateway :
• Routage des demandes: Oriente les requêtes clients vers les microservices appropriés.
• Agrégation des réponses: Combine les réponses de divers microservices pour fournir une
réponse unifiée.
• Transformation des protocoles: Adapte les formats de données pour assurer la compati-
bilité inter-systèmes.
• Sécurité: Centralise la gestion des identités et des accès pour sécuriser les services.
• Équilibrage de charge: Répartit la charge de travail de manière équilibrée entre les services
disponibles.
Avantages :
Inconvénients :
• Meilleure expérience utilisateur par des optimisations spécifiques et une réduction de la charge
sur les clients.
Inconvénients :
Remarque : Vous pourriez envisager d’inclure une illustration ici pour montrer comment ces
patterns fonctionnent au sein d’une architecture de microservices.
31
6.6 Les Patterns de Sécurité
Les patterns de sécurité dans les architectures microservices sont cruciaux pour assurer la pro-
tection des données, l’authentification des utilisateurs, et la gestion des autorisations dans un envi-
ronnement distribué. Ces patterns facilitent la mise en place de mesures de sécurité robustes tout
en maintenant la flexibilité et l’évolutivité des services [19, 20].
• Sécurité renforcée: Les jetons peuvent être chiffrés pour assurer la confidentialité des données.
• Sans état: Idéal pour les architectures distribuées car ils ne nécessitent pas de stockage de
session côté serveur.
Inconvénients:
• Gestion des jetons: Nécessite un système robuste pour émettre, renouveler et révoquer les
jetons efficacement.
• Complexité: La mise en œuvre de la logique de validation des jetons peut être complexe [19].
• Réduction des vulnérabilités: Minimise le risque d’attaques directes sur les microservices.
Inconvénients:
• Point de défaillance unique: Si le gateway tombe en panne, l’accès à tout le système peut
être compromis.
• Latence accrue: Peut introduire un délai supplémentaire dans le traitement des demandes
[20].
32
6.6.3 Pattern de Chiffrement des Données
Ce pattern implique le chiffrement des données sensibles à la source avant leur stockage ou leur
transmission [22].
Avantages:
• Protection des données: Assure que les données compromises restent indéchiffrables sans la
clé appropriée.
• Conformité réglementaire: Aide à répondre aux exigences de protection des données person-
nelles.
Inconvénients:
• Gestion des clés: Nécessite une gestion sécurisée des clés de chiffrement, ajoutant à la com-
plexité et au coût.
• Traçabilité: Permet de retracer les actions en cas de problème de sécurité ou pour des audits
réglementaires.
• Détecter les anomalies: Les logs peuvent être analysés pour détecter des comportements
inhabituels ou malveillants.
Inconvénients:
33
6.7.1 Pattern Multi-Service par Hôte
Ce pattern implique l’exécution de plusieurs services sur un seul hôte, comme une machine
virtuelle dédiée. Cette approche est particulièrement utile dans des environnements où les ressources
de calcul sont abondantes et peu coûteuses.
Avantages :
• Utilisation optimisée des ressources : Les ressources de l’hôte sont pleinement utilisées, ce qui
peut réduire les coûts d’infrastructure.
• Scalabilité horizontale : Permet de scaler plus facilement en ajoutant plus de services sur le
même hôte ou en augmentant le nombre d’hôtes.
Inconvénients :
• Couplage potentiel : La défaillance d’un hôte peut affecter plusieurs services, augmentant le
risque de points de défaillance uniques.
• Conflits de ressources : Les services partageant un même hôte peuvent entrer en compétition
pour les ressources, ce qui peut entraîner des problèmes de performance.
• Réduction des conflits de ressources : Aucun service ne partage ses ressources, ce qui élimine
les conflits potentiels et garantit une performance plus prévisible.
Inconvénients :
• Utilisation inefficace des ressources : Peut entraîner une sous-utilisation des ressources,
surtout si les services ne nécessitent pas les capacités complètes de l’hôte.
• Coûts plus élevés : Nécessite potentiellement plus d’hôtes, ce qui peut augmenter les coûts
d’infrastructure.
34
Figure 6.1: Résumé de tous les patterns de microservices
35
Part III
State of Art
36
Section 7
Introduction
2. Approches de Feedback : Basées sur des retours d’expérience et des enseignements tirés
de migrations antérieures, ces approches utilisent les connaissances pratiques pour ajuster
les stratégies de migration selon les défis réellement rencontrés lors de la transformation de
systèmes monolithiques en architectures de microservices.
L’objectif de ce travail est de réaliser une analyse comparative des différentes méthodes tech-
niques tout en intégrant des perspectives issues des retours d’expérience. Cette analyse vise à fournir
une vision complète et nuancée qui aidera les organisations à choisir l’approche de migration la plus
adaptée à leurs besoins spécifiques.
37
Section 8
Approches Techniques
38
Figure 8.1: Les contextes délimités et les relations entre eux
• Gestion des commandes : Ce contexte gère le cycle de vie des commandes, de la création
à la livraison. Il pourrait également être un microservice distinct.
39
8.1.5 Avantages de l’approche DDD
L’approche DDD offre plusieurs avantages pour la migration vers les microservices :
• Alignement sur le métier : Le DDD garantit que l’architecture des microservices reflète
fidèlement le domaine métier, ce qui facilite la communication, la compréhension et l’évolution
du système.
• Décomposition guidée par le domaine : Le DDD fournit des outils et des concepts (tels
que le contexte borné et les agrégats) pour décomposer le monolithe de manière logique et
cohérente.
• Collaboration étroite : Le DDD nécessite une collaboration étroite entre les experts du
domaine et les développeurs pour construire un modèle de domaine précis et partagé.
Malgré ces défis, le Domain-Driven Design offre une approche stratégique précieuse pour la
migration vers les microservices. En se concentrant sur la compréhension du domaine métier et en
utilisant les concepts clés du DDD, les équipes de développement peuvent créer des architectures
de microservices plus robustes, évolutives et maintenables.
40
8.2.1 Principe
L’approche centrée sur les données pour l’identification des microservices se concentre sur la
division du modèle de données (par exemple, un schéma de base de données) en sous-modèles
cohérents et sémantiquement liés. Chaque sous-modèle, composé d’un ensemble de tables ou de
documents, est ensuite associé à la logique métier correspondante pour former un microservice.
Cette méthode permet une meilleure modularisation du système, chaque microservice ayant ses
propres données et pouvant être hébergé, implémenté ou migré indépendamment.
8.2.2 Avantages
L’un des principaux avantages de cette approche est qu’elle permet d’obtenir un ensemble de
microservices autonomes en termes de données. Cela signifie que chaque microservice peut utiliser
le service de stockage le plus approprié, qu’il soit relationnel (SQL) ou non relationnel (NoSQL),
et peut être alimenté par différentes sources de données. Cette flexibilité facilite l’évolution et la
maintenance de chaque microservice de manière indépendante.
41
8.2.3.1 Analyse du modèle de données
Le schéma de la base de données monolithique est analysé pour identifier les tables et leurs
relations, comme le montre la figure 8.3.
Chaque table est considérée comme un document et l’ensemble des tables comme une collection
de documents. Les symboles (noms de tables, attributs, relations) sont extraits, nettoyés et nor-
malisés. Les noms de tables sont dupliqués pour leur donner plus de poids dans l’analyse, et les
relations entre tables sont modélisées en fonction de leur type (singleton ou non singleton).
Comme nous utilisons l’apprentissage automatique non supervisé, qui nécessite une grande
quantité de données pour produire de bons résultats, nous devons étendre nos documents par une
technique connue sous le nom d’« augmentation de données ». Cela consiste à les enrichir avec
des symboles sémantiquement liés. Ces symboles sont liés à nos symboles par les deux relations
suivantes : «part of» et «type of», qui sont les relations de symboles les plus pertinentes pour
notre problématique de modélisation des données. Cette étape d’enrichissement utilise une base de
données lexicale, comme WordNet.
42
8.2.3.4 Classification (clustering)
Les symboles enrichis sont regroupés en clusters en fonction de leur similarité sémantique.
Chaque cluster représente un sujet potentiel pour un microservice.
Enfin, nous obtenons un ensemble de vecteurs qui représentent les poids des termes dans chaque
document.
Dans cette dernière étape, les tables de la base de données sont assignées aux clusters corre-
spondants, et le nom de chaque microservice est déduit du sujet dominant de son cluster.
43
Figure 8.4: Résultat de la méthode Elbow
44
8.3 Approches Automatisées par l’Intelligence Artifi-
cielle
L’utilisation de l’intelligence artificielle (IA) et de l’apprentissage automatique (ML) pour au-
tomatiser la migration d’applications monolithiques vers des architectures de microservices est une
voie de recherche prometteuse. [25] proposent une approche novatrice basée sur le clustering thé-
matique pour identifier les microservices potentiels au sein d’une application monolithique.
8.3.1 Principe
L’approche proposée considère le problème de la migration comme un problème de regroupement
(clustering) de classes. L’objectif est de regrouper les classes du monolithe en clusters cohérents,
chaque cluster représentant potentiellement un microservice. Pour ce faire, les auteurs utilisent
des techniques d’apprentissage automatique, notamment le traitement du langage naturel (NLP) et
l’analyse statique du code source.
L’approche naïve est la plus simple des trois. Elle se concentre uniquement sur les dépendances
structurelles entre les classes, c’est-à-dire les appels de méthodes d’une classe à l’autre. L’idée
sous-jacente est que les classes qui interagissent fortement devraient être regroupées dans le même
microservice afin de minimiser les interactions entre différents microservices.
Les étapes clés de cette approche :
• Représentation des classes : Chaque classe est représentée par un tuple de deux valeurs :
Cette approche affine l’approche naïve en prenant en compte non seulement les dépendances
directes entre classes, mais aussi les dépendances indirectes, appelées co-dépendances. Deux classes
45
sont considérées comme co-dépendantes si elles sont appelées par un ensemble commun d’autres
classes. L’idée est que si deux classes sont souvent utilisées ensemble par d’autres parties de l’ap-
plication, elles devraient probablement être regroupées dans le même microservice.
• Calcul des tuples : Chaque classe est représentée par un tuple de deux valeurs :
• Clustering : L’algorithme de clustering est ensuite appliqué pour former des clusters en
prenant en compte ces dépendances complexes.
Cette approche modélise l’application monolithique comme un graphe, où chaque nœud représente
une classe et chaque arête une relation (appel de méthode) entre deux classes. La similarité entre
deux classes est déterminée à la fois par la structure du graphe (combien de fois les classes s’appel-
lent mutuellement) et par la sémantique du code (le vocabulaire utilisé dans les noms de classes, de
méthodes et de variables).
Les étapes comprennent :
46
• Similarité structurelle : Basée sur les appels de méthodes.
call(ci , cj ) call(ci , cj )
" ! #
1
simstr (ci , cj ) = +
2 callin (cj ) callin (ci )
où :
– call(ci , cj ) est le nombre de fois qu’une méthode de la classe ci appelle une méthode de
la classe cj .
• Similarité sémantique : Basée sur le vocabulaire utilisé dans les noms de classes, méth-
odes, et variables. Cette similarité est calculée en utilisant la similarité cosinus entre les
vecteurs TF-IDF des classes. Le TF-IDF (Term Frequency-Inverse Document Frequency) est
une mesure numérique qui évalue l’importance d’un terme dans un document au sein d’une
collection de documents.
−
→
ci · −→
cj
!
simsem (ci , cj ) =
||−
→
c || · ||−
i
→
c || j
• Similarité de classe (CS) : La similarité globale entre deux classes est une combinaison
pondérée de la similarité structurelle et de la similarité sémantique :
où α et β sont des poids qui déterminent l’importance relative de chaque type de similarité.
Une fois le graphe construit et les similarités calculées, des algorithmes de détection de commu-
nautés, tels que Girvan-Newman ou Louvain, sont appliqués pour identifier les groupes de classes
fortement connectées, qui sont considérés comme des candidats pour les microservices.
47
8.4 Approche basée sur les processus métier et les ob-
jets de données
Cette approche, proposée par Amiri [26], vise à identifier les microservices en analysant les
processus métier d’un système et les dépendances entre les activités de ces processus, tant au
niveau structurel qu’au niveau des données manipulées. L’idée est de regrouper les activités qui
sont fortement liées, que ce soit par leur séquence d’exécution ou par les objets de données qu’elles
partagent, au sein d’un même microservice.
8.4.1 Principe
Voici les éléments clés de ce modèle :
• F : l’ensemble des arcs ou relations entre les activités, indiquant la séquence d’exécution.
• ρ(a) : la fonction qui associe chaque activité a aux objets qu’elle lit.
• ω(a) : la fonction qui associe chaque activité a aux objets qu’elle écrit.
T D(ai , aj ) = |ω(ai ) ∩ ω(aj )| + 0.5 × |(ρ(ai ) ∩ ω(aj )) ∪ (ω(ai ) ∩ ρ(aj ))| + 0.25 × |ρ(ai ) ∩ ρ(aj )|.
48
Ces deux relations sont ensuite agrégées pour définir la relation finale T , qui combine les dépen-
dances structurelles et de données. Formellement, étant donné un schéma P = (N, s, f, F, O, ρ, ω),
pour chaque paire d’activités ai , aj ∈ N , T (i, j) = T P (i, j) + T D(i, j).
Dans cette relation, CFi représente le facteur du cluster i, µi indique le nombre d’intra-relations
entre les activités au sein du cluster i, et δi,j représente le nombre d’inter-relations entre les activités
du cluster i et du cluster j.
49
8.5 Etude Comparative Entre Les Approches
• Automatisation : Mesure dans laquelle l’approche peut être automatisée, réduisant ainsi
l’intervention manuelle.
8.5.3.1.1 Adaptabilité : L’approche DDD est particulièrement adaptée aux systèmes com-
plexes où le domaine métier est central. Elle permet une segmentation du système en sous-domaines,
chacun étant géré par un microservice distinct. Cette granularité permet une adaptation facile aux
évolutions des exigences métier sans affecter l’ensemble du système. Toutefois, elle est moins adaptée
aux systèmes où les frontières des domaines sont floues ou mal définies.
50
8.5.3.1.2 Complexité : L’adoption de DDD nécessite une profonde compréhension du do-
maine métier ainsi qu’une collaboration étroite entre les développeurs et les experts du domaine. La
complexité réside dans la définition des « bounded contexts » et des entités métier, qui doivent être
soigneusement délimités pour éviter les chevauchements et les dépendances non souhaitées entre les
microservices.
8.5.3.1.5 Automatisation : L’automatisation dans une approche DDD est souvent limitée.
La conception nécessite une analyse et une intervention manuelle approfondie, bien que certains
aspects comme les tests unitaires et l’intégration continue puissent être automatisés. Les outils
d’automatisation doivent être alignés avec les principes DDD pour être efficaces.
8.5.3.2 Approche Centrée sur les Données (Data-Centric Process for Microser-
vice Identification)
8.5.3.2.1 Adaptabilité : Cette approche est particulièrement efficace pour les systèmes où
la structure des données est complexe et centrale aux opérations du système. Elle est adaptée aux
systèmes qui manipulent de grandes quantités de données ou où les données dictent les processus
métier. Cependant, son adaptabilité peut être limitée dans des systèmes où les processus métier
sont plus importants que les données elles-mêmes.
8.5.3.2.3 Performance : En alignant les microservices sur des ensembles de données spéci-
fiques, cette approche peut améliorer les performances, notamment en optimisant les requêtes et en
réduisant les transferts de données inutiles entre les services. Cependant, cela dépend fortement de
la qualité de l’architecture de la base de données et de la gestion des transactions distribuées.
51
8.5.3.2.4 Maintenance : La maintenance est facilitée par une séparation claire des respons-
abilités liées aux données. Chaque microservice gère ses propres données, ce qui simplifie les mises
à jour et les migrations de données. Toutefois, cette séparation doit être soigneusement gérée pour
éviter la fragmentation des données et la complexité accrue des transactions inter-services.
8.5.3.3.1 Adaptabilité : Les approches automatisées par l’IA sont très flexibles et peuvent
être adaptées à une grande variété de systèmes hérités. L’IA peut analyser les systèmes existants
pour identifier des motifs et des dépendances qui ne sont pas évidents, facilitant ainsi une migration
plus efficace. Cependant, l’efficacité de cette approche dépend de la qualité et de la quantité de
données disponibles pour entraîner les modèles d’IA.
8.5.3.3.4 Maintenance : Les systèmes basés sur l’IA peuvent poser des défis uniques en
termes de maintenance, en particulier si les modèles d’IA doivent être mis à jour ou ajustés en
fonction de nouvelles données ou de changements dans l’environnement du système. Cependant,
une fois bien configurée, l’IA peut faciliter la maintenance en prédisant les besoins en mise à jour
et en optimisant automatiquement les microservices.
8.5.3.3.5 Automatisation : L’un des plus grands avantages de cette approche est le poten-
tiel élevé d’automatisation. L’IA peut automatiser de nombreuses étapes du processus de migration,
de l’identification des microservices à leur déploiement et à leur optimisation. Cela peut consid-
érablement réduire le temps et les efforts nécessaires pour effectuer la migration.
52
8.5.3.4 Approche Basée sur les Processus Métier et les Objets de Données
8.5.3.4.1 Adaptabilité : Cette approche est particulièrement bien adaptée aux systèmes où
les processus métier sont clairement définis et bien documentés. Elle permet d’aligner les microser-
vices directement sur les processus métier, ce qui assure une correspondance étroite entre la logique
métier et l’architecture du système. Cependant, elle peut être moins efficace dans les systèmes où
les processus métier ne sont pas bien définis ou sont en constante évolution.
8.5.3.4.3 Performance : En alignant les microservices sur les processus métier, cette ap-
proche peut améliorer la performance en minimisant les interconnexions et en facilitant le traitement
en parallèle des différents processus. Toutefois, la performance peut être affectée si les processus
métier sont trop fortement couplés ou si des objets de données sont partagés de manière intensive
entre les microservices.
53
8.5.5 Conclusion
À la lumière de l’analyse comparative des différentes approches de migration vers les microser-
vices, il apparaît que chaque méthode possède ses propres avantages et limitations en fonction des
spécificités du système hérité et des objectifs de la migration.
L’Approche Pilotée par le Domaine (DDD) se distingue par sa capacité à structurer et
segmenter les systèmes complexes en domaines distincts, facilitant ainsi une gestion modulaire et
une maintenance simplifiée des microservices. Cette approche excelle dans les environnements où
le domaine métier est central et bien défini, permettant une transformation progressive et contrôlée
du monolithe vers une architecture microservices. Toutefois, la complexité inhérente à la mise en
œuvre de DDD exige une compréhension approfondie du domaine métier et une collaboration étroite
entre les équipes techniques et les experts du domaine.
En complément de l’approche DDD, l’utilisation d’une analyse statique du code peut
grandement renforcer le processus de migration. L’analyse statique permet de cartographier au-
tomatiquement les dépendances entre les modules, d’identifier les zones critiques de complexité et
de repérer les ”points chauds” dans le code qui nécessitent une attention particulière lors de la
refactorisation en microservices. Cela permet d’optimiser la phase de découpage du monolithe, en
alignant les frontières des microservices avec les « bounded contexts » identifiés par DDD.
Les autres approches, bien que puissantes dans des contextes spécifiques, présentent des dé-
fis qui peuvent limiter leur efficacité dans des projets où la complexité du domaine métier et la
nécessité d’une transition contrôlée sont des priorités. L’approche centrée sur les données, bien
qu’efficace pour les systèmes axés sur les données, peut entraîner une fragmentation des données
et complexifier les transactions inter-services. Les approches automatisées par l’IA, bien qu’offrant
un potentiel d’automatisation significatif, nécessitent une expertise avancée en machine learning et
peuvent introduire des incertitudes dans la migration. Enfin, l’approche basée sur les processus
métier, tout en étant efficace pour les systèmes bien documentés, peut manquer de flexibilité dans
des environnements en constante évolution.
Recommandation : l’approche DDD associée à une analyse statique du code est la
plus adaptée. Cette combinaison permet non seulement de structurer la migration de manière
méthodique et cohérente, mais aussi de minimiser les risques liés à la refactorisation et à la recon-
figuration du système. Elle offre un cadre robuste pour une transition progressive, tout en assurant
une maintenance facilitée et une évolutivité continue des microservices.
54
Part IV
Conclusion
55
Section 9
Conclusion
Cette thèse a approfondi l’étude de la transition des systèmes monolithiques vers des architec-
tures microservices, en commençant par établir le contexte théorique et les principes de base du
domaine. En explorant les travaux existants, nous avons distingué deux grandes catégories d’ap-
proches : techniques et basées sur le retour d’expérience. Cette distinction a permis une analyse
critique et comparative, où les approches ont été évaluées selon leurs objectifs, les inputs nécessaires,
les processus implémentés, et les résultats attendus.
Plusieurs exemples de feedback ont été présentés, offrant un aperçu pratique des méthodes
actuellement utilisées pour gérer la migration. À partir de cette analyse, plusieurs constatations et
pistes de réflexion se dégagent pour orienter les recherches futures :
Algorithme de Clustering
Les méthodes de clustering sont fréquemment utilisées pour découper les applications mono-
lithiques en microservices. Ces techniques ont démontré leur capacité à simplifier la gestion et à
augmenter la modularité des systèmes informatiques.
Évolution de la Recherche
Le champ de la migration vers les microservices est en constante évolution, avec une recherche
dynamique et de nombreuses nouvelles approches qui émergent régulièrement. Cela souligne l’im-
portance de suivre activement les derniers développements pour rester à la pointe de la technologie.
56
En conclusion, cette thèse pave la voie à des études futures et à des applications pratiques, en
particulier dans le cadre de notre projet de fin d’études qui envisage de transformer une architecture
monolithique d’entreprise en une configuration basée sur les microservices. Cette transformation
est perçue non seulement comme une amélioration technique, mais aussi comme une opportunité de
restructurer les pratiques informatiques pour mieux répondre aux exigences actuelles de flexibilité,
d’évolutivité, et d’efficacité.
57
Bibliography
58
[10] Thomas Erl. Service-Oriented Architecture: Concepts, Technology, and Design. Prentice
Hall, 2005.
[11] Nicolai M Josuttis. SOA in Practice: The Art of Distributed System Design. O’Reilly
Media, 2007.
[12] Dirk Krafzig, Karl Banke, and Dirk Slama. Enterprise SOA: Service-Oriented Archi-
tecture Best Practices. Prentice Hall, 2004.
[13] Michael P Papazoglou and Willem-Jan van den Heuvel. “Service-oriented architectures:
approaches, technologies and research issues.” In: The VLDB Journal—The Interna-
tional Journal on Very Large Data Bases 16.3 (2007), pp. 389–415.
[14] Sam Newman. Monolith to Microservices Evolutionary Patterns to Transform Your
Monolith. O’Reilly Media, 2022.
[15] Martin Fowler and James Lewis. “Microservices: a definition of this new architec-
tural term.” In: ThoughtWorks (2014). url: https://martinfowler.com/articles/
microservices.html.
[16] James Lewis and Martin Fowler. “Microservices.” In: ThoughtWorks (2014). url: https:
//martinfowler.com/microservices/.
[17] Nicola Dragoni et al. Microservices: Yesterday, Today, and Tomorrow. Springer, 2017.
[18] Martin Kleppmann. Designing Data-Intensive Applications: The Big Ideas Behind Re-
liable, Scalable, and Maintainable Systems. O’Reilly Media, Inc., 2017.
[19] Davide Taibi, Valentina Lenarduzzi, and Claus Pahl. “Architectural Patterns for Mi-
croservices: A Systematic Mapping Study.” In: Proceedings of the 6th International
Conference on Model-Driven Engineering and Software Development (Mar. 2018). doi:
10.5220/0006798302210232.
[20] Chris Richardson. Microservices Patterns: With examples in Java. Manning Publi-
cations, 2018. isbn: 9781617294549. url: https : / / books . google . dz / books ? id =
UeK1swEACAAJ.
[21] Chris Richardson. Microservices Patterns: With examples in Java. Manning Publi-
cations, 2018. isbn: 9781617294549. url: https : / / books . google . dz / books ? id =
UeK1swEACAAJ.
[22] Sam Newman. Building Microservices: Designing Fine-Grained Systems. O’Reilly Me-
dia, 2015. isbn: 978-1491950357.
[23] Martin Fowler. Microservices - a definition of this new architectural term. martin-
fowler.com. 2016. url: https://martinfowler.com/articles/microservices.html.
59
[24] Yamina Romani, Okba Tibermacine, and Chouki Tibermacine. “Towards Migrating
Legacy Software Systems to Microservice-based Architectures: a Data-Centric Process
for Microservice Identification.” In: IEEE, 2022.
[25] Chaieb M Saied M A. “Automate migration to microservices architecture using Machine
Learning techniques.” In: arXiv:2301.06508v1 [cs.SE] (2023).
[26] M. J Amiri. “Object-aware Identification of Microservices.” In: IEEE, 2018.
60