Les serveurs WSGI : concurrence, parallélisme, thread, greenlet

Pourquoi ?

  • Investigations perfs EstimaAPI
  • Restitution de la connaîssance
  • Premier épisode

Des questionnements

C'est quoi un serveur performant ?

  • Qui répond rapidement ?
  • Qui encaisse beaucoup de connexions ?
  • Un peu des deux ?

Juste en changeant de serveur ?

(Vive l'auto-magie, les bisounours et le pouvoir de l'arc-en-ciel !)*

WSGI ?

Autopsie d'un server web

Worker

Master

Pre-forked worker

web server

CPU

Core 1

Core 2

Core 4

Core 3

Core 5

Core 6

Core 8

Core 7

Optimisations

Worker

Master

web server

Les threads

Worker

Master

web server

thread 1

thread 2

thread 3

Waitress

Les workers

Workers

Master

web server

Waitress

C'est toujours pas le paradis...

  • On utilise tous les coeurs, mais mal

Workers + threads

Workers

Master

web server

Waitress

Beaucoup mieux

  • Ça marche !!
  • perfs x9 🎉
  • Mais il y a un gros soucis ...

Workers + threads

Workers

Master

web server

Waitress

Et pour aller plus loin ?

Asynchrone

Sur le papier

  • Identique aux threads
  • Super léger
  • Des milliers de threads par process
  • Meilleure utilisation CPU
  • 1 seul process

IOLoop

Greenlets

Délègue l'attente au système d'exploitation

Notifie qu' un resultat est disponible

Waitress

Des bonnes perfs mais ...

  • Très intrusif dans le code
  • Compliqué en Python
  • Écosystème multiparadygme
  • Catastrophique lorsque l'ioloop est bloquée
  • Adapte du code synchrone pour le rendre asynchrone
  • Des très bonnes performances sans effort
  • Monkey patch la lib standard
  • Impossible de patcher requests

Bjoern

FastWSGI

  • Adapté à un usage avec Kubernetes
  • Écrit en C
  • - de 1000 lignes
  • Emprunte mémoire minimale
  • Kube en gestionnaire de process

Conclusions

Le goulot d'étranglement, c'est forcement votre application

Attention aux benchmarks

Bien choisir sa stratégie

Pas beaucoup de trafic ?

Worker

Master

web server

Que du CPu ?

Workers

Master

web server

un peu d'io mais peu de trafic ?

Worker

Master

web server

thread 1

thread 2

thread 3

De l'io avec du trafic ?

Que de l'io ?

À quoi sert votre application ?

Envoyez-moi plein d'amour sur Slack !

The end ...

LES SERVEURS WSGI : CONCURRENCE, PARALLÉLISME, THREAD, GREENLET

By Romain Commandé

LES SERVEURS WSGI : CONCURRENCE, PARALLÉLISME, THREAD, GREENLET

  • 364