SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Event Sourcing/CQRS

par la pratique
Clément HELIOU
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Diffusez vos cartes dans la communauté
et devenez un ninja du développement.
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
@c_heliou
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
L’Event Sourcing

En bref
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
« Capturer tous les changements
d’état d’une application comme
une SÉQUENCE D’ÉVÈNEMENTS »
Martin Fowler
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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 €
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Pourquoi utiliser 

l’EVENT SOURCING?
Audit
Analyse/debug
Reprise de

données
Performance
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
APPLICATION
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it
Commande
FONCTION DE

DÉCISION
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
FONCTION DE DÉCISION
(état courant + commande)
=> évènement(s)
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
FONCTION D’ÉVOLUTION
(état courant + évènement)
=> nouvel état
Pour chaque évènement émis par 

la fonction de décision
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Contexte
Au coeur des 

salles de marché
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
http://www.les-terres-rares.com/platine-palladium-meme-famille-2-destins-differents/
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Couverture
Livraison 

physique
A L’ÉCHÉANCE
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
CLIENT
COMPTABILITÉ
TRADER MARCHÉ
VENDEUR
AVANT 

MULTIPLUS
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
CLIENT
COMPTABILITÉ
AUTOMATE

DE PRIX
MARCHÉ
MULTIPLUS
AVEC 

MULTIPLUS
COUVERTURE
LIMITES
MARGES
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
L’Event Sourcing

chez Multiplus
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
APPLICATION
Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it
FONCTION DE

DÉCISION
RecevoirPrix

{commande}
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
FONCTION DE DÉCISION
(état courant + commande)
=> évènement(s)
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
FONCTION DE DÉCISION
(état courant + RecevoirPrix)
=> PrixReçu
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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}
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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}
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
APPLICATION
PrixReçu

{évènement}
PrixTransféré

{évènement}
BUSD’ÉVÈNEMENTS
PrixTransféréHandler

{handler}
CLIENT
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Event loop
Commandes Évènements
Messages
Messages
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Event loop
Commandes Évènements
Messages
Messages
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
C2 = 10 ms
C2 = 10 + 10 ms
C1 C2 C3
C1 = 10 ms C2 = 10 ms
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Bus
Handler
Handler
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Event loop
Commandes Évènements
Messages
Messages
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
BUS
HANDLER
HANDLER
EMS
thread
pool
IUM
thread
pool
EMS
thread
pool
IUM
thread
pool
Event loop
Commandes
Évènements
Messages
Messages
Event loop
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Event sourcing
ce que l’on a appris
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Vous pouvez (devez ?)
faire SANS FRAMEWORK
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Ne pas confondre 

EVENT sourcing et 

COMMAND sourcing
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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/2017 - Marge 0,1%
01/07/2017 - Marge 0,2%
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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/
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
CQRS
En bref
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Command Query 

Responsibility Segregation ?
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Pourquoi utiliser CQRS ?
Maintenabilité
Performance

des lectures
Intégration avec

l’Event Sourcing
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Contexte
Monitorer notre business
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Monitoring « MÉTIER »
Contrôles basiques

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

des transactions
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
CQRS chez Multiplus
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr

BUS D’ÉVÈNEMENTS
MULTIPLUS
HANDLER
PUSH-API
STOCKAGE
AGRÉGATION
INDEX
Évènement
Queue
EMS
Web
SocketVue CONSOLE
Vue
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
PUSH-API
STOCKAGE
AGRÉGATION
INDEX
Web
Socket CONSOLE
Évènement

{transaction #345}
Évènements

{transaction #345}
Vue

{transaction #345}
Vue

{transaction #345}
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
FONCTION 

D’AGRÉGATION
Exécution

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

Acceptée
{transaction #345,
idSéquence = 2}
FONCTION 

D’AGRÉGATION
Vue
{transaction #345, 

statut = TERMINÉE}
Vue
{transaction #345, 

statut = EN COURS}
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
FONCTION 

D’AGRÉGATION
Vue
{transaction #345, 

statut = EN COURS}
Exécution

Acceptée
{transaction #345,
idSéquence = 2}
FONCTION 

D’AGRÉGATION
Exécution

Demandée
{transaction #345,
idSéquence = 1}
Vue
{transaction #345, 

statut = TERMINÉE}
FONCTION 

D’AGRÉGATION
Exécution

Acceptée
{transaction #345,
idSéquence = 2}
Vue
{transaction #345, 

statut = TERMINÉE}
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
CQRS
ce que l’on a appris
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Il existe TOUJOURS un contrat,
même s’il est IMPLICITE !
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Évènements d’intérêt
Évènements 

en mémoire
Poser la 1ÈRE
PIERRE, à
l’édifice CQRS !
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
Conclusion
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
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).
#DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr
1
#BeXebian
recrutement@xebia.fr

Contenu connexe

Similaire à Devoxx 17 - CQRS/EventSourcing par la pratique

Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016Audrey Neveu
 
Développement Web sur iPhone (iPhone+iPad DevCamp Québec)
Développement Web sur iPhone (iPhone+iPad DevCamp Québec)Développement Web sur iPhone (iPhone+iPad DevCamp Québec)
Développement Web sur iPhone (iPhone+iPad DevCamp Québec)Rémi Prévost
 
Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017Emilien Pecoul
 
Devoxx France 2014 - Tests de performance en continu
Devoxx France 2014 - Tests de performance en continuDevoxx France 2014 - Tests de performance en continu
Devoxx France 2014 - Tests de performance en continuPublicis Sapient Engineering
 
XebiConFr 15 - Be Data Driven : Monter son Data Lab
XebiConFr 15 - Be Data Driven : Monter son Data LabXebiConFr 15 - Be Data Driven : Monter son Data Lab
XebiConFr 15 - Be Data Driven : Monter son Data LabPublicis Sapient Engineering
 
Les secrets d’un taux de conversion de champion
Les secrets d’un taux de conversion de championLes secrets d’un taux de conversion de champion
Les secrets d’un taux de conversion de championaltima°
 
OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...
OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...
OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...OroVibe
 
E-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfo
E-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfoE-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfo
E-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfoThomas TONDER
 
Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Brigitte Marandon
 
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...Publicis Sapient Engineering
 
XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...
XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...
XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...Publicis Sapient Engineering
 
Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?Microsoft
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurPublicis Sapient Engineering
 
Drupal, les hackers, la sécurité & les (très) grands comptes
Drupal, les hackers, la sécurité & les (très) grands comptesDrupal, les hackers, la sécurité & les (très) grands comptes
Drupal, les hackers, la sécurité & les (très) grands comptesSkilld
 

Similaire à Devoxx 17 - CQRS/EventSourcing par la pratique (20)

Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
 
Développement Web sur iPhone (iPhone+iPad DevCamp Québec)
Développement Web sur iPhone (iPhone+iPad DevCamp Québec)Développement Web sur iPhone (iPhone+iPad DevCamp Québec)
Développement Web sur iPhone (iPhone+iPad DevCamp Québec)
 
Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017
 
Devoxx France 2014 - Tests de performance en continu
Devoxx France 2014 - Tests de performance en continuDevoxx France 2014 - Tests de performance en continu
Devoxx France 2014 - Tests de performance en continu
 
XebiConFr 15 - Be Data Driven : Monter son Data Lab
XebiConFr 15 - Be Data Driven : Monter son Data LabXebiConFr 15 - Be Data Driven : Monter son Data Lab
XebiConFr 15 - Be Data Driven : Monter son Data Lab
 
Les secrets d’un taux de conversion de champion
Les secrets d’un taux de conversion de championLes secrets d’un taux de conversion de champion
Les secrets d’un taux de conversion de champion
 
OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...
OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...
OroVibe 2017 - Déployer et gérer les applications Oro dans le Cloud - Aymeric...
 
E-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfo
E-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfoE-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfo
E-Metrics Paris 2011 - Libérer l'action pour faire bondir sa transfo
 
Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Présentation welcom la webperf by object23
Présentation welcom la webperf by object23
 
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
 
XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...
XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...
XebiCon'16 : Cloud et Maturité de SI. Par Stéphane Teyssier, Consultant chez ...
 
Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?
 
Devoxx France - Nouvelles du Front
Devoxx France - Nouvelles du FrontDevoxx France - Nouvelles du Front
Devoxx France - Nouvelles du Front
 
Networxx (intro et fin)
Networxx (intro et fin)Networxx (intro et fin)
Networxx (intro et fin)
 
Urbaniser un SI pour 10 ans
Urbaniser un SI pour 10 ansUrbaniser un SI pour 10 ans
Urbaniser un SI pour 10 ans
 
ET13 - F3 - Du paléolithique au paléo analytic
ET13 - F3 - Du paléolithique au paléo analyticET13 - F3 - Du paléolithique au paléo analytic
ET13 - F3 - Du paléolithique au paléo analytic
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
Drupal, les hackers, la sécurité & les (très) grands comptes
Drupal, les hackers, la sécurité & les (très) grands comptesDrupal, les hackers, la sécurité & les (très) grands comptes
Drupal, les hackers, la sécurité & les (très) grands comptes
 
XebiConFr15 - Les algorithmes du machine learning
XebiConFr15 - Les algorithmes du machine learningXebiConFr15 - Les algorithmes du machine learning
XebiConFr15 - Les algorithmes du machine learning
 
XebiConFr 15 - Swift dans la vraie vie
XebiConFr 15 - Swift dans la vraie vieXebiConFr 15 - Swift dans la vraie vie
XebiConFr 15 - Swift dans la vraie vie
 

Plus de Publicis Sapient Engineering

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainPublicis Sapient Engineering
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...Publicis Sapient Engineering
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin Publicis Sapient Engineering
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?Publicis Sapient Engineering
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?Publicis Sapient Engineering
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéPublicis Sapient Engineering
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...Publicis Sapient Engineering
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !Publicis Sapient Engineering
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizPublicis Sapient Engineering
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéPublicis Sapient Engineering
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectPublicis Sapient Engineering
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...Publicis Sapient Engineering
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018Publicis Sapient Engineering
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...Publicis Sapient Engineering
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...Publicis Sapient Engineering
 
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieuXebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieuPublicis Sapient Engineering
 

Plus de Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilité
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieuXebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
 

Devoxx 17 - CQRS/EventSourcing par la pratique

  • 1. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Event Sourcing/CQRS
 par la pratique Clément HELIOU
  • 3. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Diffusez vos cartes dans la communauté et devenez un ninja du développement.
  • 4. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr @c_heliou
  • 5. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr L’Event Sourcing
 En bref
  • 6. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr « Capturer tous les changements d’état d’une application comme une SÉQUENCE D’ÉVÈNEMENTS » Martin Fowler
  • 7. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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 €
  • 8. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Pourquoi utiliser 
 l’EVENT SOURCING? Audit Analyse/debug Reprise de
 données Performance
  • 9. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr APPLICATION Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it Commande FONCTION DE
 DÉCISION
  • 10. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr FONCTION DE DÉCISION (état courant + commande) => évènement(s)
  • 11. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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
  • 12. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr FONCTION D’ÉVOLUTION (état courant + évènement) => nouvel état Pour chaque évènement émis par 
 la fonction de décision
  • 13. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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
  • 14. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Contexte Au coeur des 
 salles de marché
  • 16. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr http://www.les-terres-rares.com/platine-palladium-meme-famille-2-destins-differents/
  • 17. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Couverture Livraison 
 physique A L’ÉCHÉANCE
  • 18. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr CLIENT COMPTABILITÉ TRADER MARCHÉ VENDEUR AVANT 
 MULTIPLUS
  • 19. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr CLIENT COMPTABILITÉ AUTOMATE
 DE PRIX MARCHÉ MULTIPLUS AVEC 
 MULTIPLUS COUVERTURE LIMITES MARGES
  • 20. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr L’Event Sourcing
 chez Multiplus
  • 21. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr APPLICATION Inspiré par J. Chassaing - http://thinkbeforecoding.com/post/2014/01/04/Event-Sourcing.-Draw-it FONCTION DE
 DÉCISION RecevoirPrix
 {commande}
  • 22. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr FONCTION DE DÉCISION (état courant + commande) => évènement(s)
  • 23. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr FONCTION DE DÉCISION (état courant + RecevoirPrix) => PrixReçu
  • 24. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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}
  • 26. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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}
  • 27. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr APPLICATION PrixReçu
 {évènement} PrixTransféré
 {évènement} BUSD’ÉVÈNEMENTS PrixTransféréHandler
 {handler} CLIENT
  • 28. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages
  • 29. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages
  • 30. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr C2 = 10 ms C2 = 10 + 10 ms C1 C2 C3 C1 = 10 ms C2 = 10 ms
  • 31. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Bus Handler Handler EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages
  • 32. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr BUS HANDLER HANDLER EMS thread pool IUM thread pool EMS thread pool IUM thread pool Event loop Commandes Évènements Messages Messages Event loop
  • 33. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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
  • 34. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Event sourcing ce que l’on a appris
  • 35. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Vous pouvez (devez ?) faire SANS FRAMEWORK
  • 36. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Ne pas confondre 
 EVENT sourcing et 
 COMMAND sourcing
  • 37. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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
  • 38. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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
  • 39. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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/2017 - Marge 0,1% 01/07/2017 - Marge 0,2%
  • 40. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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/
  • 41. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr CQRS En bref
  • 42. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Command Query 
 Responsibility Segregation ?
  • 43. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Pourquoi utiliser CQRS ? Maintenabilité Performance
 des lectures Intégration avec
 l’Event Sourcing
  • 44. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Contexte Monitorer notre business
  • 45. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Monitoring « MÉTIER » Contrôles basiques
 par client, produit, etc. Suivi temps-réel
 des transactions
  • 46. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr CQRS chez Multiplus
  • 47. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 
BUS D’ÉVÈNEMENTS MULTIPLUS HANDLER PUSH-API STOCKAGE AGRÉGATION INDEX Évènement Queue EMS Web SocketVue CONSOLE Vue
  • 48. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr PUSH-API STOCKAGE AGRÉGATION INDEX Web Socket CONSOLE Évènement
 {transaction #345} Évènements
 {transaction #345} Vue
 {transaction #345} Vue
 {transaction #345}
  • 49. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr FONCTION 
 D’AGRÉGATION Exécution
 Demandée {transaction #345, idSéquence = 1} Exécution
 Acceptée {transaction #345, idSéquence = 2} FONCTION 
 D’AGRÉGATION Vue {transaction #345, 
 statut = TERMINÉE} Vue {transaction #345, 
 statut = EN COURS}
  • 50. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr FONCTION 
 D’AGRÉGATION Vue {transaction #345, 
 statut = EN COURS} Exécution
 Acceptée {transaction #345, idSéquence = 2} FONCTION 
 D’AGRÉGATION Exécution
 Demandée {transaction #345, idSéquence = 1} Vue {transaction #345, 
 statut = TERMINÉE} FONCTION 
 D’AGRÉGATION Exécution
 Acceptée {transaction #345, idSéquence = 2} Vue {transaction #345, 
 statut = TERMINÉE}
  • 51. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr CQRS ce que l’on a appris
  • 52. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Il existe TOUJOURS un contrat, même s’il est IMPLICITE !
  • 53. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Évènements d’intérêt Évènements 
 en mémoire Poser la 1ÈRE PIERRE, à l’édifice CQRS !
  • 54. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr Conclusion
  • 55. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 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).
  • 56. #DevoxxFR #XebiaDevoxx @c_heliou @XebiaFr 1 #BeXebian recrutement@xebia.fr