23
1 DELUGE Les goroutines en action Olivier Fuxet [email protected] @fuxeto

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

  • Upload
    sfeir

  • View
    56

  • Download
    0

Embed Size (px)

Citation preview

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

1

DELUGELes goroutines en action

Olivier Fuxet

[email protected] @fuxeto

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

2

Pourquoi Deluge ?1

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

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

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

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

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

7

Sous le capot2

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

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

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

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

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

12

La puissance de Go3

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

Concurrent vs. parallèle

13

Concurrent :

Parallèle :

CPU

CPU

CPU

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

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

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

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

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

“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

“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

“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

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

15000 users --- 0.5 request/s

Les goroutines en action !

22

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

Merci

golang.org

github.com / ofux / deluge

23