web-dev-qa-db-fra.com

WSGI vs uWSGi avec Nginx

Quelqu'un pourrait-il expliquer le pour/le contre lors de l'utilisation de WSGI VS WSGI avec Nginx.

Actuellement, je suis en train de créer un serveur de production pour le site Web Django que j'ai préparé mais incapable de décider si je dois utiliser WSGI ou uWSGI. Pourriez-vous expliquer en détail ce qui différencie chaque configuration? la configuration devrait-elle évoluer au mieux?

Merci d'avance

74
fear_matrix

Ok, les gars, cette confusion est due au manque de détails de plusieurs sources, au nom de ces protocoles et à ce que WSGI est réellement.

Sommaire:

  1. WSGI et uwsgi SONT tous les deux des protocoles , pas des serveurs. Il est utilisé pour communiquer avec les serveurs Web pour l'équilibrage de charge et surtout pour profiter des fonctionnalités supplémentaires que le HTTP pur ne peut pas fournir. Jusqu'à présent, Nginx et Cherokee ont mis en œuvre ce protocole.
  2. uWSGI est un serveur et l'un des protocoles qu'il implémente est WSGI (ne confondez pas le protocole uwsgi avec le serveur uWSGI). WSGI est un Python spécification . Il existe plusieurs implémentations de la spécification WSGI et il est destiné à être utilisé pour plus que des serveurs d'applications/serveurs Web, mais il existe quelques serveurs d'applications WSGI (c.-à-d. CherryPy, qui se trouve également avoir un serveur Web compatible WSGI prêt pour la production, si vous n'étiez pas déjà assez confus!).
  3. Comparer uwsgi à WSGI, c'est comparer des oranges à des pommes.
90
Derek Litz

Il est généralement préférable d'exécuter Python dans un processus distinct de votre serveur Web principal. De cette façon, le serveur Web peut avoir beaucoup de petits threads qui servent du contenu statique très rapidement, tandis que vos processus Python séparés seront gros et lourds et chacun exécutera leur propre interpréteur Python. Donc, plain WSGI est mauvais, car il gonfle chacun de vos threads nginx avec un gros interpréteur Python. Utiliser flup ou gunicorn ou uWSGI derrière nginx est beaucoup mieux, car cela libère nginx pour simplement servir le contenu et vous permet de choisir le nombre de petites lumières les threads nginx à exécuter, indépendamment de votre choix du nombre de threads Python lourds que vous créez pour diffuser du contenu dynamique. Les gens semblent très satisfaits de gunicorn pour le moment, mais l'une de ces trois options devrait fonctionner correctement.

À l'avenir, cela vous libère également pour déplacer le Python vers un autre serveur lorsque la charge commence à devenir sérieuse.

29
Brandon Rhodes

Je crois que c'est ici http://flask.pocoo.org/docs/deploying/uwsgi/ est une bonne réponse pour dissiper la confusion. La question n'est pas idiote, arrive à toute personne qui voit les deux termes et n'a aucune information préalable sur la façon dont les choses fonctionnent en dehors du monde mod_PHP (par exemple, rien contre php ou les gens)

Le site fait bien d'expliquer en termes pratiques ce qui est nécessaire et quelle est la différence ainsi qu'un bon exemple de déploiement pour nginx.

15
Abhishek Dujari

Ce billet de blog est une comparaison très détaillée de beaucoup de serveurs Python WSGI), avec un résumé et quelques recommandations à la fin.

2
Lowe Thiderman