Dr. Rim Samia Kaabi
Les micro-services
Position du problème: architecture monolithique
06/12/2019
1
1
2
06/12/2019
Architecture monolithique
• Applications N-tiers. • • Chaque modification nécessite de redéployer la totalité de
IHM, core, accès aux BDD.
l'application.
• Chaque modification nécessite de re-tester l'ensemble de
l'application.
• Difficile de garder au fil du temps une bonne structure
modulaire.
• Mise à l'echelle couteuse. • Manque de diversité technologique. • Pas facile de changer un composant.
3
Architecture monolithique
Avantages • Technologies homogènes – Types d’objets / composants adaptés aux besoins architecturaux – Stack « mainstream » -> facilement intégrable • Framework – Puissance, généricité, services annexes… • Déploiement – Simple, outils intégrés dans la stack • Cohésion de l’équipe de développement
4
2
Architecture monolithique
Inconvénients • Technologies homogènes – Types d’objets / composants pas toujours adaptés aux besoins métier – Intégration de composants dans d’autres technos difficile – Choix technologiques à long terme • Framework – Peut devenir chargé quand la complexité de l’application augmente • Déploiement – Nécessite l’arrêt de toute l’application – Peut prendre du temps quand l’application grossit • Couplage fort entre les équipes de développement
Architecture monolithique
Inconvénients • Scalabilité
– Verticale
» L’application a la responsabilité de s’« auto-scaler » » Limitée aux ressources du serveur
– Horizontale
» Nécessite de réinstancier l’OS et le framework » Gestion des ressources partagées à l’extérieur de l’application
5
6
06/12/2019
3
06/12/2019
Architecture orientée services
7
Architecture orientée services
– Avantages
• Modularité, couplage faible
– Séparation des préoccupations (et des développements) – Liberté des choix technologiques – Possibilité de redéployer composant par composant – Indépendance des équipes de dév • Interfaces de communication réseau
– Pérennité des standards – Distribution possible
8
4
Architecture orientée services
– Inconvénients • Complexité
– Des mécanismes de communications – Des architectures applicatives
• Plus adaptées
– Aux environnements distribués – Aux échanges de services entre plusieurs applications
Changement de vitesse
9
10
06/12/2019
5
06/12/2019
Plus rapide et de meilleure qualité
Plus rapide et de meilleure qualité
11
12
Publicité
6
06/12/2019
Micro-service?? Juste un buzz!!!
Intérêt relatif par rapport à d'autres outils
13
14
7
06/12/2019
Architecture micro-services
15
Micro-service: origines
• L'expression « Micro-Web-Services » a été utilisée pour la toute première
fois lors d'une conférence sur le cloud computing par le Dr. Peter Rodgers, en 2005
• Le terme « microservices » a fait son apparition lors d'une conférence
d'architectes de logiciels au printemps 2011.
• Le concept de microservices n'est pas nouveau:
• Google, Facebook et Amazon utilisent cette approche à différents
degrés depuis plus de dix ans.
• Une simple recherche avec Google, par exemple, fait appel à plus de
70 microservices avant d'afficher la page de résultats.
• D'autres architectures capables de résoudre certains des problèmes
que les microservices: SOA (inconvénient est de ne pas pouvoir traiter les communications asynchrones.
16
8
Définition d’un micro-service
• Un type d'architecture logicielle dans laquelle les grosses applications sont conçues à partir de petites unités autonomes qui interagissent via des API indépendantes du langage logiciel utilisé.
• Chaque service a une portée limitée, se concentre sur une seule tâche et
est totalement indépendant.
• Cette configuration permet aux directeurs IT et aux développeurs de
construire des systèmes modulaires.
• Sam Newman* définit les micro-services comme des petits composants
spécialisés dans l'exécution parfaite d'une seule tâche.
*« Building Microservices »
17
Micro-service: caractéristique
1. une mise en œuvre de systèmes distribués
2. 1 application = 1 besoin fonctionnel
3. pas de partage de bases de données
4. communications exclusives par le réseau (HTTP ou protocole dédié si besoin)
5. chaque application peut faire les choix techniques adaptés (langages, frameworks, ...)
6. chaque application possède son cycle de vie
18
06/12/2019
9
06/12/2019
Micro-service: caractéristique
19
Micro-service: caractéristique
– Subdivision en composants : Les micro-services sont des unités indépendantes, facilement remplaçables et actualisées. Ces unités recourent à des services, tels que des appels de procédure à distance ou des demandes de service Web, pour communiquer. – Fonctionnalités d'entreprise : Le développement d'applications traditionnelles amène souvent le personnel à être réparti par exemple en « équipe côté serveur » et « équipe base de données ». Le développement des micro-services est axé sur la fonctionnalité d'entreprise, avec une responsabilité pour toute une série de fonctions couvrant l'expérience utilisateur et la gestion de projet.
20
10
Micro-service: caractéristique
– Des produits plutôt que des projets : Au lieu de se concentrer sur un projet logiciel qui est livré une fois terminé, les microservices traitent les applications comme des produits dont ils ont la responsabilité. Ils établissent un dialogue continu visant à faire correspondre en permanence l'application à la fonction commerciale. – Connexions simples et points d'accès intelligents : Les applications microservices ont leur propre logique. Les ressources souvent utilisées sont facilement mises en cache. – Gouvernance décentralisée : Des outils sont développés et partagés pour traiter les problèmes similaires à ceux rencontrés dans d'autres équipes.
Micro-service: caractéristique
21
22
06/12/2019
11
06/12/2019
Publicité
Micro-service
ÉLASTIQUE Un Microservice doit pouvoir être déployé un nombre de fois qui varie en fonction de la demande, et ce, indépendamment des autres services dans la même application (pas d'adresses réseau en dur (annuaires types ZooKeeper, ..)) .
Pour la découverte : 1. Load balancer (round robin, sticky sessions, etc) 2. DNS !
23
Micro-service
RÉSILENT Un Microservice doit échouer sans affecter d'autres services dans la même application
Les noeuds doivent mettre en œuvre des mécanismes de réplication, consensus distribué, élection, etc.
24
12
Micro-service
API Les Microservices doivent avoir une API stable, cohérente et bien documentée. https://openapis.org/
MINIMAL MAIS COMPLET Un Microservice doit être le plus petit possible mais pas plus petit. Il doit offrir une fonction complète avec des dépendances minimales avec les autres services.
25
Micro-service
• Concepts
– « Domain-Driven Design » -> « Bounded context » • Découpage d’un projet en groupements fonctionnels • Isolation de ces groupements entre eux • Chaque groupement est un mini-projet indépendant
– Développement – Déploiement – Services de support et de pilotage
Un microservice est un « running bounded context » – « Dumb pipe, smart endpoint »
• Le bus reste le plus simple possible (ne contient plus de métier) • La logique de communication est dans les services et non 26 entre eux
06/12/2019
13
06/12/2019
Micro-service
• Une application = un assemblage de « petits » services indépendants
– Chaque microservice réalise un processus métier ou une préoccupation transverse
• « capability », « unité fonctionnelle » • Ex : vente, CRM, comptabilité, front-end, GUI…
– Techniquement, les services sont
• Programmés dans des langages hétérogènes • Exécutés dans des processus séparés • Liés à leurs propres supports de persistance • Développés et déployés dans des projets distincts
27
Micro-service
La gestion centralisée de l'application est réduite au minimum
– Communication par mécanismes « légers »
• Opérateur | (pipe) • REST
– Les services peuvent utiliser des mécanismes de stockage différents – L’« intelligence » de l’application est répartie dans les services et non dans un médium de communication centralisé (ESB)
28
14
Micro-service
Aspects humains: l’organisation entre les équipes doit refléter l’architecture du produit
– Des équipes plus petites agilité, autonomie, efficacité – Chaque équipe est responsable d’un service • Choix technologiques, conception, déploiement, maintenance
– Avantages pour le produit
• Cycles de développement courts • Déploiements indépendants • Meilleure isolation des / tolérance aux bugs
29
Micro-service: avantages
• Agilité – Conception à l’échelle de la fonctionnalité – Isolation des fonctionnalités
• Légèreté – Permet de s’abstraire de la couche OS (VM)
• Scalabilité – Verticale : permet de ne répliquer que les services chargés – Horizontale : déport des services les plus chargés vers des nœuds différents
30
06/12/2019
15
Micro-service: inconvénients
• Overhead
– Nécessite une communication orientée-message entre les services (vs. appel de méthodes) – Nécessite une « surveillance » du fonctionnement des services (monitoring, tolérance aux pannes, pilotage) – Accès aux ressources partagées
• Humain
– Nécessite que les équipes soient effectivement structurées selon l’architecture du produit
• Vision / mise au point globale de l’application
– Pas triviale, peut nécessiter plusieurs itérations
31
Micro-service: pièges
– Granularité
Publicité
• J’ai regroupé plusieurs services en un seul « macro-service » • Chaque méthode de mon application est devenue un micro- service
– Architecture globale
• Il est très difficile de comprendre ce qui se passe entre mes services • La recherche d’information dans les logs est trop longue • Impossible de relancer ou ajouter rapidement des instances de mes services
32
06/12/2019
16
06/12/2019
La motivation qui pousse à utiliser les Microservices
• Frustration de ne pas obtenir le résultat souhaité avec une
architecture monolithique.
• Arrivée sur le marché d'outils permettant le déploiement des
applications Microservices avec plus de facilité.
• Large adoption des solutions d'infrastructure en tant que
service (IaaS).
• Le passage des grosses sociétés du Web vers des
architectures complètement Microservices.
Dans un avenir plus ou moins proche les applications monolithiques ne serviront qu'au prototypage
33
SOA versus micro-services
• SOA supporte le WSDL, qui fixe les points d'accès du service de manière très typée les micro-services disposent de connexions toutes simples et de points d'accès intelligents.
• SOA n'a pas d'état les micro-services en ont de nombreux
et utilisent des structures de POO qui rassemblent les données et la logique.
34
17
Micro-service et DevOps
• Une approche DevOps est cruciale pour déterminer le cadre
d'utilisation des microservices.
• Le développement des services est continu et leur
ajustement à la volée.
• Les équipes DevOps doivent assurer la mise en production des composants actualisés, en travaillant étroitement avec les intervenants internes et les fournisseurs sur les mises à jour.
35
Différence des micro-services selon les plateformes
Java
– Évite d'utiliser les fichiers Web Archive ou Enterprise Archive. – Les composants ne sont pas auto-déployés. Des conteneurs Docker ou des Amazon Machine Images le sont à la place.
PHP
Des microservices PHP de type REST sont déployés depuis déjà plusieurs années car ils sont : – Très flexibles au niveau de l'entreprise. – Facilement et rapidement testés.
Python
Il est simple de créer un service Python servant de service Web front-end pour les microservices dans d'autres langages tels qu'ASP ou PHP. Un grand choix de frameworks performants, comme Flask ou Django, est proposé. Il est important de bien comprendre l'API pour accélérer le prototypage. Possibilité d'utiliser Pypy, Cython, C++ ou Golang s'il faut plus de vitesse ou d'efficacité.
36
06/12/2019
18
Différence des micro-services selon les plateformes
Node.js Node.js est un choix naturel pour les microservices, car c'est le langage des applications Web modernes.
Parmi ses avantages :
– S'appuie sur JavaScript et tire parti du puissant moteur open-source V8 de Google. – Code machine optimisé de façon dynamique pendant l'exécution. – Processus du serveur HTTP légers. – E/S non bloquantes, pilotées par événements. – Gestion des paquets de haute qualité. – Création facile de paquets pour les développeurs. – Haute évolutivité par E/S asynchrones de bout en bout
37
Différence des micro-services selon les plateformes
.NET
• Au début des années 2000, .NET était l'une des premières
plateformes à créer des applications en tant que services à l'aide du protocole SOAP (Simple Object Access Protocol), dans un but comparable à celui
des microservices modernes. • Aujourd'hui, l'un des avantages de .NET est sa forte présence en
entreprise.
• Deux exemples d'utilisation des microservices avec .NET :
– Développement de service Web auto-hébergé .NET avec Open Web Interface for .NET (OWIN). Il est ensuite possible de l'utiliser pour intégrer des microservices. – Création d'une entreprise spécialisée dans les ressources humaines dématérialisées.
38
06/12/2019
19