Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Développez vos Microservices par le Domain Driv...

Développez vos Microservices par le Domain Driven Design et l'Event Sourcing

François Royer

November 19, 2017
Tweet

More Decks by François Royer

Other Decks in Programming

Transcript

  1. 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
  2. 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 …
  3. 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” • ...
  4. 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.”
  5. 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?
  6. 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.
  7. 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...
  8. 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
  9. 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
  10. … 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
  11. 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
  12. 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
  13. 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()
  14. 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
  15. 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
  16. 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