introduction aux architectures microservices : introduction générale
TRANSCRIPT
SOA – Microservices
Mickaël BARON – 2016 (Rév. Janvier 2017)mailto:[email protected] ou mailto:[email protected]
@mickaelbaron
Introduction générale
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
2
Creative CommonsContrat Paternité
Partage des Conditions Initiales à l'Identique
2.0 France
http://creativecommons.org/licenses/by-sa/2.0/fr
Licence
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
3
A propos de l’auteur …
� Mickaël BARON
� Ingénieur de Recherche au LIAS
� http://www.lias-lab.fr
� Equipe : Ingénierie des Données et des Modèles
� Responsable des plateformes logicielles, « coach » technique
� Responsable Rubriques Java de Developpez.com
� Communauté Francophone dédiée au développement informatique
� http://java.developpez.com
� 4 millions de visiteurs uniques et 12 millions de pages vues par mois
� 750 00 membres, 2 000 forums et jusqu'à 5 000 messages par jour
@mickaelbaron
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
4
Plan du cours
� Contexte des applications monolithiques
� Microservice : quels sont les besoins ?
� Architecture microservices c’est quoi ?
� Comparaison avec les architectures existantes
� Technologies mises en œuvre
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
5
Déroulement du cours : Introduction générale
� Pédagogie du cours
� Des bulles d’aide tout au long du cours
� Comprendre l’utilité des microservices
� Pas de technique pour l’instant
� Pré-requis
� Ingénierie des données
� Cours architectures orientées services
� Service web REST
Ceci est une alerte
Ceci est une astuce
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
6
Ressources : Liens sur le Web
� Billets issus de Blog� www.nginx.com/blog/introduction-to-microservices� blog.loof.fr/2014/05/small-is-beautiful.html� cdelmas.github.io/2015/11/01/A-comparison-of-Microservices-Frameworks.html� dzone.com/articles/building-microservices-with-java� www.touilleur-express.fr/2015/02/25/micro-services-ou-peon-architecture� klangism.tumblr.com/post/80087171446/microservices
� Articles� microservices.io/patterns/microservices.html� martinfowler.com/articles/microservices.html� www.voxxed.com/blog/2015/01/good-microservices-architectures-death-enterprise-
service-bus-part-one� dzone.com/storage/assets/293353-rc215-microservices.pdf
� Présentations� fr.slideshare.net/gboissinot/p-microservices101-20150210� www.pst.ifi.lmu.de/Lehre/wise-14-15/mse/microservice-architectures.pdf� fr.slideshare.net/jpetazzo/docker-quels-enjeux-pour-le-stockage-et-reseau-paris-open-
source-summit-2015
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
7
Ressources : Bibliothèque
� The art of Scalability� Auteur : Michael T. Fisher and Martin L. Abbott� Éditeur : Addison Wesley� Edition : Juin 2015 - 624 pages - ISBN : 0134032802
� Continuous Delivery� Auteur : Jez Humble et David Farley� Éditeur : Addison Wesley� Edition : Août 2010 – 512 pages - ISBN : 0321601912
� Building Microservices� Auteur : Sam Newman� Éditeur : O’Reilly� Edition : Fév. 2015 – 280 pages - ISBN : 9781491950357
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
8
Evolution des applications … retour
� Exemple : application de co-voiturage
Architecture dite « Monolithique »
Architecture Orientée Service
Clients
ArchitectureMicroservice
Une grosse application
Clients
Base de données
Interfacesweb
Connecteur pour envoie SMS
API REST/SOAP
Connecteur pour envoie EMAIL
Connecteur pour paiement (Paypal)
Entreprise Service Bus
Une Application découpée par des services techniques reliés
par un bus d’intégration
Une Application découpée par des services fonctionnels
Clients
Service Conducteur
Interface web Passager
Connecteurs pour SMS, EMAILet paiement
Interfaces webBase de donnéesAPI REST/SOAP
Service Notification
(SMS, EMAIL)
Service Paiement
Service Facturation
Service Passager
Bus d’événements
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onApplication monolithique : rappel
9
� Un gros code contenant toutes les fonctionnalités et les
différentes couches logicielles
� Une seule grosse compilation et un seul
livrable (un gros fichier WAR)
� Une seule pile logicielle (Linux, JVM, Tomcat
et bibliothèques tierces)
Présentation
Logique métier
Accès données
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onArchitecture microservice : Généralités
10
� Premières discussions autour du terme microservice en
2011 lors d’un workshop sur les architectures logicielles
� Les architectures microservices sont une évolution, une
spécialisation des architectures orientées services (SOA)
� Vu comme une bonne pratique du SOA (ma vision)
� Articles de référence
� http://martinfowler.com/articles/microservices.html
� https://www.nginx.com/blog/introduction-to-microservices/
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onMicroservice : Concepts
11
� Des concepts présentés dans le premier cours restent
valables (réutilisabilité, autonomie, sans état…)
� Huit nouveaux aspects caractérisent un microservice
� Fonctionnalité unique
� Flexibilité technologie
� Equipe réduite
� Déploiement ciblé
� Montée en charge « scalabilité »
� Tests facilités
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onUne seule fonctionnalité
12
� Un microservice doit réaliser une seule fonctionnalité de l’application globale
� Un microservice peut contenir toutes les couches logicielles (IHM, middleware et base de données)
� Un microservice possède un contexte d’exécution séparé des autres (exemple : machine virtuelle ou conteneur)
Service ConducteurService Passager
Service Notification(SMS, EMAIL)
Service Paiement Service Facturation
Interfaces web Passager
Pour les applications web, séparer dans un
microservice spécifique permet de fournir des
expériences différentes aux utilisateurs
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onFlexibilité technologique
13
� Utiliser les bons langages et frameworks selon la fonction-nalité à réaliser� Play/Scala� Java EE (JSF/EJB/Java), Spring� JQuery/AngularJS/NodeJS� Django/Python� Symfony/PHP
Service ConducteurService Passager
Service Notification(SMS, EMAIL)
Service Paiement Service Facturation
Interface web Passager
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onEquipe réduite
14
� Chaque microservice à sa propre équipe de développement� L’équipe de développement orientée fonctionnalité est réduite
et pluridisciplinaire� Développeurs backend� Développeurs web� Administrateurs bases de données
Service ConducteurService Passager
Service Notification(SMS, EMAIL)
Service Paiement Service Facturation
Interface web Passager
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onDéploiement ciblé
15
� Evolution d’une certaine partie sans tout redéployer � Un seul livrable à partir d’un seul code source� Moins de coordination entre équipe quand il y a un seul
déploiement� Plus souvent� Moins de risque� Plus rapide
Service ConducteurService Passager
Service Notification(SMS, EMAIL)
Service Paiement Service Facturation
Interface web Passager
V1.0 V1.0 V2.0
V10.0 V5.0V545.2
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onMontée en charge / scalabilité
16
� Forte sollicitation sur un microservice ?� page web : Amazon en période de « Black Friday »
� batch : compression de vidéos
� Comme chaque fonctionnalité est isolée possibilité de multiplier le nombre d’instances d’un microservice
Service ConducteurService Passager
Service Notification(SMS, EMAIL)
Service Paiement Service Facturation
Interface web Passager
V1.0 V1.0 V2.0
V10.0 V5.0V545.2
Trois instances du même
microservice
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onMontée en charge / scalabilité : cube de scalabilité
17
Scalabilité Axe YDécomposition
fonctionnelle
� Le livre « The art of Scalability » décrit trois dimensions pour la scalabilité
Scalabilité Axe XCloner
Application monolithique
(JEE Application)
Partitionner les données selon les besoins• Volumétrie excessive pour les
fichiers vidéos ou musiques • Zone géographique
Autant de microservicesque de fonctionnalités
Cloner les microservices qui ont une forte sollicitation (nécessite un loadbalancer)
Utilisation d’un loadbalancerdans le cours
suivant
Netflix
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onFacilite les tests
18
� Comme chaque fonctionnalité est isolée dans un microserviceil est plus facile de les tester
� Les tests unitaires concernent la partie intrinsèque d’un microservice => on sait déjà faire
� Quels types de tests restants ?
� Service : stresser l’API exposée du microservice
� Bout-en-bout : intégrer les autres microservice (voir architecturemicroservice)
� Si c’est facile à tester alors c’est facile à déployer (principe du déploiement continu)
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onArchitecture microservice
19
� Une architecture microservice est donc un ensemble de microservices autonomes
� Pas de bus d’intégration (ESB) car il y a de la logique et donc cela force le couplage
� Utilisation d’un Bus d’événements pour le faible couplage � Utilisation d’un Load Balancer pour équilibrer la charge
Service ConducteurService Passager
Service Notification(SMS, EMAIL)
Service Paiement Service Facturation
Interface web Passager
V1.0 V1.0 V2.0
V10.0V5.0
V545.2
Bus d’événements
LoadBalancer
Synchrone
AsynchroneCharge équilibrée
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
20
Applications Monolithique Versus Microservice
q Une seule grosse application
pour toutes les fonctionnalités
q Un seul langage pour
faciliter la communication
q Couplage fort
q Communication par les
données
Architecture Orientée Service
VS
Architecture Microservice
q Autant de microservices
que de fonctionnalités
q Plusieurs langages utilisés
et API Rest pour l’exposition
q Couplage faible
q Communication par les
services
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
on
21
SOA Versus Microservice
q Standards définis par OASIS
SOAP, BPEL
q Couplage fort
q Bus d’intégration
q Plusieurs fonctionnalités par
service
q Déploiement monolithique
Architecture Orientée Service
VS
Architecture Microservice
q Standards du web
q Couplage faible
q Bus d’événement
q Une seule fonctionnalité
par microservice
q Automatiquement déployable
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onArchitecture microservices : inconvénients
22
� Plus de compilation lors de l’intégration pour vérifier si une
API est cassée ou pas
� Multiplication des SGBD utilisés (relationnel ou NoSQL) et
donc compétences nouvelles
� Développeur devient un opérationnel pour le déploiement
� Ne s’applique pas à toutes les entreprises
� Si déploiement fréquent => ok
� Si déploiement une fois l’an => monolithique
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onQui utilisent les microservices ?
23
� Uber : https://eng.uber.com/soa/
� Netflix : http://techblog.netflix.com/
� Amazon : http://fr.slideshare.net/apigee/i-love-apis-2015-
microservices-at-amazon
� Sound Cloud : https://developers.soundcloud.com/blog/building-
products-at-soundcloud-part-2-breaking-the-monolith
� Le prochain Eclipse Che IDE
� Offres d’emploi (tendances à la hausse) � https://www.linkedin.com/jobs/search?keywords=Micro+Services&location=France
� http://www.meteojob.com/candidate/offers/candidateOffersSearchResults.mj?q=micro+service+macro-job%3A14&cid=281982
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onDévelopper des architectures microservice ?
24
� Savoir Isoler un microservice
� Savoir Coder le contenu du microservice
� Savoir faire Communiquer des microservices
� Savoir Composer les microservices
� Savoir Répartir les charges
On va explorer les technologies du marché. Dans le cours suivant, on se focalisera sur une technologie
pour chaque point
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onIsoler : Machine virtuelle ou Conteneur ?
25
� Pour isoler un microservice utilisation de techniques de virtualisation
� Trois grandes techniques s’affrontent
ConteneursMachine VirtuelleServeurs physiques
Serveur MatérielServeur MatérielServeur Matériel
OSOS
Serveur Matériel
OSOS
ApplicationApplication Docker
BinairesBibliothèques
BinairesBibliothèques
Application Application
Hyperviseur
OS VirtualiséOS Virtualisé
BinairesBibliothèques
BinairesBibliothèques
Application Application
1 Application = 1 machine physique
= trop coûteux
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onIsoler : Machine virtuelle VS Conteneur
26
Machine Virtuelle(574 Mo)
Conteneur(100 Ko)
Démarrage ~ 1 minutes 0.2 seconde
Mémoire min 256 Mo ~ 0.3 Mo
Espace Disque min 1 Go ~ 0.1 Mo
� Comparatif sur les performances
2500 conteneurs ont été créés dans un Raspberry PI 2
https://blog.docker.com/2015/09/update-raspberry-pi-dockercon-challenge/
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onIsoler : les outils existants
27
� Les outils pour construire des machines virtuelles� Hyperviseur type 1 : Xen, VMware vSphere, Microsoft HyperV, KVM
� Hyperviseur type 2 : Oracle VirtualBox, VMware Player, QEMU
� Les outils pour construire des conteneurs� Conteneur : Docker, CoreOS Rocket, LXC
� Docker (https://www.docker.com) => le plus tendance …� Basé sur LXC mais plus simple à mettre en œuvre
� Dispose d’un dépôt central fournissant des images prêtes à l’emploi
� Logiciel libre
Service ConducteurV5.0
Ce microservice est isolé dans un
conteneur
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder
28
� Utiliser les plateformes logicielles (Java, Python, JavaScript)
que vous avez l’habitude d’utiliser
� Utiliser votre environnement de développement préféré
(Eclipse, IntelliJ, Netbeans, Atom…)
� Utiliser des bibliothèques qui permettent d’exposer des
services web (Rest ou SOAP)
� Automatiser le déploiement de votre application afin de
minimiser le temps
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder : le cas de Java (sans microservice)
29
Serveur Matériel
OS
Conteneur Java EE
Bibliothèques Jar partagées
Bibliothèques JAR
Classes
� Actuellement une application web (war) développée en Javaest déployée dans un serveur d’application Java
Autres ApplicationsBibliothèques
JAR
Classes
Contexte de l’application (war) Contient les classes
et les ressources
Contient les Bibliothèques Java
spécifiques
Contient les bibliothèques
globales à tous les War
…
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder : le cas de Java (avec microservice)
30
� Trois stratégies pour développer des microservices en Java� in-container : conteneur Java EE et un War (comme avant)
� container-less : un gros Jar contenant toutes les bibliothèques
� self-contained : un gros Jar en utilisant un micro-framework
In-container Container-less Self-containedServeur Matériel
OS
Docker
BinairesBibliothèques
BinairesBibliothèques
Conteneur JavaEE Application
BibliothèquesJAR
WAR
…
Serveur Matériel
OS
Docker
BinairesBibliothèques
BinairesBibliothèques
Application
JAR
…
ConteneurJavaEE
embedded
BibliothèquesJAR
Serveur Matériel
OS
Docker
BinairesBibliothèques
BinairesBibliothèques
ApplicationJAR
…
BibliothèquesJAR
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder : le cas de Java (container-less en détail)
31
� Le serveur d’application est embarqué dans l’application
� Le code source est le même que pour une application War
� Un gros Jar est distribué et prêt à l’exécution
� Solutions du marché
� Apache TomEE (anciennement OpenEJB)
� Wildfly Swarm (anciennement JBoss)
� Payara (à base de Glassfish)Serveur Matériel
OS
Docker
BinairesBibliothèques
BinairesBibliothèques
Application
JAR
…
ConteneurJavaEE
embedded
BibliothèquesJAR
$ java -jar my-big-app-container-less.jar
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder : le cas de Java (container-less en détail)
32
� Avantages
� Pas d’adaptation du code à faire, une simple méthode main à ajouter
� Rapide à démarrer
� Pratique pour les tests fonctionnels
� La plupart des serveurs d’application sont « embedded »
� Inconvénients
� Ne fournit pas toutes les fonctionnalités d’un serveur (admin ?)
� Difficulté de modification du serveur à chaud ?
� L’application est dépendante du serveur, recompiler pour changer
� Fournit toutes les bibliothèques de la pile Java EE (module profile)
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder : le cas de Java (self-contained en détail)
33
Serveur Matériel
OS
Docker
BinairesBibliothèques
BinairesBibliothèques
Application
JAR
…
BibliothèquesJAR
� Utilisation d’un micro-framework
� Le code source doit être adapté
� Un moyen Jar est distribué et prêt à l’exécution
� C’est quoi un micro-framework ?
� Framework orienté web minimaliste
� Opposé au framework qui font tout full-stack
� N’impose pas de structure à l’application
� Facilement interchangeable
$ java -jar my-big-app-self-contained.jar
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder : le cas de Java (self-contained en détail)
3434
� Micro-frameworks existants pour faciliter le développement
� KumuluzEE => très simple
� Dropwizard (Java)
� Vert.x (Java et autres)
� Spring Boot (Java)
� Restlet (Java)
� Spark (Java)
� Jodd (Java)
� Node.js, Seneca (JavaScript)
� Flask (Python)
� Sinatra (Ruby)
� Lumen (PHP)
� Silex (PHP)
� …
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCoder : le cas de Java (self-contained en détail)
35
� Avantages
� Délivre le strictre nécessaire (configuration à la “carte”)
� Fournit par conséquent un Jar moins gros que container-less
� N’impose pas de structures dans l’application
� Inconvénients
� Apprentissage d’une nouvelle bibliothèque
� Configuration parfois un peu complexe
� Nombre important de micro-frameworks sur le marché, fait-on le bon
choix ?
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onCommuniquer
36
� La communication entre des microservices peut se faire « conjointement ou pas » via� des services web (REST ou SOAP) => communication synchrone
� un bus d’événements => communication asynchrone
� Bus d’événements basés sur le protocole AMQP (AdvandedMessage Queuing Protocol)
� Solutions de bus d’événements basé sur AMQP� RabbitMQ (Pivotal) => le plus utilisé et documenté
� ActiveMQ, Apollo (Apache)
� Qpid (Apache)
� HornetQ (Jboss)
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onComposer
37
� La composition va permettre de résoudre le problème d’orchestration des conteneurs
� Exemple simple pour comprendre cette problématique � A = un conteneur pour la base de données (MySQL)� B = un conteneur applicatif� A doit être démarré avant B et B a besoin d’accéder à A (ouverture de port)
� Solutions du marché� Docker Compose (Docker inc.) => le plus simple� Docker Swarm (Docker inc.)� Kubernetes (Google) � Mesos (Apache)� Fleet (CoreOS)� Crane (https://github.com/michaelsauter/crane)� Consul
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onRépartir la charge : reverse proxy
38
� Problématique du pourquoi utiliser un reverse proxy � Plusieurs conteneurs Docker vont être créés� Plusieurs conteneurs d’une même image peuvent être créées
� Reverse Proxy ou « Proxy inversé »� Donne accès depuis un réseau externe aux conteurs
d'un réseau interne� Distribuer en fonction de la charge, les requêtes web aux conteneurs
les moins occupées (d’une même image par exemple)
� Solutions libres du marché� Nginx (Nginx inc.) => largement utilisé et très simple� Haproxy� Hipache (Docker inc.)� Træfik
Une image est le binaire qui sert à
créer un conteneur : voir prochain cours
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onBilan
39
� L’architecture microservices n’est pas la solution à tous les problèmes de performances d’un applicatif
� Problèmes courants� Modélisation
� Persistance des données
� Transaction
� Front-end non adapté
� Les microservices adresse le problème d’architecture et sont là pour faciliter la monter en charge
� Attention : il n’a jamais été précisé que les architectures monolithiques étaient mortes
Microservices - Généralités - M. Baron - Page
keul
keul
.blo
gspo
t.com
@m
ickae
lbar
onPour aller plus loin
40
� Les bonnes pratiques pour passer à une architecture
microservices => partir d’une application monolithique
� Déploiement vers des clusters
� Monitoring
� Transaction
� Sécurité