SlideShare une entreprise Scribd logo
Architectures microservices
Romain Schlick @r_schlick
Riadh Mnasri @riadhmnasri
23/01/2019
A Propos de nous
Romain Schlick
@r_schlick
• Dev Java 12 ans
• Scrum Master
• Intéressé par: TDD, DDD, qualité,
NoSql, JS, Agilité
Riadh Mnasri
@riadhmnasri
• Dev Java Kotlin
• Intéressé par le clean code,
functional Programming, TDD,
ATDD, BDD, DDD
Monolithes vs Microservices
Monolithe Microservices
No silver bullet
Il était une fois … un Monolithe magnifique
Monolithe: Définition
Tomcat
• Une seule unité d'exécution
• Composants fortement couplés
• Cadence de release long: > 3 mois
• Equipe assez grande > 10 pers
Browser MySQL
Database
WAR / EAR
Store Front UI
Catalog Service
Inventory Service
Shipping Service
Monolithes: Problèmes
Collaboration difficile
Quand l’application grossit … plusieurs équipes se marchent sur
les pieds
Testabilité lente et douloureuse
Déploiement long et risqué
Innovation rendue difficile
Difficilement scalable
Titre de la présentation - Date
Monolithe: Peut être une bonne solution
• Approche Monolithe First
• Solution parfois la plus adaptée:
• équipe reste petite
• time to market
• clean code
• livraison rapide
Architecture microservices: Définition
Architecture microservices: Exemple
Patterns de migration: Big Bang
• Très long à développer
• L’existant bouge en même temps
• Plus compliqué et risqué !
Patterns de migration: Strangler Pattern
REQUEST
ROUTER
Micro-
Service
shipping
WEB
API WEB
API
GLUE
CODE
GLUE
CODE
Old HTTP
requests
New HTTP
requests
HTTP
request
Comment découper les microservices ?
Découper par département métier
• Décomposer en sous-domaines
• Un bon point de départ
• … mais assez limitant et peu créer des dépendances
Découper par objectif (verbe d’action)
• Chaque domaine a un objectif
• Faire des interviews avec tous les acteurs (définir des patates)
• Exemple: Shipping, Billing, Recommandation, Navigation, Searching
Découper selon une contrainte technique
forte
• Haute volumétrie vs faible volumétrie (BD NoSQL/Relationelle)
• Focus Lecture vs Ecriture (CQRS)
• Calcul rapide vs exact (finance de marché)
Découper par Bounded context (DDD)
• Ubiquitous langage
• Bounded Context
• Aggregate root
• Repository
• Domain Service
Découper par Bounded Context
Event Storming
Pratique très intéressante pour identifier les contextes bornées
Différents patterns d’architecture
Exemples :
Comment gérer la communication entre les MS ?
Comment accéder aux données distribuées ?
Comment assurer la robustesse ?
Pattern = Solution réutilisable répondant à une problématique
1 DB by Service / public API / synchronous communications
Customer
Service
Domain
Store
API
Gateway
(sécurité, routing,
query multi-services)
REST
API
REST
API
Order
Service
Domain
Store
REST
API
Browser
CreateCustomer()
findCustomer()
CreateOrder()
findOrder()
findOrdersForCustomer()
findRecentCustomers()
Mobile App
Store Front UI
HTML
REST
REST
Load balancing
Circuit breaking
Service
discovery
« Back-end for front end »
1 DB by service / Async messaging / commands & events
Customer
Service
Domain
Store
Aggregator
Service
REST
API
REST
API
Order
Service
Domain
Store
REST
API
Mobile App
findCustomer()
findOrder()
findOrdersForCustomer()
findRecentCustomers()
View
Store
Message Broker
Customer created event
Credit reserved event
Order created event
Order canceled event
Subscribe to events
reserveCredit command
createOrder command
CQRS pattern: Command Query Responsability
Segregation
• Séparation des composants d’écriture (« command») et de
lecture (« query »)
• Solution alternative au CRUD
• Write: Opérations sur un modèle métier (DDD)
• Query: Vision aggrégée des objets mis à jour via des events
• Query: Eventual consistency
Permet:
• Solution pour requêter des données cross-services
• Meilleure isolation des responsabilités
• Différentes technologies
• Writing DB != Reading DB
Message broker
CQRS pattern: Schéma
Customer
Order
History
Service
SQL
DB
Commands channel
Events channel
createCustomer
reserveCredit
createOrder
cancelOrder
REST
API
Customer
Geo Loc
Service
MONGO
DB
REST
API
QUERIES
COMMANDS
Customer
Service
SQL
DB
Order
Service
SQL
DB
Order created
Order canceled
Customer created
Credit reserved
Subscribe to events
Query store
Query store Domain Store
Domain Store
Collaboration entre microservices
• Comment peuvent collaborer les microservices ?
• Comment implémenter une transaction distribuée ?
• Comment maintenir la cohérence des données distribuées ?
Titre de la présentation - Date
Transaction distribuée 2PC à proscrire
Solution = SAGA PATTERN
SAGA pattern: Séquence de transactions
locales
CreateOrder() SAGA
Order Service
Local transaction
createOrder()
Order
State = PENDING
Customer Service
Local transaction
reserveCredit()
Customer
Order Service
Local transaction
approveOrder()
Order
State = APPROVED
SAGA: Transactions compensatrices
CreateOrder() SAGA
Order Service
Local transaction
createOrder()
Order
State = PENDING
Customer Service
Local transaction
reserveCredit()
Customer
Order Service
Local transaction
cancelOrder()
Order
State = CANCELLED
InsuffisantCredit
!!!!
Message Broker
SAGA: Events Choregraphy pattern
• Prise de décision distribuée
• Coordination basée sur des messages « events »
• Chaque service va écouter les évènements et faire avancer le workflow
Order events channel
Customer events
channel
Customer
Service
Order
Service
Order created
Credit reserved
OR
Credit Limit Exceeded
Order
State
Total
Customer
creditLimit
creditReservations
reserveCredit()
create()
Approve() / reject()
Listen Order events
Listen customer
events
Message Broker
SAGA: Command / Reply Orchestration
pattern
• Prise de décision centralisée par un Orchestrateur
• Coordination basée sur des messages « command » et « reply »
• Objet persistant qui traque l’état de la SAGA et invoque les MS
Customer command
channel
Saga reply channel
Customer
Service
Order
Service
ReserveCredit
Credit Reserved
Orchestrator
Comment assurer l’atomicité du changement
d’état en base et l’envoi de l’event associé ?
Titre de la présentation - Date
Event sourcing pattern
• Approche « Event driven »
• Persister les objets métiers comme une séquence
d’évènements
• Objet métier = State change event
• Rejouer les events pour re-recréer une image de l’objet
• Event Store: Data Store + Message broker
• Se marie bien avec CQRS
Permet:
• Changement d’état en base et envoi de l’event atomique
• Historisation complète
• Audit log + Rejouer les events
Event store
Event sourcing pattern: Schéma
Entity Id Entity Type Event Id Event type Date Event Data
101 Order 901 OrderCreated … …
101 Order 902 OrderApproved … …
101 Order 903 OrderShipped … …
Event table
Order
state
Apply(event)
Order
Persister l’objet comme une séquence d’events
Rejouer les events pour obtenir une image de l’objet
Comment déployer les microservices ?
• Approche Devops:
• Intégration continue
• Déploiement continue
• Infrastructure:
• Déployés dans des containers (ex: Docker)
• Gestionnaire de containers (ex: Kubernetes)
• Cloud privé (ex: Openshift) vs Cloud Public (GCP, AWS, Azure)
• Services Mesh (ex: Istio): sécurité, load balancing, routing
• Serverless
Serverless: C’est quoi ?
• FaaS (function as a service)
• « Custom code that’s run in ephemeral container in the
cloud »
• Cloud providers: AWS Lambda, GCP Functions, MS
Functions
• Les instances sont crées à la demande et détruire après le
traitement
• Dépend fortement de services cloud tiers
• Approche events
Serverless: Bénéfices et limites
Bénéfices
• Auto scaling
• Payer à la demande
• Peu d’infra à gérer
• Event driven
• Sécurité
Limites
• Vendor lock-in
• Taille et durée de runtime limité
• Débuggage en local parfois difficile
Serverless: Exemple
Cross cutting concerns
Load balacing
Circuit breaking
Health check
Configuration
Logging
Service discovery
Métriques
Proxy / Gateway
Ex: Ribbon, Apache, Nginx,
HAProxy
Ex: Hystrix
Ex: Spring Boot Actuator
Ex: Spring Cloud Config
Ex: ELK, Logstash, Splunk
Ex: Consul, Eureka
Ex: Spring Boot Actuator
Ex: Zuul, Spring Cloud Gateway
Tracing Ex: Spring Cloud Sleuth, Zipkin,
OpenTracing
Messaging Ex: Spring Cloud Stream
Nombreuses Initiatives: Netflix OSS, Spring Cloud, Eclipse MicroProfile
Bénéfices d’une architecture microservices
• Indépendance – Faiblement couplé
• Travailler en équipes petites, feature teams
• Scalabilité
• Maintenabilité
• Testabilité
• Plus facilement déployable
• Facilite l’innovation et l’expérimentation
Challenges à relever
Complexité:
• Processus distribués
• Données distribuées
• Tolérances aux pannes
• Déploiements
• Monitoring
• Nombreux cross cutting concerns
• Nanoservices anti-pattern
Pré-requis importants
• Approche Devops impérative
• Provisionning automatique
MERCI !
Références
• https://microservices.io
• https://www.slideshare.net/chris.e.richardson/mucon-not-just-events-developing-asynchronous-
microservices
• https://www.slideshare.net/chris.e.richardson/code-freeze-2018-there-is-no-such-thing-as-a-microservice
• https://microservices.io/microservices/news/2018/11/07/microservices-kong-2018.html
• Livre « Domain-driven Design » par Eric Evans
• Livre « Building Microservices » par Sam Newman
• Livre « Enterprise Java Microservices » par Kenn Finningan
• Livre « Microservices pattern » par Chris Richardson
• Hexagonal at Scale, with DDD and microservices! (Cyrille Martraire)
https://www.youtube.com/watch?v=xZOO_CksS-E
• Magazine Programmez! – décembre 2018
• https://www.martinfowler.com/bliki/StranglerApplication.html
• https://github.com/kbastani/event-sourcing-microservices-example
• https://blog.couchbase.com/saga-pattern-implement-business-transactions-using-microservices-part/
• https://fr.slideshare.net/nikgraf/introduction-to-serverless
• https://martinfowler.com/bliki/CQRS.html
• https://www.codeproject.com/Articles/339725/Domain-Driven-Design-Clear-Your-Concepts-Before-Yo

Contenu connexe

Tendances

Méthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesMéthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiques
Sirine Barguaoui
 
Chp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceChp4 - Diagramme de Séquence
Chp4 - Diagramme de Séquence
Lilia Sfaxi
 
Comment l’architecture événementielle révolutionne la communication dans le S...
Comment l’architecture événementielle révolutionne la communication dans le S...Comment l’architecture événementielle révolutionne la communication dans le S...
Comment l’architecture événementielle révolutionne la communication dans le S...
Vincent Lepot
 
Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...
Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...
Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...
Nawres Farhat
 
Rapport pfe
Rapport pfeRapport pfe
Rapport pfe
Ahmed rebai
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
Microsoft
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
Lilia Sfaxi
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
Heithem Abbes
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
CHOUAIB EL HACHIMI
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
Lilia Sfaxi
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
Heithem Abbes
 
Rapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelRapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilel
Belwafi Bilel
 
Conception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIREConception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIRE
Ghizlane ALOZADE
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring Cloud
Florian Beaufumé
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classe
Amir Souissi
 
Cours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vieCours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vie
Mohammed Amine Mostefai
 
Application web et mobile.potx
Application web et mobile.potxApplication web et mobile.potx
Application web et mobile.potx
Belwafi Bilel
 
DEVOPS
DEVOPSDEVOPS
DEVOPS
TayssirLimem
 
chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
Lilia Sfaxi
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Riadh K.
 

Tendances (20)

Méthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesMéthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiques
 
Chp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceChp4 - Diagramme de Séquence
Chp4 - Diagramme de Séquence
 
Comment l’architecture événementielle révolutionne la communication dans le S...
Comment l’architecture événementielle révolutionne la communication dans le S...Comment l’architecture événementielle révolutionne la communication dans le S...
Comment l’architecture événementielle révolutionne la communication dans le S...
 
Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...
Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...
Présentation PFE "Refonte et déploiement d’une solution de messagerie en util...
 
Rapport pfe
Rapport pfeRapport pfe
Rapport pfe
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Rapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelRapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilel
 
Conception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIREConception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIRE
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring Cloud
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classe
 
Cours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vieCours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vie
 
Application web et mobile.potx
Application web et mobile.potxApplication web et mobile.potx
Application web et mobile.potx
 
DEVOPS
DEVOPSDEVOPS
DEVOPS
 
chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
 

Similaire à Architectures microservices

AWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévu
AWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévuAWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévu
AWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévu
Amazon Web Services
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
Microsoft
 
Introduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSIntroduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaS
Gerard Konan
 
AWS Paris Summit 2014 - T3 - Architecturer avec AWS pour des millions d'util...
AWS Paris Summit 2014 - T3 -  Architecturer avec AWS pour des millions d'util...AWS Paris Summit 2014 - T3 -  Architecturer avec AWS pour des millions d'util...
AWS Paris Summit 2014 - T3 - Architecturer avec AWS pour des millions d'util...
Amazon Web Services
 
Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...
Microsoft Technet France
 
Retour d'experience projet AngularJS
Retour d'experience projet AngularJSRetour d'experience projet AngularJS
Retour d'experience projet AngularJS
∞ François CHERPION ∞
 
Cloud design patterns
Cloud design patternsCloud design patterns
Cloud design patterns
Pascal Laurin
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry pi
adelegue
 
Aspectize meetup
Aspectize meetupAspectize meetup
Aspectize meetup
Aspectize
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
Microsoft
 
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
Amazon Web Services
 
Xebicon2019 m icroservices
Xebicon2019   m icroservicesXebicon2019   m icroservices
Xebicon2019 m icroservices
Cédrick Lunven
 
AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...
AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...
AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...
Amazon Web Services
 
Stockage Cloud : il y en aura pour tout le monde
Stockage Cloud : il y en aura pour tout le mondeStockage Cloud : il y en aura pour tout le monde
Stockage Cloud : il y en aura pour tout le monde
Microsoft Technet France
 
2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...
2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...
2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...
Club Alliances
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
Oxalide
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Microsoft
 
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big DataAzure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Microsoft
 
Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3
Gaëtan ELEOUET
 
AWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWS
AWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWSAWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWS
AWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWS
Amazon Web Services
 

Similaire à Architectures microservices (20)

AWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévu
AWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévuAWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévu
AWS Summit Paris - Track 2 - Session 2 - Préparez-vous à l'imprévu
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
 
Introduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSIntroduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaS
 
AWS Paris Summit 2014 - T3 - Architecturer avec AWS pour des millions d'util...
AWS Paris Summit 2014 - T3 -  Architecturer avec AWS pour des millions d'util...AWS Paris Summit 2014 - T3 -  Architecturer avec AWS pour des millions d'util...
AWS Paris Summit 2014 - T3 - Architecturer avec AWS pour des millions d'util...
 
Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...
 
Retour d'experience projet AngularJS
Retour d'experience projet AngularJSRetour d'experience projet AngularJS
Retour d'experience projet AngularJS
 
Cloud design patterns
Cloud design patternsCloud design patterns
Cloud design patterns
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry pi
 
Aspectize meetup
Aspectize meetupAspectize meetup
Aspectize meetup
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
 
Xebicon2019 m icroservices
Xebicon2019   m icroservicesXebicon2019   m icroservices
Xebicon2019 m icroservices
 
AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...
AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...
AWS Paris Summit 2014 - T3 - Du temps réel au data warehouse : capturez et an...
 
Stockage Cloud : il y en aura pour tout le monde
Stockage Cloud : il y en aura pour tout le mondeStockage Cloud : il y en aura pour tout le monde
Stockage Cloud : il y en aura pour tout le monde
 
2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...
2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...
2010.11.26 - DSI - Comment maîtriser l'intégration du Cloud et du SaaS dans l...
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big DataAzure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
 
Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3
 
AWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWS
AWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWSAWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWS
AWS Paris Summit 2014 - T4 - Créez votre PaaS avec AWS
 

Plus de Riadh MNASRI

Programmation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec KotlinProgrammation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec Kotlin
Riadh MNASRI
 
Ecrire son 1er DSL avec Kotlin
Ecrire son 1er DSL avec KotlinEcrire son 1er DSL avec Kotlin
Ecrire son 1er DSL avec Kotlin
Riadh MNASRI
 
Functional programming with streams
Functional programming with streamsFunctional programming with streams
Functional programming with streams
Riadh MNASRI
 
Kotlin arrowkt
Kotlin arrowktKotlin arrowkt
Kotlin arrowkt
Riadh MNASRI
 
BBL Reactive Programming
BBL Reactive ProgrammingBBL Reactive Programming
BBL Reactive Programming
Riadh MNASRI
 
Discover Micronaut
Discover MicronautDiscover Micronaut
Discover Micronaut
Riadh MNASRI
 
Git l'essentiel
Git l'essentielGit l'essentiel
Git l'essentiel
Riadh MNASRI
 

Plus de Riadh MNASRI (7)

Programmation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec KotlinProgrammation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec Kotlin
 
Ecrire son 1er DSL avec Kotlin
Ecrire son 1er DSL avec KotlinEcrire son 1er DSL avec Kotlin
Ecrire son 1er DSL avec Kotlin
 
Functional programming with streams
Functional programming with streamsFunctional programming with streams
Functional programming with streams
 
Kotlin arrowkt
Kotlin arrowktKotlin arrowkt
Kotlin arrowkt
 
BBL Reactive Programming
BBL Reactive ProgrammingBBL Reactive Programming
BBL Reactive Programming
 
Discover Micronaut
Discover MicronautDiscover Micronaut
Discover Micronaut
 
Git l'essentiel
Git l'essentielGit l'essentiel
Git l'essentiel
 

Architectures microservices

  • 1. Architectures microservices Romain Schlick @r_schlick Riadh Mnasri @riadhmnasri 23/01/2019
  • 2. A Propos de nous Romain Schlick @r_schlick • Dev Java 12 ans • Scrum Master • Intéressé par: TDD, DDD, qualité, NoSql, JS, Agilité Riadh Mnasri @riadhmnasri • Dev Java Kotlin • Intéressé par le clean code, functional Programming, TDD, ATDD, BDD, DDD
  • 3. Monolithes vs Microservices Monolithe Microservices No silver bullet
  • 4. Il était une fois … un Monolithe magnifique
  • 5. Monolithe: Définition Tomcat • Une seule unité d'exécution • Composants fortement couplés • Cadence de release long: > 3 mois • Equipe assez grande > 10 pers Browser MySQL Database WAR / EAR Store Front UI Catalog Service Inventory Service Shipping Service
  • 7. Collaboration difficile Quand l’application grossit … plusieurs équipes se marchent sur les pieds
  • 8. Testabilité lente et douloureuse
  • 11. Difficilement scalable Titre de la présentation - Date
  • 12. Monolithe: Peut être une bonne solution • Approche Monolithe First • Solution parfois la plus adaptée: • équipe reste petite • time to market • clean code • livraison rapide
  • 15. Patterns de migration: Big Bang • Très long à développer • L’existant bouge en même temps • Plus compliqué et risqué !
  • 16. Patterns de migration: Strangler Pattern REQUEST ROUTER Micro- Service shipping WEB API WEB API GLUE CODE GLUE CODE Old HTTP requests New HTTP requests HTTP request
  • 17. Comment découper les microservices ?
  • 18. Découper par département métier • Décomposer en sous-domaines • Un bon point de départ • … mais assez limitant et peu créer des dépendances
  • 19. Découper par objectif (verbe d’action) • Chaque domaine a un objectif • Faire des interviews avec tous les acteurs (définir des patates) • Exemple: Shipping, Billing, Recommandation, Navigation, Searching
  • 20. Découper selon une contrainte technique forte • Haute volumétrie vs faible volumétrie (BD NoSQL/Relationelle) • Focus Lecture vs Ecriture (CQRS) • Calcul rapide vs exact (finance de marché)
  • 21. Découper par Bounded context (DDD) • Ubiquitous langage • Bounded Context • Aggregate root • Repository • Domain Service
  • 23. Event Storming Pratique très intéressante pour identifier les contextes bornées
  • 24. Différents patterns d’architecture Exemples : Comment gérer la communication entre les MS ? Comment accéder aux données distribuées ? Comment assurer la robustesse ? Pattern = Solution réutilisable répondant à une problématique
  • 25. 1 DB by Service / public API / synchronous communications Customer Service Domain Store API Gateway (sécurité, routing, query multi-services) REST API REST API Order Service Domain Store REST API Browser CreateCustomer() findCustomer() CreateOrder() findOrder() findOrdersForCustomer() findRecentCustomers() Mobile App Store Front UI HTML REST REST Load balancing Circuit breaking Service discovery « Back-end for front end »
  • 26. 1 DB by service / Async messaging / commands & events Customer Service Domain Store Aggregator Service REST API REST API Order Service Domain Store REST API Mobile App findCustomer() findOrder() findOrdersForCustomer() findRecentCustomers() View Store Message Broker Customer created event Credit reserved event Order created event Order canceled event Subscribe to events reserveCredit command createOrder command
  • 27. CQRS pattern: Command Query Responsability Segregation • Séparation des composants d’écriture (« command») et de lecture (« query ») • Solution alternative au CRUD • Write: Opérations sur un modèle métier (DDD) • Query: Vision aggrégée des objets mis à jour via des events • Query: Eventual consistency Permet: • Solution pour requêter des données cross-services • Meilleure isolation des responsabilités • Différentes technologies • Writing DB != Reading DB
  • 28. Message broker CQRS pattern: Schéma Customer Order History Service SQL DB Commands channel Events channel createCustomer reserveCredit createOrder cancelOrder REST API Customer Geo Loc Service MONGO DB REST API QUERIES COMMANDS Customer Service SQL DB Order Service SQL DB Order created Order canceled Customer created Credit reserved Subscribe to events Query store Query store Domain Store Domain Store
  • 29. Collaboration entre microservices • Comment peuvent collaborer les microservices ? • Comment implémenter une transaction distribuée ? • Comment maintenir la cohérence des données distribuées ? Titre de la présentation - Date Transaction distribuée 2PC à proscrire Solution = SAGA PATTERN
  • 30. SAGA pattern: Séquence de transactions locales CreateOrder() SAGA Order Service Local transaction createOrder() Order State = PENDING Customer Service Local transaction reserveCredit() Customer Order Service Local transaction approveOrder() Order State = APPROVED
  • 31. SAGA: Transactions compensatrices CreateOrder() SAGA Order Service Local transaction createOrder() Order State = PENDING Customer Service Local transaction reserveCredit() Customer Order Service Local transaction cancelOrder() Order State = CANCELLED InsuffisantCredit !!!!
  • 32. Message Broker SAGA: Events Choregraphy pattern • Prise de décision distribuée • Coordination basée sur des messages « events » • Chaque service va écouter les évènements et faire avancer le workflow Order events channel Customer events channel Customer Service Order Service Order created Credit reserved OR Credit Limit Exceeded Order State Total Customer creditLimit creditReservations reserveCredit() create() Approve() / reject() Listen Order events Listen customer events
  • 33. Message Broker SAGA: Command / Reply Orchestration pattern • Prise de décision centralisée par un Orchestrateur • Coordination basée sur des messages « command » et « reply » • Objet persistant qui traque l’état de la SAGA et invoque les MS Customer command channel Saga reply channel Customer Service Order Service ReserveCredit Credit Reserved Orchestrator
  • 34. Comment assurer l’atomicité du changement d’état en base et l’envoi de l’event associé ? Titre de la présentation - Date
  • 35. Event sourcing pattern • Approche « Event driven » • Persister les objets métiers comme une séquence d’évènements • Objet métier = State change event • Rejouer les events pour re-recréer une image de l’objet • Event Store: Data Store + Message broker • Se marie bien avec CQRS Permet: • Changement d’état en base et envoi de l’event atomique • Historisation complète • Audit log + Rejouer les events
  • 36. Event store Event sourcing pattern: Schéma Entity Id Entity Type Event Id Event type Date Event Data 101 Order 901 OrderCreated … … 101 Order 902 OrderApproved … … 101 Order 903 OrderShipped … … Event table Order state Apply(event) Order Persister l’objet comme une séquence d’events Rejouer les events pour obtenir une image de l’objet
  • 37. Comment déployer les microservices ? • Approche Devops: • Intégration continue • Déploiement continue • Infrastructure: • Déployés dans des containers (ex: Docker) • Gestionnaire de containers (ex: Kubernetes) • Cloud privé (ex: Openshift) vs Cloud Public (GCP, AWS, Azure) • Services Mesh (ex: Istio): sécurité, load balancing, routing • Serverless
  • 38. Serverless: C’est quoi ? • FaaS (function as a service) • « Custom code that’s run in ephemeral container in the cloud » • Cloud providers: AWS Lambda, GCP Functions, MS Functions • Les instances sont crées à la demande et détruire après le traitement • Dépend fortement de services cloud tiers • Approche events
  • 39. Serverless: Bénéfices et limites Bénéfices • Auto scaling • Payer à la demande • Peu d’infra à gérer • Event driven • Sécurité Limites • Vendor lock-in • Taille et durée de runtime limité • Débuggage en local parfois difficile
  • 41. Cross cutting concerns Load balacing Circuit breaking Health check Configuration Logging Service discovery Métriques Proxy / Gateway Ex: Ribbon, Apache, Nginx, HAProxy Ex: Hystrix Ex: Spring Boot Actuator Ex: Spring Cloud Config Ex: ELK, Logstash, Splunk Ex: Consul, Eureka Ex: Spring Boot Actuator Ex: Zuul, Spring Cloud Gateway Tracing Ex: Spring Cloud Sleuth, Zipkin, OpenTracing Messaging Ex: Spring Cloud Stream Nombreuses Initiatives: Netflix OSS, Spring Cloud, Eclipse MicroProfile
  • 42. Bénéfices d’une architecture microservices • Indépendance – Faiblement couplé • Travailler en équipes petites, feature teams • Scalabilité • Maintenabilité • Testabilité • Plus facilement déployable • Facilite l’innovation et l’expérimentation
  • 43. Challenges à relever Complexité: • Processus distribués • Données distribuées • Tolérances aux pannes • Déploiements • Monitoring • Nombreux cross cutting concerns • Nanoservices anti-pattern Pré-requis importants • Approche Devops impérative • Provisionning automatique
  • 45. Références • https://microservices.io • https://www.slideshare.net/chris.e.richardson/mucon-not-just-events-developing-asynchronous- microservices • https://www.slideshare.net/chris.e.richardson/code-freeze-2018-there-is-no-such-thing-as-a-microservice • https://microservices.io/microservices/news/2018/11/07/microservices-kong-2018.html • Livre « Domain-driven Design » par Eric Evans • Livre « Building Microservices » par Sam Newman • Livre « Enterprise Java Microservices » par Kenn Finningan • Livre « Microservices pattern » par Chris Richardson • Hexagonal at Scale, with DDD and microservices! (Cyrille Martraire) https://www.youtube.com/watch?v=xZOO_CksS-E • Magazine Programmez! – décembre 2018 • https://www.martinfowler.com/bliki/StranglerApplication.html • https://github.com/kbastani/event-sourcing-microservices-example • https://blog.couchbase.com/saga-pattern-implement-business-transactions-using-microservices-part/ • https://fr.slideshare.net/nikgraf/introduction-to-serverless • https://martinfowler.com/bliki/CQRS.html • https://www.codeproject.com/Articles/339725/Domain-Driven-Design-Clear-Your-Concepts-Before-Yo