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
- 601