Top Banner
Thomas PIERRAIN @tpierrain Bruno BOUCARD @brunoboucard Tomasz JASKULA @tjaskula Eric VERNIE @EricVernie CQRS par la pratique
50

Decouvrir CQRS (sans Event sourcing) par la pratique

Apr 15, 2017

Download

Software

Thomas Pierrain
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Decouvrir CQRS (sans Event sourcing) par la pratique

Thomas PIERRAIN@tpierrain

Bruno BOUCARD@brunoboucard

Tomasz JASKULA@tjaskula

Eric VERNIE@EricVernie

CQRS par la pratique

Page 2: Decouvrir CQRS (sans Event sourcing) par la pratique

Pourquoi CQRS ?

Page 3: Decouvrir CQRS (sans Event sourcing) par la pratique

Des problèmes de Scalabilité ?

N° 4

Page 4: Decouvrir CQRS (sans Event sourcing) par la pratique

Loi de Pareto80-20

Le coupable…

N° 5

0%0%

80% de lecture

20% d’écriture

Page 5: Decouvrir CQRS (sans Event sourcing) par la pratique

Des contraintes très différentes à

gérer par le même composant

central

donc…

En même temps…

N° 6

Page 6: Decouvrir CQRS (sans Event sourcing) par la pratique

Tenez-en vous suffisamment compte dans vos choix de design et d’architecture ?

Question(pour vous)

N° 7

Page 7: Decouvrir CQRS (sans Event sourcing) par la pratique

Comment optimiser une appli qui a besoin de monter à l’échelle ?

Et alors(d’après vous…)

N° 8

Page 8: Decouvrir CQRS (sans Event sourcing) par la pratique

C’est là oùCQRS…

N° 9

Page 9: Decouvrir CQRS (sans Event sourcing) par la pratique

CQRS (version courte)

Page 10: Decouvrir CQRS (sans Event sourcing) par la pratique

CQRS sépare les 80 et les 20

N° 11

Page 11: Decouvrir CQRS (sans Event sourcing) par la pratique

CQRS sépare les 80 et les 20

N° 12

20 % du temps

80 % du temps

Page 12: Decouvrir CQRS (sans Event sourcing) par la pratique

CQRS

Et au fait ?!?( powered by Greg YOUNG - @gregyoung )

N° 13

Page 13: Decouvrir CQRS (sans Event sourcing) par la pratique

Command

Query

Responsibility

Segregation

Et au fait ?!?

N° 14

Page 14: Decouvrir CQRS (sans Event sourcing) par la pratique

Command

Query

Responsibility

Segregation

Et au fait ?!?

N° 15

Page 15: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 16

Le petit CQRS illustré

Page 16: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 17

Le petit CQRS illustré

Page 17: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 18

Le petit CQRS illustré

Page 18: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 19

Le petit CQRS illustré

Page 19: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 20

Le petit CQRS illustré

Page 20: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 21

Le petit CQRS illustré

Page 21: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 22

Le petit CQRS illustré

Page 22: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 23

Le petit CQRS illustré

Page 23: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 24

Le petit CQRS illustré

Page 24: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 25

Le petit CQRS illustré

Page 25: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 26

Le petit CQRS illustré

Page 26: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 27

Le petit CQRS illustré

Page 27: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 28

Le petit CQRS illustré

Page 28: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 29

Le petit CQRS illustré

Page 29: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 30

Le petit CQRS illustré

Page 30: Decouvrir CQRS (sans Event sourcing) par la pratique

Le petit CQRS illustré

N° 31

Bases de

données

relationnelles

(ACID)

Caches, modèles

dénormalisés,

« prêts à

«consommer »

(no SQL)

Page 31: Decouvrir CQRS (sans Event sourcing) par la pratique

CommandDÉCLENCHE UNE ACTION

Modifie l’état du système

>> Ne retourne pas de donnée ! <<

Verbe a l’impératif

Ex: BookARoom

N° 32

QueryRÉCUPÈRE UNE INFORMATION

Lecture-seule !

Retourne des données

Verbe a l’impératif

Ex: GetAvailableRooms

EventA DÉJÀ EU LIEU

(Immutable)

Verbe au participe passé

Ex: RoomBooked

Page 32: Decouvrir CQRS (sans Event sourcing) par la pratique

Démo

Page 33: Decouvrir CQRS (sans Event sourcing) par la pratique

Implémentation Open Source disponible sur GitHub

Constitué de deux parties

CoreClr (Runtime d’exécution) (C++)

CoreFx (inclue les classes, collections, file systems, xml etc….) (C#)

Le Framework ASP.NET Core 1.0 s’appuie dessus

Déploiement classique ou

Containers (Linux ou Windows)

.NET Core// Licensed to the .NET Foundation under one or more agreements.

Page 34: Decouvrir CQRS (sans Event sourcing) par la pratique
Page 35: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 37

Page 36: Decouvrir CQRS (sans Event sourcing) par la pratique
Page 37: Decouvrir CQRS (sans Event sourcing) par la pratique
Page 38: Decouvrir CQRS (sans Event sourcing) par la pratique

Live coding

Page 39: Decouvrir CQRS (sans Event sourcing) par la pratique

Pour conclure…

Page 40: Decouvrir CQRS (sans Event sourcing) par la pratique

Attention !

N° 42

Page 41: Decouvrir CQRS (sans Event sourcing) par la pratique

…un pattern général d’architecture

Utilisez-le pour les composants soumis à rude épreuve (perf)

Et uniquement sur une sous-partie de votre plate-forme par exemple

CQRS ce n’est pas…

N° 43

Page 42: Decouvrir CQRS (sans Event sourcing) par la pratique

Event Sourcing

Ce n’est pas non plus…

N° 44

Page 43: Decouvrir CQRS (sans Event sourcing) par la pratique

CQRS Event Sourcing

mais

CQRS != Event Sourcing

N° 45

Page 44: Decouvrir CQRS (sans Event sourcing) par la pratique

Donc vous l’aurez compris…

N° 46

Page 45: Decouvrir CQRS (sans Event sourcing) par la pratique

… bien séparer son code de lecture et son code d’écriture

CQRS c’est surtout…

N° 47

QueriesCaches, modèles

dénormalisés, lecture-seule

CommandsTransactionnel

ACID

Page 46: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 48

Merci aussi à Rui CARVALHO, Mendel MONTEIRO-BECKERMAN,

Olivier COANET et Clément BOUDEREAU ainsi que Greg YOUNG pour leurs feedbacks et idées pour ce talk.

Page 47: Decouvrir CQRS (sans Event sourcing) par la pratique

Pour refaire le lab a la maison :

Suivez les instructions ici :

https://github.com/tpierrain/CQRS/blob/master/LabInstructions.md

Page 48: Decouvrir CQRS (sans Event sourcing) par la pratique

@microsoftfrance @Technet_France @msdev_fr

@tpierrain @brunoboucard @tjaskula @EricVernie

N° 50

Page 49: Decouvrir CQRS (sans Event sourcing) par la pratique

N° 51

Page 50: Decouvrir CQRS (sans Event sourcing) par la pratique

try

{

var uri = new Uri("http://example.com/datalist.aspx");

var httpClient = new HttpClient();

var result = await httpClient.GetStringAsync(uri);

}

catch (Exception e)

{

}

Exemplede code

N° 52