Deluge : Les GoRoutines en action - Oliver Fuxet aux Quarter Backs SFEIR

Preview:

Citation preview

1

DELUGELes goroutines en action

Olivier Fuxet

fuxet.o@sfeir.com @fuxeto

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

Recommended