le temps c'est de l'argent
DESCRIPTION
Un modèle pour le tempsTRANSCRIPT
![Page 1: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/1.jpg)
13h30 - 16h30 - Salle La Seine A
Le temps c’est de l’argent !Event Sourcing/DDDD/CQRS
![Page 2: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/2.jpg)
![Page 3: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/3.jpg)
27 au 29 mars 2013
Le temps c’est de l’argentEvent Sourcing / DDDD / CQRS
Jérémie ChassaingArchitecte / Siriona
http://thinkbeforecoding.com
@thinkb4coding
![Page 4: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/4.jpg)
Jérémie Chassaing
• Fondateur de Hypnotizer et BBCG/PixVillage
• Architecte et associé chez Siriona depuis 2008
• Advisory board PnP Mircosoft ‘A CQRS Journey’
• http://thinkbeforecoding.com
![Page 5: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/5.jpg)
Le problème
Les outils à notre disposition pour exprimer le temps dans nos systems ?• Timers ?• Threads ?• Locks ?• Clocks ?Très naïfs et peu puissants
![Page 6: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/6.jpg)
Il nous faut un modèle
![Page 7: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/7.jpg)
Qu’est ce que le temps ?
![Page 8: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/8.jpg)
Définition physique du temps
• Pas de définition du temps à proprement parler • Pas de mesure du temps
• Mais mesure du temps écoulé
![Page 9: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/9.jpg)
Définition physique du temps
La seconde est la durée de 9 192 631 770 périodes de la radiation correspondant à la transition entre les niveaux hyperfins F=3 et F=4 de l’état fondamental 6S½ de l’atome de césium 133
http://fr.wikipedia.org/wiki/Seconde_(temps)
![Page 10: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/10.jpg)
Qu’y a-t-il entre ces transition ?
Définition physique du temps
![Page 11: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/11.jpg)
Définition physique du temps
Evènement:Changement d’état ou de contexte, lié à une modification
substantielle de la valeur d'un paramètre mesurable, dans un intervalle de temps bref à l'échelle de l'expérience
![Page 12: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/12.jpg)
Temps ressenti
Une journée bien remplie
Une journée bien vide
![Page 13: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/13.jpg)
Temps ressenti
Une heure n’est pas qu’une heure. C’est un vase rempli de parfums, de sons, de projets et de climats.
Marcel Proust, le temps retrouvé
![Page 14: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/14.jpg)
Temps ressenti
• Dualité Temps/Evénements
• Causalité
![Page 15: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/15.jpg)
Quel rapport avec le business ?
Back to business
![Page 16: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/16.jpg)
Back to business
C'est le langage du Business.
Ecoutez vos Domain Experts…
![Page 17: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/17.jpg)
Back to business
Domain EventsLe pattern manquant dans
Domain Driven Design
![Page 18: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/18.jpg)
Make the implicit explicit
@gregyoung
Back to business
![Page 19: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/19.jpg)
Event Sourcing
![Page 20: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/20.jpg)
Event Sourcing
Utiliser les événements comme moyen de persistance
![Page 21: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/21.jpg)
Event Sourcing
Persistance structurelle – état :
![Page 22: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/22.jpg)
Event Sourcing
![Page 23: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/23.jpg)
Event Sourcing
![Page 24: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/24.jpg)
Event Sourcing
Une simple sérialisation/déserialisation des événements
Plus d’ORM (Impedance mismatch)
Plus de liaison entre le stockage et l’état privé des entités
Plus de Getters/Setters sur les entités !
![Page 25: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/25.jpg)
Event Sourcing
Stockage en insertion seule
• Simple à mettre en place• Excellente montée en charge• Backup/réplication incrémental• Simple a utiliser pour le diagnostique
![Page 26: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/26.jpg)
Event Sourcing - Sauvegarde
f(Command, State) Events→
Sauver les événements. Tous.Ne jamais modifier ou effacer un événement passé
![Page 27: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/27.jpg)
Event Sourcing - Chargement
f(Event, State) State→
Par agrégat – en généralPas d’effets de bord
![Page 28: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/28.jpg)
Event Sourcing - Performances
• Plus rapide que ce qu’on imagine
• Cache des événements
• En mémoire
• Snapshots
• Immutabilité
![Page 29: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/29.jpg)
Event Sourcing - Snapshots
Lorsque le nombre d’événements augmente:• Prendre une capture de l’état après l’événement n
• Charger la capture, appliquer les événement après n
• Peut se faire en parallèle
• Peut être reconstruit à partir de zéro
![Page 30: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/30.jpg)
Modélisation
![Page 31: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/31.jpg)
Modélisation
L’adresse de l’utilisateur a changée…
Vraiment ?
![Page 32: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/32.jpg)
Capturer l’intension
![Page 33: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/33.jpg)
Capturer l’intension
Et quand c’est l’heure qui nous intéresse ?
• Finance : Ouverture / Fermeture de la bourse• Comptabilité : Clôture d’un exercice• Hôtellerie : Saisons
Ces événements ont un sens !
![Page 34: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/34.jpg)
Agrégats
Regroupez les Entités et les Valeurs en Agrégats et définissez une frontière autour de chacun. […] Cette organisation simplifie la préservation des invariants entre les objets de l’Agrégat et de l’Agrégat lui-même lors de tout changement d’état.
Eric Evans - Domain Driven Design
![Page 35: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/35.jpg)
Agrégats
Idéal pour émettre les événements
![Page 36: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/36.jpg)
Agrégats
Frontière :
Ce qui est a l’intérieur doit être consistant
Ce qui est à l’extérieur n’a pas besoin de l’être
Eventual Consistency
![Page 37: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/37.jpg)
Event Store
![Page 38: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/38.jpg)
Event Store
Name TypeEventId unique identifierAggregateId unique identifierVersion intData binary
![Page 39: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/39.jpg)
Event Store
Ou un fichier en ajout seul
Ecriture / Flush
Size Data Check sum
![Page 40: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/40.jpg)
Event Store
Utiliser l’Event Store comme une Queue de messages
EcritureLecture
![Page 41: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/41.jpg)
Intégration ?
![Page 42: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/42.jpg)
Le bonnes pratiques
![Page 43: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/43.jpg)
Architecture 3 tiers
Présentation
Objets métiers
Base de données
![Page 44: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/44.jpg)
Architecture 3 tiers
• Chargements à la demande• Prefetch paths ou SELECT 1+N• ORMs • Cache
![Page 45: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/45.jpg)
Architecture 3 tiers
Est-ce qu’on ne se complique pas un peu la vie ?
![Page 46: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/46.jpg)
CQRS
Commands and QueriesResponsibility Segregation
![Page 47: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/47.jpg)
CQRS
Did you mean CARS ?
![Page 48: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/48.jpg)
CQRS – Vue d’ensemble
48
Présentation
Modèle delecture
Requ
êtes
Com
mandes
Evénements
DomaineEcriture seule
![Page 49: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/49.jpg)
CQRS – Coté requêtes
49
Vue Vue
Modèle de vueModèle de vue
persistantpersistantModèle de vueModèle de vue
persistantpersistant
Requête Réponse
![Page 50: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/50.jpg)
CQRS – Coté commandes
50
Vue
Service métierDomaine
Commandes
![Page 51: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/51.jpg)
Présentation
Modèle delecture
Requ
êtes
Com
mandes
EvénementsDomaineEcriture seule??
CQRS - Intégration
•Vues SQL•Map reduce sur une base de documents•Projections d’un flux d’evenements•Toute autre solution adéquate !
![Page 52: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/52.jpg)
Modèle de lecture
• Ecouter les événements publiés
• Projeter dans une base requêtable
Présentation
Modèle delecture
Requ
êtes
Com
mandes
EvénementsDomaineEcriture seuleEvents
![Page 53: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/53.jpg)
Est-ce vraiment plus simple ?
On est en droit de se demander…
![Page 54: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/54.jpg)
Deux modèles pour deux besoins
Requêtes : Modèle de vue persistant
•Un model par vue
•Modèles dénormalisés
•Suit les relations entre objets/contextes
Commandes : Modèle transactionnel
•Un modèle par agrégat
•Respect strict des limites transactionnelles des agrégats
•Pas de relations
![Page 55: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/55.jpg)
Deux modèles pour deux besoins
• Choix indépendants des systèmes de persistance
• Plus de chargements à la demande (lazy loads)
• Donc plus de prefetch path
![Page 56: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/56.jpg)
Choix du stockage en 3 tiers
• SQL, parce que c’est ce que tout le monde utilise.
• Document Store, c’est sympa, mais on peux pas croiser les données.
![Page 57: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/57.jpg)
Choix du stockage en CQRS
Coté requêtes
•SQL (avec ORM/Micro ORM ou sans ORM)•Key Value store•Document Store•Projections en mémoire•Cube OLAP•Ce qui vous convient !
Coté commandes
•SQL + ORM•Document Store•Event Store•Là aussi, écoutez vos besoins et vos contraintes !
![Page 58: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/58.jpg)
Modèle de lecture jetable
Si le modèle de lecture est désynchronisé,ou si le schéma change :
• Effacer• Reconstruire
Présentation
Modèle delecture
Requ
êtes
Com
mandes
EvénementsDomaineEcriture seuleEvents
![Page 59: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/59.jpg)
Gérer l’obsolescence des données
• Versions des agrégats
• Versions des vues
• Timestamps
Présentation
Modèle delecture
Requ
êtes
Com
mandes
EvénementsDomaineEcriture seuleEvents
![Page 60: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/60.jpg)
There are only two hard things in Computer Science: cache invalidation and naming things.
Phil Karlton
![Page 61: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/61.jpg)
Plus de cache
• On cache les requêtes qui prennent du temps à calculer
• Mais quand doit on rafraichir le cache ?
• Quand la donnée change !
![Page 62: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/62.jpg)
Montée en charge
Coté requêtes : Balance de charge Coté commandes : Sharding
![Page 63: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/63.jpg)
Bounded Contexts
Un Bounded Context délimite l’applicabilité d’un modèle particulier pour que les membres de l’équipe aient une compréhension claire […] de ce qui doit être consistant […]
Eric Evans - Domain Driven Design
Intégration par les événements
![Page 64: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/64.jpg)
Effets à long terme
![Page 65: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/65.jpg)
Quantité
Quantité croissante d’information, mais :
Augmentation linéaire avec le temps5,5 Milliards d’événements de 200 octets = 1To = 70€/Mois
En insertion seule, donc plus simple à gérer (Backup, partitionnement)
Valeur Business réelle
![Page 66: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/66.jpg)
Versionnement des événements
Conserver les anciennes versions des événements.
Utiliser de préférence un déserialiseur tolérant:• Ajout de champs• Suppression de champs• Changements de noms des champs
![Page 67: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/67.jpg)
Versionnement des événements
Lorsque la sémantique change
• Créer un nouvel événement
![Page 68: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/68.jpg)
Refactoring
La représentation interne de l’état est réellement privée
Les changements de représentation sont simplifiés
Le snapshots peuvent être reconstruits
![Page 69: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/69.jpg)
Data mining
Aucun changement dans le système ne peut avoir lieu sans être enregistré.
En rejouant les événements, de nouvelles vues peuvent être dérivées, puis mises à jour en temps réel.
![Page 70: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/70.jpg)
Changement des règles
Les règles vont changer !
Les résultats des versions passées des règles ont été capturés dans les événement émis.
L’implémentation actuelle n’a pas besoin de connaitre les anciennes règles.
![Page 71: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/71.jpg)
Comment convaincre votre Business ?
![Page 72: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/72.jpg)
Année 1
« Faites quelque chose qui fonctionne ! »
![Page 73: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/73.jpg)
Année 2 – ça décolle
![Page 74: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/74.jpg)
Retrouver ce qui s’est passé à partir d’une suite partielle d’états et de logs:
Reverse Engineering
![Page 75: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/75.jpg)
![Page 76: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/76.jpg)
Faites les choses à l’endroit
Soyez un ingénieur
![Page 77: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/77.jpg)
27 au 29 mars 2013
Passons à la pratique !
![Page 78: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/78.jpg)
Uno !
![Page 79: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/79.jpg)
Même couleur…
![Page 80: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/80.jpg)
Ou même valeur
![Page 81: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/81.jpg)
Interuption !
![Page 82: Le temps c'est de l'argent](https://reader033.vdocuments.net/reader033/viewer/2022051212/559c656a1a28abd80c8b4818/html5/thumbnails/82.jpg)
Kickback !