Comment concevoir des systèmes capables d’encaisser des dizaines de milliers d’updates par seconde sans s’engorger, ni dépasser la milli seconde de traitement ? Comment écrire du code scalable qui reste lisible –mais garanti 100% sans deadlock ? Que recouvre le reactive manifesto et les termes : conflation, sequencer, immutable state ? Après vous avoir présenté les besoins et contraintes du trading électronique, nous répondrons à toutes ces questions dans une session qui s'annonce...technique.
4. @cyrdup @tpierrain#ReactFin
La banque d'investissement
•Fournir des solutions de
financement
•Proposer des solutions
d'investissements
•Créer des produits financiers
•Agir sur les marchés
30. @cyrdup @tpierrain#ReactFin
Mission
•Calculer en temps réel le prix des paquets de pâtes
proposées
•Offre en pates:
•4 tailles de paquet: 250g, 500g, 1Kg, 2Kg
•4 types de farine: basique, premium, bio, complète
•3 recettes: sans oeufs, avec et riche en oeuf
•50 formes et couleurs différentes
soit 2400 types de pates !
31. @cyrdup @tpierrain#ReactFin
Calculer le prix
•Le prix dépend des cours
•des différents types de blés
•des oeufs (le cas échéant)
•du carton et/ou du plastique (emballage)
•d’autres ingrédients optionnels (pates colorées): tomate
épinards
41. @cyrdup @tpierrain#ReactFin
Approche mono thread
Calc Encdec
Pasta pricer
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
42. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
111001
0101...
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
43. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
44. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Oeufs
1.5 €
Approche mono thread
45. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Oeufs
1.5 €
Approche mono thread
46. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Oeufs
1.5 €
Approche mono thread
47. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
48. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
Approche mono thread
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
49. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
gnocchi
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Oeufs
1.5 €
Approche mono thread
50. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
gnocchi
Gnocchi
5.4 €
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
51. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
gnocchi
Gnocchi
5.4 €
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
52. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
gnocchi
011001
01100
…
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
53. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
011001
01100
…
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
54. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
penne
Oeufs
1.5 €
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
55. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
penne
penne
2.1 €
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
56. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
penne
penne
2.1 €
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
57. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
penne
011001
01100
…
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
58. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
011001
01100
…
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
59. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
Oeufs
1.5 €
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
nepen
ne
pen
ne
pen
ne
—- — pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
Approche mono thread
63. @cyrdup @tpierrain#ReactFin
Calc Encdec
Pasta pricer
Approche mono thread
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
————
—
65. @cyrdup @tpierrain#ReactFin
avis sur la solution?
-On n exploite pas la CPU au mieux
-prix des dernières pâtes calculées en retard
-le mono-thread: intéressant pour la ultra low
latency - pas ici avec nos contraintes
-le moment de // nos calculs !
Approche mono thread
88. @cyrdup @tpierrain#ReactFin
Avis?
-2400 threads ... Ca va pas la tête ?!?
-context switches de malade
-modèle pas scalable... ni raisonnable
-il faut // d accord- mais plus finement
-approche suivante !
Approche 1 worker thread / pate
102. @cyrdup @tpierrain#ReactFin
Approche « pool de thread »
Pasta pricer
Calc
Calc
Calc
Enc
Enc
Enc
dec
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
Gno
cchi
105. @cyrdup @tpierrain#ReactFin
Pasta pricer:
concentrons nous sur les gnocchis !
Calc
Calc
Calc
Enc
Enc
Enc
dec
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
pen
ne
Gno
cchi
Pool de thread et race conditions…
124. @cyrdup @tpierrain#ReactFin
Probleme:
-le dernier prix publié pour les gnocchis
ne tient pas compte de la dernières
info reçue
solution:
-Il faut que les prix soient publiés en
respectant l ordre des inputs reçus
Pool de thread et race conditions…
128. @cyrdup @tpierrain#ReactFin
les vieux maitres en
multithreading ont un dicton :
¨qui dit lock ...
Approche Multi tasks / thread pool
... dit deadlock¨
129. @cyrdup @tpierrain#ReactFin
1. Protéger l acces à nos ressources
(pates dans un monde // et asynchrone
2. pas de deadlock - donc pas de lock ni de
wait sans timeout dans le code du pricer
3. pas d expertise de dingue obligatoire en
multithreading
en resume, on veut:
Approche Multi tasks / thread pool
133. @cyrdup @tpierrain#ReactFin
¨Le sequencer¨
- un pattern qui garantit l ordre d execution des
tâches associées à un ¨état¨ donné
ex: un stream de prix, une négociation, un workflow, etc.
!
- Maintient la cohérence de cet état dans un
environnement complètement asynchrone et //
Programmation reactive pour tous !
141. @cyrdup @tpierrain#ReactFin
Le sequencer en post-it
Sequencer
gnocchi
gnocchi
classe qui
agrège un
sequencer
le sequencer
a qui on confie des
tâches a
¨sequencer¨
142. @cyrdup @tpierrain#ReactFin
Le sequencer en post-it
Sequencer
gnocchi
gnocchi
classe qui
agrège un
sequencer
le sequencer
a qui on confie des
tâches a
¨sequencer¨
interface Sequencer{
void dispatch(Task task);
}
programmation
asynchrone
223. @cyrdup @tpierrain#ReactFin
¨ C est le moyen d amortir les pics de charge
quand le système est déjà bien occupé ¨
La conflation
224. @cyrdup @tpierrain#ReactFin
le Balking
Le dernier message sur le même sujet vient
remplacer le précédent. ¨Annule et remplace¨
2 types de conflation:
Oeufs
bios
3.5 €
Oeufs
bios
4.1 €
Oeufs
bios
4.1 €
t1 t0 t2
225. @cyrdup @tpierrain#ReactFin
le Balking
Le dernier message sur le même sujet vient
remplacer le précédent. ¨Annule et remplace¨
2 types de conflation:
le merge
le dernier message sur le même sujet vient fusionner
son contenu avec le précédent
Oeufs
bios
3.5 €
Oeufs
bios
4.1 €
Oeufs
bios
4.1 €
t1 t0 t2
Oeufs
bios
5kg:
20 €
Oeufs
bios
1kg:
5 €
Oeufs bios
1 kg: 5 €
5 kg: 20 €
t0t1 t2
288. @cyrdup @tpierrain#ReactFin
Etre réactif …
1. Ce n’est pas un marteau en or
2. C’est une forme particulière de design
3. Qui a besoin de nouvelles patterns
Merci pour votre attention !
289. @cyrdup @tpierrain#ReactFin
Quelques références
1. Sites / blogs
• http://www.reactivemanifesto.org/
• http://mechanical-sympathy.blogspot.fr/ (Martin THOMPSON)
• http://dupdob.wordpress.com/ (many cores)
• http://tpierrain.blogspot.fr/ (use case driven)
2. Vidéos
• Metrics, Metrics everywhere (Coda HALE)
https://www.youtube.com/watch?v=czes-oa0yik
• Vidéo: How NOT to measure latency (Gil TENE)
http://www.infoq.com/presentations/latency-pitfalls
• React2014: https://www.youtube.com/user/reactconf/videos
3. Ouvrage:
• Release It!: Design and deploy prod ready software (Michael T. NYGARD)