Upload
jeremie-chassaing
View
969
Download
1
Embed Size (px)
DESCRIPTION
Un modèle pour le temps
Citation preview
13h30 - 16h30 - Salle La Seine A
Le temps c’est de l’argent !Event Sourcing/DDDD/CQRS
27 au 29 mars 2013
Le temps c’est de l’argentEvent Sourcing / DDDD / CQRS
Jérémie ChassaingArchitecte / Siriona
http://thinkbeforecoding.com
@thinkb4coding
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
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
Il nous faut un modèle
Qu’est ce que le temps ?
Définition physique du temps
• Pas de définition du temps à proprement parler • Pas de mesure du temps
• Mais mesure du temps écoulé
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)
Qu’y a-t-il entre ces transition ?
Définition physique du temps
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
Temps ressenti
Une journée bien remplie
Une journée bien vide
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é
Temps ressenti
• Dualité Temps/Evénements
• Causalité
Quel rapport avec le business ?
Back to business
Back to business
C'est le langage du Business.
Ecoutez vos Domain Experts…
Back to business
Domain EventsLe pattern manquant dans
Domain Driven Design
Make the implicit explicit
@gregyoung
Back to business
Event Sourcing
Event Sourcing
Utiliser les événements comme moyen de persistance
Event Sourcing
Persistance structurelle – état :
Event Sourcing
Event Sourcing
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 !
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
Event Sourcing - Sauvegarde
f(Command, State) Events→
Sauver les événements. Tous.Ne jamais modifier ou effacer un événement passé
Event Sourcing - Chargement
f(Event, State) State→
Par agrégat – en généralPas d’effets de bord
Event Sourcing - Performances
• Plus rapide que ce qu’on imagine
• Cache des événements
• En mémoire
• Snapshots
• Immutabilité
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
Modélisation
Modélisation
L’adresse de l’utilisateur a changée…
Vraiment ?
Capturer l’intension
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 !
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
Agrégats
Idéal pour émettre les événements
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
Event Store
Event Store
Name TypeEventId unique identifierAggregateId unique identifierVersion intData binary
Event Store
Ou un fichier en ajout seul
Ecriture / Flush
Size Data Check sum
Event Store
Utiliser l’Event Store comme une Queue de messages
EcritureLecture
Intégration ?
Le bonnes pratiques
Architecture 3 tiers
Présentation
Objets métiers
Base de données
Architecture 3 tiers
• Chargements à la demande• Prefetch paths ou SELECT 1+N• ORMs • Cache
Architecture 3 tiers
Est-ce qu’on ne se complique pas un peu la vie ?
CQRS
Commands and QueriesResponsibility Segregation
CQRS
Did you mean CARS ?
CQRS – Vue d’ensemble
48
Présentation
Modèle delecture
Requ
êtes
Com
mandes
Evénements
DomaineEcriture seule
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
CQRS – Coté commandes
50
Vue
Service métierDomaine
Commandes
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 !
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
Est-ce vraiment plus simple ?
On est en droit de se demander…
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
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
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.
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 !
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
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
There are only two hard things in Computer Science: cache invalidation and naming things.
Phil Karlton
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 !
Montée en charge
Coté requêtes : Balance de charge Coté commandes : Sharding
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
Effets à long terme
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
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
Versionnement des événements
Lorsque la sémantique change
• Créer un nouvel événement
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
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.
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.
Comment convaincre votre Business ?
Année 1
« Faites quelque chose qui fonctionne ! »
Année 2 – ça décolle
Retrouver ce qui s’est passé à partir d’une suite partielle d’états et de logs:
Reverse Engineering
Faites les choses à l’endroit
Soyez un ingénieur
27 au 29 mars 2013
Passons à la pratique !
Uno !
Même couleur…
Ou même valeur
Interuption !
Kickback !