Slide 1

Slide 1 text

Développez vos Microservices par le Domain Driven Design et l’Event Sourcing François Royer francois.royer@guanxilabs.com @francoisroyer @guanxilabs

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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 …

Slide 4

Slide 4 text

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” ● ...

Slide 5

Slide 5 text

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.”

Slide 6

Slide 6 text

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?

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

Entities Value Objects Services Modules Aggregates Factories Repositories Aggregate Objects Domain Events Bounded Context Context Maps

Slide 9

Slide 9 text

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...

Slide 10

Slide 10 text

1 MICROSERVICE = 1 BUSINESS CAPABILITY

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

… 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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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()

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Merci de votre attention francois.royer@guanxilabs.com Pour plus d’information sur le DDD ... @francoisroyer @guanxilabs

Slide 20

Slide 20 text

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