Share
Embed
Développez vos Microservices par le Domain Driven Design et l'Event Sourcing
François Royer
November 19, 2017
Transcript
20 slides
-
Développez vos Microservices par le Domain Driven Design et l’Event
Sourcing François Royer [email protected] @francoisroyer @guanxilabs -
About me • Background académique • 19 ans exp. dans
le spatial et le big data / data science • Fondateur et CEO de Datasio (2012-2016) • Directeur Data & Analytics à PwC (2016-2019) • Fondateur Guanxi Labs -
Quel est le problème? Dette technique … Specs client partielles
… Développeurs sous l’eau … Absence de langage commun … Monolithes logiciels ... Systèmes distribués … -
Les monolithes logiciels reposent souvent sur des hypothèses invalides •
Ressources “toujours disponibles” • Communication “toujours synchrone” • Appels de procédure “toujours acceptés“ • Réseau “jamais down” • ... -
Les microservices comme solution? “Un style d'architecture logicielle à partir
duquel un ensemble complexe d'applications est décomposé en plusieurs processus indépendants et faiblement couplés, souvent spécialisés dans une seule tâche.” -
Les microservices comme solution? “Un style d'architecture logicielle à partir
duquel un ensemble complexe d'applications est décomposé en plusieurs processus indépendants et faiblement couplés, souvent spécialisés dans une seule tâche.” Transactions distribuées? Périmètre de chaque microservice? A qui appartient les données? Comment gérer les effets de bord ou les services non-idempotents? -
Domain Driven Design Le "Domain Driven Design", ou DDD, permet
aux développeurs d'affronter des problèmes complexes en offrant la possibilité de construire un langage commun clair, partagé avec les experts métiers. Certains concepts associés, comme le Bounded Context ou l’Event Sourcing, peuvent aider à définir les Microservices d’une architecture distribuée. -
Entities Value Objects Services Modules Aggregates Factories Repositories Aggregate Objects
Domain Events Bounded Context Context Maps -
Langage commun & Bounded Context Le DDD encourage à identifier
et construire un langage commun, avec un accord sur ce qui constitue une entité pour chaque domaine. Ex: une entité “Client” ou “Produit” possède une définition propre à la Comptabilité, la Force de Vente, le Support Client, le Reporting Business... -
Event Storming Workshop Tips Commencer par la fin: “InvoiceSent” ou
“CustomerBilled” ou “AppInstalled” Si un concept est mal compris, c’est que l’expert métier n’est pas dans la salle! Event Command User External service View © Alberto Brandolini -
Le workshop produit une série de contextes avec leurs définitions
propres ... Marketing Context Product Procurement Context Product Sales Context Product Inventory Context Product Pricing Context Product Compliance Context Product -
… et une séquence d’événements métier LoginUser UserLoggedIn LogoutUser UserLoggedOut
ChangeAddress UserAddressChanged DebitAccount AccountDebited CreditAccount AccountCredited User User User User IncreasePurchaseLimit PurchaseLimitUpdated CustomerRep temps -
On regroupe les entités par Agrégat pour rendre les transactions
explicites Order Service Customer Service Product Service Order _______ ... Address _______ Street City ... OrderLineItem ____________ Quantity ... Customer _________ Name CreditLimit Product _______ Name Price Source: C. Richardson Id Id Id Id -
Les frontières possibles des microservices définissent les propriétés du système
et l’expérience utilisateur Source: C. Richardson Consistency Scalability Customer Order Product Customer Order Product Customer Order Product Sync UX Async UX -
Les microservices communiquent par souscription à des streams d’événements Order
Service Order ____________ State Total Customer Service Customer _______________ CreditLimit CreditReservations CreateOrder OrderCreated CreditReserved CreditCheckFailed or create() approve() reject() reserveCredit() -
L’Event Storming permet de produire une architecture ES/CQRS centrée sur
les événements CQRS = Command Query Responsibility Segregation ES = Event Sourcing © Alberto Brandolini -
Messages clés Explorez les autres concepts du DDD: distributed sagas,
context maps... Adoptez les concepts “core” du DDD pour aider à la conception de vos microservices Testez les workshops d’Event Storming pour mieux cerner les domaines métier -
Merci de votre attention [email protected] Pour plus d’information sur le
DDD ... @francoisroyer @guanxilabs -
Developing microservices with aggregates https://www.slideshare.net/chris.e.richardson/developing-microservices-with-aggregates-springone-platform-s1p Bla bla microservices bla bla
http://jonasboner.com/bla-bla-microservices-bla-bla/ Ubiquitous language https://martinfowler.com/bliki/UbiquitousLanguage.html Bounded context https://martinfowler.com/bliki/BoundedContext.html DDD Aggregate https://martinfowler.com/bliki/DDD_Aggregate.html CQRS https://martinfowler.com/bliki/CQRS.html Références et sources