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

Decouvrir CQRS (sans Event sourcing) par la pratique

Embed Size (px)

Citation preview

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