deluge : les goroutines en action - oliver fuxet aux quarter backs sfeir
TRANSCRIPT
2
Pourquoi Deluge ?1
API first!
⬡ Pensé API dès le début…
⬡ ...et donc complètement automatisable.
⬡ Même la CLI utilise l’API.
3
Adapté au cloud (soon)
⬡ Dockerisé
⬡ Déployable partout avec Kubernetes, etc.
⬡ Répartition du travail sur différents noeuds.
4
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
Pour le fun !
⬡ Un projet open source.
⬡ Écrit en Go.
⬡ Un grand merci à Florian Orpeliere pour le front !
⬡ Front avec Vue.js
6
7
Sous le capot2
Exécution d’un scénario
8
compilation exécution
recording
fin
n fois
Simulation des utilisateurs concurrents
9
compilation
recording
exécution
n fois
fin
exécution
n fois
exécution
n fois
exécution
n fois
1000 users --- 0.5 request/s
On a rien senti…
10
⬡ 8 X86 64bit Cores⬡ 32GB memory⬡ 250GB Direct SSD
15000 users --- 0.5 request/s
Ca tape, mais on tient !
11
⬡ 8 X86 64bit Cores⬡ 32GB memory⬡ 250GB Direct SSD
12
La puissance de Go3
Concurrent vs. parallèle
13
Concurrent :
Parallèle :
CPU
CPU
CPU
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
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
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
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
“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
“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
“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.
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
15000 users --- 0.5 request/s
Les goroutines en action !
22
Merci
golang.org
github.com / ofux / deluge
23