27
1 CQRS did you mean CARS ? Jérémie Chassaing @thinkb4coding

Présentation CQRS à DevoxxFr

Embed Size (px)

DESCRIPTION

Présentation CQRS - Commands/Queries Responsibility Segregation - à la conférence DevoxxFR

Citation preview

Page 1: Présentation CQRS à DevoxxFr

1

CQRSdid you mean CARS ?

Jérémie Chassaing@thinkb4coding

Page 2: Présentation CQRS à DevoxxFr

2

Ce qui vous attend

• Et si on s’était compliqué la vie avec l’archi 3 tiers ?

• Reprenons les questions à la base avec CQRS

• Redécouvrons la simplicité et la clarté

• Démultiplions nos options de choix architecturaux

Page 3: Présentation CQRS à DevoxxFr

3

Speaker

• http://thinkbeforecoding.com

• @thinkb4coding

• Architecte chez Siriona

• Membre du Advisory Board CQRS au près du groupe Patterns & Practices de Microsoft

Page 4: Présentation CQRS à DevoxxFr

4

Les bonnes pratiques

Commençons par

Page 5: Présentation CQRS à DevoxxFr

5

Architecture 3 tiers

Présentation

Objets métiers

Base de données

Page 6: Présentation CQRS à DevoxxFr

6

Architecture 3 tiers

• Chargements à la demande

• Prefetch paths ou SELECT 1+N

• ORMs

• Cache

Page 7: Présentation CQRS à DevoxxFr

7

Est-ce qu’on ne se complique

pas un peu la vie ?

On est en droit de se demander:

Page 8: Présentation CQRS à DevoxxFr

8

CQRSCommand/Query

Responsibility Segregation

CQS au niveau architectural

Page 9: Présentation CQRS à DevoxxFr

9

Vue d’ensembles

Présentation

DomaineEcriture seule

Modèle delecture

Requête

s

Com

mandes

Evénements

Page 10: Présentation CQRS à DevoxxFr

10

Coté requêtes

Vue Vue

Modèle de vue

persistantModèle de vue

persistant

Requête Réponse

Page 11: Présentation CQRS à DevoxxFr

11

Coté commandes

Vue

Service métierDomaine

Commandes

Page 12: Présentation CQRS à DevoxxFr

12

Intégration• Vues SQL

• Map reduce sur une base de documents

• Projections d’un flux d’evenements

• Toute autre solution adéquate !

Page 13: Présentation CQRS à DevoxxFr

13

Vue d’ensembles

Présentation

DomaineEcriture seule

Modèle delecture

Requête

s

Com

mandes

Evénements

Page 14: Présentation CQRS à DevoxxFr

14

Est-ce vraiment plus simple ?

A ce niveau là on peut se demander :

Page 15: Présentation CQRS à DevoxxFr

15

Deux modèles pour deux besoins

Requetes : Model de vue persistant

• Un model par vue

• Modèles dénormalisés

• Suit les relations entre objets/contextes

Commandes : Model transactionnel

• Un modèle par agrégat

• Respect strict des limites transactionnelles des agrégats

• Pas de relations

Page 16: Présentation CQRS à DevoxxFr

16

Deux modeles pour deux besoins

• Choix indépendants des systèmes de persistance

• Plus de chargements à la demande (lazy loads)

• Donc plus de prefetch path

Page 17: Présentation CQRS à DevoxxFr

17

Choix du stockage en 3tiers• 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 18: Présentation CQRS à DevoxxFr

18

Choix du stockage avec CQRSCoté 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 19: Présentation CQRS à DevoxxFr

19

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 20: Présentation CQRS à DevoxxFr

20

Montée en chargeCoté requêtes : Balance de charge Coté commandes : Sharding

Page 21: Présentation CQRS à DevoxxFr

21

Quand utiliser CQRS ?

Page 22: Présentation CQRS à DevoxxFr

22

Quand utiliser CQRS

• A l’intérieur d’un contexte délimité

• Dans les environnements fortement concurrents

• Lorsque les modèles de lecture et d’écriture sont différents

• Pour rendre explicite la fraicheur et l’obsolescence des données

Page 23: Présentation CQRS à DevoxxFr

23

Quand ne PAS utiliser CQRS

• Au plus haut niveau du système

• Dans les environnements purement CRUD

• Quand les modèles de lecture et d’écriture sont identiques

Page 24: Présentation CQRS à DevoxxFr

24

ConclusionEt oui, déjà…

Page 25: Présentation CQRS à DevoxxFr

25

Conclusion

• CQRS amène de la clarté en découplant les problématiques

• CQRS permet d’éviter certains problèmes récurrents

• CQRS peut être implémenté dans un contexte isolé

• CQRS propose un choix ouvert d’implémentations

• CQRS peut cohabiter simplement avec les contextes existants

Page 26: Présentation CQRS à DevoxxFr

26

Conclusion

• Arrêtez de vous compliquer la vie

• Utilisez CQRS dès aujourd’hui !

• Plus d’info sur github.com/mspnp

Page 27: Présentation CQRS à DevoxxFr

27

Questions ?