53
@xebiconfr #xebiconfr Event Sourcing/CQRS Certains en parlent, nous les avons implémentés! Clément HELIOU

XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

Embed Size (px)

Citation preview

Page 1: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@xebiconfr #xebiconfr

Event Sourcing/CQRS Certains en parlent, nous les avons

implémentés!

Clément HELIOU

Page 2: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 2

@c_heliou

Page 3: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

L’Event SourcingEn bref

Page 4: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 4

« Capturer tous les changements d’état d’une application comme une séquence d’évènements »

Martin Fowler

Page 5: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 5

Date Débit Crédit

2016/05/14 100 €

2016/05/14 -20 €

2016/05/16 -30 €

2016/05/24 380 €

2016/06/01 -70 €

Total -120 € 480 €

Solde 360 €

Page 6: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 6

Pourquoi utiliser l’Event Sourcing?

Audit

Analyse/debugReprise dedonnées

Performance

Page 7: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 7

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Commande

Fonction de Décision

Page 8: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 8

Fonction de décision (état courant + commande)

=> évènement(s)

Page 9: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 9

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Fonction de Décision

Commande

Fonction d’évolution

Évènement(s)

Event store

Page 10: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 10

Fonction d’évolution (état courant + évènement)

=> nouvel étatPour chaque évènement émis par

la fonction de décision

Page 11: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 11

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Évènement(s)Fonction de

Décision

Commande

Fonction d’évolution Event

store

Action

Effets de bord

Page 12: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

Contexte Au coeur des

salles de marché

Page 13: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 13

Page 14: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 14

http://www.les-terres-rares.com/platine-palladium-meme-famille-2-destins-differents/

Page 15: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 15

Couverture

Livraison physique

A l’échéance

Page 16: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 16

Client

Comptabilité

Trader Marché

Vendeur

Avant Multiplus

Page 17: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 17

Client

Comptabilité

Automatede prix

Marché

Multiplus

Avec Multiplus

Couverture

Limites

Marges

Page 18: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

L’EVENT SOURCINGchez Multiplus

Page 19: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 19

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Fonction de Décision

RecevoirPrix {commande}

Page 20: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 20

Fonction de décision (état courant + commande)

=> évènement(s)

Page 21: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 21

Fonction de décision (état courant + RecevoirPrix)

=> PrixReçu

Page 22: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 22

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Fonction de Décision

RecevoirPrix {commande}

Fonction d’évolution

PrixReçu{évènement}

Page 23: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 23

Page 24: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 24

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Fonction de Décision

RecevoirPrix {commande}

Fonction d’évolution

PrixReçu{évènement}

Demande de prix

Réception de prix

PrixReçu{évènement}

TransférerPrix {action}

PrixTransféré {évènement}

Page 25: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 25

Application

PrixReçu{évènement}

PrixTransféré {évènement}

Bus d’évènements

PrixTransféréHandler {handler}

CLIENT

Page 26: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 26

Bus

Handler

HandlerEMS

thread pool

IUM thread

pool

EMS thread

pool

IUM thread

pool

Event loop

Commandes Évènements

Messages

Messages

Page 27: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 27

Bus

Handler

HandlerEMS

thread pool

IUM thread

pool

EMS thread

pool

IUM thread

pool

Event loop

Commandes Évènements

Messages

Messages

Page 28: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 28

C1 C2 C3

C1 = 10 ms C2 = 10 msC2 = 10 ms C2 = 10 + 10 ms

Page 29: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 29

Bus

Handler

HandlerEMS

thread pool

IUM thread

pool

EMS thread

pool

IUM thread

pool

Event loop

Commandes Évènements

Messages

Messages

Page 30: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 30

Bus

Handler

HandlerEMS

thread pool

IUM thread

pool

EMS thread

pool

IUM thread

pool

Event loop

CommandesÉvène

ments

Messages

Messages

Event loop

Page 31: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 31

Bus

Handler

HandlerEMS

thread pool

IUM thread

pool

EMS thread

pool

IUM thread

pool

Event loop

Commandes

Évènements

Messages

Messages

Event loop

Commandes

Page 32: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

Event sourcing ce que l’on a appris

Page 33: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 33

Vous pouvez (devez ?) faire sans framework

Page 34: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 34

Ne pas confondre Event sourcing et Command sourcing

Page 35: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 35

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Évènement(s)Fonction de

Décision

Commande

Fonction d’évolution Event

store

Action

Page 36: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 36

Application

Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it

Évènement(s)Fonction de

Décision

Commande

Fonction d’évolution Event

store

Action

Page 37: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 37

Recevoir prix {commande}

requêteId: 9387prix: 100€

Fonction de Décision

Fonction de Décision

Prix reçu{évènement}

requêteId: 9387prix: 100€marge: 0,10€

Recevoir prix {commande}

requêteId: 9387prix: 100€

Prix reçu{évènement}

requêteId: 9387prix: 100€marge: 0,20€

12/02/2016 - Marge 0,1%

01/07/2016 - Marge 0,2%

Page 38: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 38

Dénommer un évènement n’est pas chose Aisée.

« Anatomy of domain event » M. Praglowski - http://blog.arkency.com/2016/05/the-anatomy-of-domain-event/

Page 39: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

CQRS En bref

Page 40: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 40

Command Query Responsibility Segregation ?

Page 41: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 41

Pourquoi utiliser CQRS?

Maintenabilité

Performance des lectures

Intégration avec

l’Event Sourcing

Page 42: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

Contexte Monitorer

notre business

Page 43: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 43

Monitoring « Métier »

Contrôles basiquespar client, produit, etc.

Suivi temps-réel des transactions

Page 44: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

CQRS chez Multiplus

Page 45: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 45

Bus d’évènementsMultiplus

Handler

PUSH-API

Fonction de STOCKAGE

Fonction D’AGREGATION

Event store

Évènement

QUEUE EMS

WEB SOCKETVue CONSOLE

Vue

Page 46: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 46

PUSH-API

Fonction de STOCKAGE

Fonction D’AGREGATION

Event store

WEB SOCKET CONSOLE

Évènement{transaction #345}

Évènements {transaction #345}

Vue {transaction #345} Vue

{transaction #345}

Page 47: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 47

Fonction D’AGREGATION

ExécutionDemandée{transaction #345,idSéquence = 1}

ExécutionAcceptée{transaction #345,idSéquence = 2}

Fonction D’AGREGATION

Vue{transaction #345,

statut = TERMINÉE}

Vue{transaction #345,

statut = EN COURS}

Page 48: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 48

Fonction D’AGREGATION

ExécutionDemandée{transaction #345,idSéquence = 1}

ExécutionAcceptée{transaction #345,idSéquence = 2}

Fonction D’AGREGATION

Vue{transaction #345,

statut = TERMINÉE}

Vue{transaction #345,

statut = EN COURS}

Fonction D’AGREGATION

ExécutionAcceptée{transaction #345,idSéquence = 2}

Vue{transaction #345,

statut = TERMINÉE}

Page 49: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

CQRS ce que l’on a appris

Page 50: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 50

Il existe toujours un contrat, même s’il est implicite !

Page 51: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 51

Poser la 1ère pierre, à l’édifice CQRS !

Évènements d’intérêt

Évènements en mémoire

Page 52: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr

CONCLUSION

Page 53: XebiCon'16 : CQRS/EventSourcing certains en parlent, nous les avons implémentés ! Par Clément Héliou, Développeur chez Xebia

@c_heliou @xebiconfr #xebiconfr 53

Ressources๏ Xebicon 15’ - CQRS + Event Sourcing: en direct !

๏ Back Day 15’ - Explorer les principes de l’event sourcing

๏ Thinkbe4coding #Eventsourcing

๏ KATA MixteR- https://github.com/devlyon/mixter- Kata explorant les principes de l’Event Sourcing/CQRS.

- https://www.youtube.com/watch?v=QGGZs0KqxZw- Live coding présentant les principes de l’Event Sourcing/CQRS.

- http://thinkbeforecoding.com/tag/Event%20Sourcing- L’un des auteurs français à suivre sur le sujet Event Sourcing/CQRS.

- http://www.xebia.tv/vod?videoId=S8566fyZHp0- Présentation plus large du projet Multiplus (DDD, BDD, Architecture hexagonale).