Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
@xebiconfr #xebiconfr
Event Sourcing/CQRS
Certains en parlent, nous les avons
implémentés!
Clément
HELIOU
@c_heliou @xebiconfr #xebiconfr 2
@c_heliou
@c_heliou @xebiconfr
#xebiconfr
L’Event Sourcing

En bref
@c_heliou @xebiconfr #xebiconfr 4
« Capturer tous les changements
d’état d’une application comme
une séquence d’évènements...
@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 €
20...
@c_heliou @xebiconfr #xebiconfr 6
Pourquoi utiliser 

l’Event Sourcing?
Audit
Analyse/debug
Reprise de

données
Performance
@c_heliou @xebiconfr #xebiconfr 7
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Even...
@c_heliou @xebiconfr #xebiconfr 8
Fonction de décision
(état courant + commande)
=> évènement(s)
@c_heliou @xebiconfr #xebiconfr 9
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Even...
@c_heliou @xebiconfr #xebiconfr 10
Fonction d’évolution
(état courant + évènement)
=> nouvel état
Pour chaque évènement ém...
@c_heliou @xebiconfr #xebiconfr 11
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Eve...
@c_heliou @xebiconfr
#xebiconfr
Contexte
Au coeur des 

salles de marché
@c_heliou @xebiconfr #xebiconfr 13
@c_heliou @xebiconfr #xebiconfr 14
http://www.les-terres-rares.com/platine-palladium-meme-famille-2-destins-differents/
@c_heliou @xebiconfr #xebiconfr 15
Couverture
Livraison 

physique
A l’échéance
@c_heliou @xebiconfr #xebiconfr 16
Client
Comptabilité
Trader Marché
Vendeur
Avant Multiplus
@c_heliou @xebiconfr #xebiconfr 17
Client
Comptabilité
Automate

de prix
Marché
Multiplus
Avec Multiplus
Couverture
Limite...
@c_heliou @xebiconfr
#xebiconfr
L’EVENT SOURCING

chez Multiplus
@c_heliou @xebiconfr #xebiconfr 19
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Eve...
@c_heliou @xebiconfr #xebiconfr 20
Fonction de décision
(état courant + commande)
=> évènement(s)
@c_heliou @xebiconfr #xebiconfr 21
Fonction de décision
(état courant + RecevoirPrix)
=> PrixReçu
@c_heliou @xebiconfr #xebiconfr 22
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Eve...
@c_heliou @xebiconfr #xebiconfr 23
@c_heliou @xebiconfr #xebiconfr 24
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Eve...
@c_heliou @xebiconfr #xebiconfr 25
Application
PrixReçu

{évènement}
PrixTransféré

{évènement}
Busd’évènements
PrixTransf...
@c_heliou @xebiconfr #xebiconfr 26
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Eve...
@c_heliou @xebiconfr #xebiconfr 27
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Eve...
@c_heliou @xebiconfr #xebiconfr 28
C1 C2 C3
C1 = 10 ms C2 = 10 ms
C2 = 10 ms
C2 = 10 + 10 ms
@c_heliou @xebiconfr #xebiconfr 29
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Eve...
@c_heliou @xebiconfr #xebiconfr 30
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Eve...
@c_heliou @xebiconfr #xebiconfr 31
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Eve...
@c_heliou @xebiconfr
#xebiconfr
Event sourcing
ce que l’on a appris
@c_heliou @xebiconfr #xebiconfr 33
Vous pouvez (devez ?)
faire sans framework
@c_heliou @xebiconfr #xebiconfr 34
Ne pas confondre Event
sourcing et Command sourcing
@c_heliou @xebiconfr #xebiconfr 35
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Eve...
@c_heliou @xebiconfr #xebiconfr 36
Application
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Eve...
@c_heliou @xebiconfr #xebiconfr 37
Recevoir prix

{commande}
requêteId: 9387
prix: 100€
Fonction de

Décision
Fonction de
...
@c_heliou @xebiconfr #xebiconfr 38
Dénommer un évènement
n’est pas chose Aisée.
« Anatomy of domain event »
M. Praglowski ...
@c_heliou @xebiconfr
#xebiconfr
CQRS
En bref
@c_heliou @xebiconfr #xebiconfr 40
Command Query 

Responsibility Segregation ?
@c_heliou @xebiconfr #xebiconfr 41
Pourquoi utiliser CQRS?
Maintenabilité
Performance

des lectures
Intégration avec

l’Ev...
@c_heliou @xebiconfr
#xebiconfr
Contexte
Monitorer 

notre business
@c_heliou @xebiconfr #xebiconfr 43
Monitoring « Métier »
Contrôles basiques

par client, produit, etc.
Suivi temps-réel

d...
@c_heliou @xebiconfr
#xebiconfr
CQRS chez 

Multiplus
@c_heliou @xebiconfr #xebiconfr 45

Bus d’évènements
Multiplus
Handler
PUSH-API
Fonction de

STOCKAGE
Fonction 

D’AGREGAT...
@c_heliou @xebiconfr #xebiconfr 46
PUSH-API
Fonction de

STOCKAGE
Fonction 

D’AGREGATION
Event
store
WEB
SOCKET
CONSOLE
É...
@c_heliou @xebiconfr #xebiconfr 47
Fonction 

D’AGREGATION
Exécution

Demandée
{transaction #345,
idSéquence = 1}
Exécutio...
@c_heliou @xebiconfr #xebiconfr 48
Fonction 

D’AGREGATION
Exécution

Demandée
{transaction #345,
idSéquence = 1}
Exécutio...
@c_heliou @xebiconfr
#xebiconfr
CQRS
ce que l’on a appris
@c_heliou @xebiconfr #xebiconfr 50
Il existe toujours un contrat,
même s’il est implicite !
@c_heliou @xebiconfr #xebiconfr 51
Poser la 1ère pierre, à
l’édifice CQRS !
Évènements d’intérêt
Évènements 

en mémoire
@c_heliou @xebiconfr
#xebiconfr
CONCLUSION
@c_heliou @xebiconfr #xebiconfr 53
Ressources
๏Xebicon 15’ - CQRS + Event Sourcing: en direct !
๏Back Day 15’ - Explorer l...
Próxima SlideShare
Cargando en…5
×

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

356 visualizaciones

Publicado el

L’Event Sourcing et CQRS sont sur toutes les lèvres en cette année 2016 qui marque l’avènement des systèmes dits « réactifs » ou « dirigés par les évènements ». Bien que leur présence ne date pas d’hier, peu d’applications en tire aujourd’hui bénéfice. Dans ce retour d’expérience, nous allons vous présenter dans le détail et en toute transparence, l’implémentation mise en place au sein d’une grande banque d’investissement française, ses avantages, ses inconvénients et les leçons que nous avons en tiré. Nous espérons vous donner ainsi le bagage nécessaire pour vous lancer à votre tour dans la grande aventure du réactif.

Publicado en: Tecnología
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

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

  1. 1. @xebiconfr #xebiconfr Event Sourcing/CQRS Certains en parlent, nous les avons implémentés! Clément HELIOU
  2. 2. @c_heliou @xebiconfr #xebiconfr 2 @c_heliou
  3. 3. @c_heliou @xebiconfr #xebiconfr L’Event Sourcing
 En bref
  4. 4. @c_heliou @xebiconfr #xebiconfr 4 « Capturer tous les changements d’état d’une application comme une séquence d’évènements » Martin Fowler
  5. 5. @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 €
  6. 6. @c_heliou @xebiconfr #xebiconfr 6 Pourquoi utiliser 
 l’Event Sourcing? Audit Analyse/debug Reprise de
 données Performance
  7. 7. @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
  8. 8. @c_heliou @xebiconfr #xebiconfr 8 Fonction de décision (état courant + commande) => évènement(s)
  9. 9. @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
  10. 10. @c_heliou @xebiconfr #xebiconfr 10 Fonction d’évolution (état courant + évènement) => nouvel état Pour chaque évènement émis par 
 la fonction de décision
  11. 11. @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
  12. 12. @c_heliou @xebiconfr #xebiconfr Contexte Au coeur des 
 salles de marché
  13. 13. @c_heliou @xebiconfr #xebiconfr 13
  14. 14. @c_heliou @xebiconfr #xebiconfr 14 http://www.les-terres-rares.com/platine-palladium-meme-famille-2-destins-differents/
  15. 15. @c_heliou @xebiconfr #xebiconfr 15 Couverture Livraison 
 physique A l’échéance
  16. 16. @c_heliou @xebiconfr #xebiconfr 16 Client Comptabilité Trader Marché Vendeur Avant Multiplus
  17. 17. @c_heliou @xebiconfr #xebiconfr 17 Client Comptabilité Automate
 de prix Marché Multiplus Avec Multiplus Couverture Limites Marges
  18. 18. @c_heliou @xebiconfr #xebiconfr L’EVENT SOURCING
 chez Multiplus
  19. 19. @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}
  20. 20. @c_heliou @xebiconfr #xebiconfr 20 Fonction de décision (état courant + commande) => évènement(s)
  21. 21. @c_heliou @xebiconfr #xebiconfr 21 Fonction de décision (état courant + RecevoirPrix) => PrixReçu
  22. 22. @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}
  23. 23. @c_heliou @xebiconfr #xebiconfr 23
  24. 24. @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}
  25. 25. @c_heliou @xebiconfr #xebiconfr 25 Application PrixReçu
 {évènement} PrixTransféré
 {évènement} Busd’évènements PrixTransféréHandler
 {handler} CLIENT
  26. 26. @c_heliou @xebiconfr #xebiconfr 26 Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages
  27. 27. @c_heliou @xebiconfr #xebiconfr 27 Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages
  28. 28. @c_heliou @xebiconfr #xebiconfr 28 C1 C2 C3 C1 = 10 ms C2 = 10 ms C2 = 10 ms C2 = 10 + 10 ms
  29. 29. @c_heliou @xebiconfr #xebiconfr 29 Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages
  30. 30. @c_heliou @xebiconfr #xebiconfr 30 Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages Event loop
  31. 31. @c_heliou @xebiconfr #xebiconfr 31 Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages Event loop Commandes
  32. 32. @c_heliou @xebiconfr #xebiconfr Event sourcing ce que l’on a appris
  33. 33. @c_heliou @xebiconfr #xebiconfr 33 Vous pouvez (devez ?) faire sans framework
  34. 34. @c_heliou @xebiconfr #xebiconfr 34 Ne pas confondre Event sourcing et Command sourcing
  35. 35. @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
  36. 36. @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
  37. 37. @c_heliou @xebiconfr #xebiconfr 37 Recevoir prix
 {commande} requêteId: 9387 prix: 100€ Fonction de
 Décision Fonction de
 Décision Prix reçu
 {évènement} requêteId: 9387 prix: 100€ marge: 0,10€ Recevoir prix
 {commande} requêteId: 9387 prix: 100€ Prix reçu
 {évènement} requêteId: 9387 prix: 100€ marge: 0,20€ 12/02/2016 - Marge 0,1% 01/07/2016 - Marge 0,2%
  38. 38. @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/
  39. 39. @c_heliou @xebiconfr #xebiconfr CQRS En bref
  40. 40. @c_heliou @xebiconfr #xebiconfr 40 Command Query 
 Responsibility Segregation ?
  41. 41. @c_heliou @xebiconfr #xebiconfr 41 Pourquoi utiliser CQRS? Maintenabilité Performance
 des lectures Intégration avec
 l’Event Sourcing
  42. 42. @c_heliou @xebiconfr #xebiconfr Contexte Monitorer 
 notre business
  43. 43. @c_heliou @xebiconfr #xebiconfr 43 Monitoring « Métier » Contrôles basiques
 par client, produit, etc. Suivi temps-réel
 des transactions
  44. 44. @c_heliou @xebiconfr #xebiconfr CQRS chez 
 Multiplus
  45. 45. @c_heliou @xebiconfr #xebiconfr 45 
Bus d’évènements Multiplus Handler PUSH-API Fonction de
 STOCKAGE Fonction 
 D’AGREGATION Event store Évènement QUEUE EMS WEB SOCKETVue CONSOLE Vue
  46. 46. @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}
  47. 47. @c_heliou @xebiconfr #xebiconfr 47 Fonction 
 D’AGREGATION Exécution
 Demandée {transaction #345, idSéquence = 1} Exécution
 Acceptée {transaction #345, idSéquence = 2} Fonction 
 D’AGREGATION Vue {transaction #345, 
 statut = TERMINÉE} Vue {transaction #345, 
 statut = EN COURS}
  48. 48. @c_heliou @xebiconfr #xebiconfr 48 Fonction 
 D’AGREGATION Exécution
 Demandée {transaction #345, idSéquence = 1} Exécution
 Accepté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écution
 Acceptée {transaction #345, idSéquence = 2} Vue {transaction #345, 
 statut = TERMINÉE}
  49. 49. @c_heliou @xebiconfr #xebiconfr CQRS ce que l’on a appris
  50. 50. @c_heliou @xebiconfr #xebiconfr 50 Il existe toujours un contrat, même s’il est implicite !
  51. 51. @c_heliou @xebiconfr #xebiconfr 51 Poser la 1ère pierre, à l’édifice CQRS ! Évènements d’intérêt Évènements 
 en mémoire
  52. 52. @c_heliou @xebiconfr #xebiconfr CONCLUSION
  53. 53. @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).

×