Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR
-
Upload
sfeir -
Category
Technology
-
view
56 -
download
0
Transcript of Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR
![Page 2: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/2.jpg)
2
Pourquoi Deluge ?1
![Page 3: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/3.jpg)
API first!
⬡ Pensé API dès le début…
⬡ ...et donc complètement automatisable.
⬡ Même la CLI utilise l’API.
3
![Page 4: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/4.jpg)
Adapté au cloud (soon)
⬡ Dockerisé
⬡ Déployable partout avec Kubernetes, etc.
⬡ Répartition du travail sur différents noeuds.
4
![Page 5: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/5.jpg)
Pour la simplicité
⬡ Un binaire exécutable autonome. That’s all.
⬡ Un DSL intuitif, simple et lisible.
⬡ Une CLI avec 3 commandes.
⬡ Une API facile à appréhender.
5
![Page 6: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/6.jpg)
Pour le fun !
⬡ Un projet open source.
⬡ Écrit en Go.
⬡ Un grand merci à Florian Orpeliere pour le front !
⬡ Front avec Vue.js
6
![Page 7: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/7.jpg)
7
Sous le capot2
![Page 8: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/8.jpg)
Exécution d’un scénario
8
compilation exécution
recording
fin
n fois
![Page 9: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/9.jpg)
Simulation des utilisateurs concurrents
9
compilation
recording
exécution
n fois
fin
exécution
n fois
exécution
n fois
exécution
n fois
![Page 10: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/10.jpg)
1000 users --- 0.5 request/s
On a rien senti…
10
⬡ 8 X86 64bit Cores⬡ 32GB memory⬡ 250GB Direct SSD
![Page 11: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/11.jpg)
15000 users --- 0.5 request/s
Ca tape, mais on tient !
11
⬡ 8 X86 64bit Cores⬡ 32GB memory⬡ 250GB Direct SSD
![Page 12: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/12.jpg)
12
La puissance de Go3
![Page 13: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/13.jpg)
Concurrent vs. parallèle
13
Concurrent :
Parallèle :
CPU
CPU
CPU
![Page 14: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/14.jpg)
4 users concurrents sur un CPU 4 coeurs
14
CPU 3
CPU 4
CPU 2
CPU 1
User 1
User 2
User 3
User 4
![Page 15: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/15.jpg)
8 users concurrents sur un CPU 4 coeurs
15
CPU 1
User 1
User 2
CPU 2
User 3
User 4
CPU 3
User 5
User 6
CPU 4
User 7
User 8
![Page 16: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/16.jpg)
Les threads
⬡ Géré par l’OS⬡ Switch coûteux⬡ 1Mo / thread au minimum (allocation de la stack)
⇒ Pas adapté pour simuler 15000 users concurrents !
15000 threads ⇒ 15Go de RAM au minimum
16
![Page 17: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/17.jpg)
Les goroutines
⬡ Géré par le runtime Go⬡ Switch très rapide⬡ 2ko / goroutine au minimum
⇒ Hyper adapté pour simuler 15000 users concurrents !
15000 goroutines ⇒ 30Mo de RAM
17
![Page 18: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/18.jpg)
“Géré par le runtime Go”
Scheduler OS :⬡ préemptif⬡ basé sur un timer⇒ peut interrompre les traitements de manière inefficace
18
Scheduler Go :⬡ coopératif⬡ “schedule points” :
⬡ I/O (filesys., network)⬡ Synchro (channels, mutex)⬡ Sleep⬡ etc.
⇒ utilisation CPU optimale
![Page 19: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/19.jpg)
“Switch très rapide”
Thread (OS) :⬡ chargement d’un
contexte d’exécution entier
19
Goroutine (Go) :⬡ même contexte d’exécution
vu de l’OS⬡ changer le contexte (la
stack active) ⇔ changer un pointeur
![Page 20: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/20.jpg)
“Seulement 2ko / goroutine”
Thread (OS) :⬡ allocation d’une stack de
taille fixe (généralement 1 ou 2 Mo).
20
Goroutine (Go) :⬡ allocation d’une stack
elastique de seulement 2ko au départ.
⬡ la taille de la stack évolue dynamiquement.
![Page 21: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/21.jpg)
Les goroutines, c’est génial
⬡ Programmation concurrente simplifiée (voire intuitive).
⬡ Du non-blocking I/O gratuitement.
⬡ Une utilisation CPU optimisée
⇒ des perfs de ouf !21
![Page 22: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/22.jpg)
15000 users --- 0.5 request/s
Les goroutines en action !
22
![Page 23: Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR](https://reader031.fdocuments.fr/reader031/viewer/2022021923/5a6d01777f8b9a16428b4951/html5/thumbnails/23.jpg)
Merci
golang.org
github.com / ofux / deluge
23