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