82
13h30 - 16h30 - Salle La Seine A Le temps c’est de l’argent ! Event Sourcing/DDDD/CQRS

Le temps c'est de l'argent

Embed Size (px)

DESCRIPTION

Un modèle pour le temps

Citation preview

Page 1: Le temps c'est de l'argent

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
Page 3: Le temps c'est de l'argent

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

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

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

Il nous faut un modèle

Page 7: Le temps c'est de l'argent

Qu’est ce que le temps ?

Page 8: Le temps c'est de l'argent

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

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

Qu’y a-t-il entre ces transition ?

Définition physique du temps

Page 11: Le temps c'est de l'argent

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

Temps ressenti

Une journée bien remplie

Une journée bien vide

Page 13: Le temps c'est de l'argent

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

Temps ressenti

• Dualité Temps/Evénements

• Causalité

Page 15: Le temps c'est de l'argent

Quel rapport avec le business ?

Back to business

Page 16: Le temps c'est de l'argent

Back to business

C'est le langage du Business.

Ecoutez vos Domain Experts…

Page 17: Le temps c'est de l'argent

Back to business

Domain EventsLe pattern manquant dans

Domain Driven Design 

Page 18: Le temps c'est de l'argent

Make the implicit explicit

@gregyoung

Back to business

Page 19: Le temps c'est de l'argent

Event Sourcing

Page 20: Le temps c'est de l'argent

Event Sourcing

Utiliser les événements comme moyen de persistance

Page 21: Le temps c'est de l'argent

Event Sourcing

Persistance structurelle – état :

Page 22: Le temps c'est de l'argent

Event Sourcing

Page 23: Le temps c'est de l'argent

Event Sourcing

Page 24: Le temps c'est de l'argent

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

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

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

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

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

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

Modélisation

Page 31: Le temps c'est de l'argent

Modélisation

L’adresse de l’utilisateur a changée…

Vraiment ?

Page 32: Le temps c'est de l'argent

Capturer l’intension

Page 33: Le temps c'est de l'argent

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

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

Agrégats

Idéal pour émettre les événements

Page 36: Le temps c'est de l'argent

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

Event Store

Page 38: Le temps c'est de l'argent

Event Store

Name TypeEventId unique identifierAggregateId unique identifierVersion intData binary

Page 39: Le temps c'est de l'argent

Event Store

Ou un fichier en ajout seul

Ecriture / Flush

Size Data Check sum

Page 40: Le temps c'est de l'argent

Event Store

Utiliser l’Event Store comme une Queue de messages

EcritureLecture

Page 41: Le temps c'est de l'argent

Intégration ?

Page 42: Le temps c'est de l'argent

Le bonnes pratiques

Page 43: Le temps c'est de l'argent

Architecture 3 tiers

Présentation

Objets métiers

Base de données

Page 44: Le temps c'est de l'argent

Architecture 3 tiers

• Chargements à la demande• Prefetch paths ou SELECT 1+N• ORMs • Cache

Page 45: Le temps c'est de l'argent

Architecture 3 tiers

Est-ce qu’on ne se complique pas un peu la vie ?

Page 46: Le temps c'est de l'argent

CQRS

Commands and QueriesResponsibility Segregation

Page 47: Le temps c'est de l'argent

CQRS

Did you mean CARS ?

Page 48: Le temps c'est de l'argent

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

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

CQRS – Coté commandes

50

Vue

Service métierDomaine

Commandes

Page 51: Le temps c'est de l'argent

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

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

Est-ce vraiment plus simple ?

On est en droit de se demander…

Page 54: Le temps c'est de l'argent

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

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

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

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

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

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

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

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

Montée en charge

Coté requêtes : Balance de charge Coté commandes : Sharding

Page 63: Le temps c'est de l'argent

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

Effets à long terme

Page 65: Le temps c'est de l'argent

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

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

Versionnement des événements

Lorsque la sémantique change

• Créer un nouvel événement

Page 68: Le temps c'est de l'argent

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

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

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

Comment convaincre votre Business ?

Page 72: Le temps c'est de l'argent

Année 1

« Faites quelque chose qui fonctionne ! »

Page 73: Le temps c'est de l'argent

Année 2 – ça décolle

Page 74: Le temps c'est de l'argent

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
Page 76: Le temps c'est de l'argent

Faites les choses à l’endroit

Soyez un ingénieur

Page 77: Le temps c'est de l'argent

27 au 29 mars 2013

Passons à la pratique !

Page 78: Le temps c'est de l'argent

Uno !

Page 79: Le temps c'est de l'argent

Même couleur…

Page 80: Le temps c'est de l'argent

Ou même valeur

Page 81: Le temps c'est de l'argent

Interuption !

Page 82: Le temps c'est de l'argent

Kickback !