Le temps c'est de l'argent

Preview:

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 !