web-dev-qa-db-fra.com

En production, Apache + mod_wsgi ou Nginx + mod_wsgi?

Que faut-il utiliser pour un moyen à grand python WSGI, Apache + mod_wsgi ou Nginx + mod_wsgi?

Quelle combinaison aura besoin de plus de mémoire et de temps processeur?
Lequel est le plus rapide?
Lequel est connu pour être plus stable que l'autre?

Je pense également utiliser le serveur WSGI de CherryPy mais j'entends qu'il n'est pas très approprié pour une application à très forte charge, qu'en savez-vous?

Remarque : Je n'ai utilisé aucun Python Web Framework, je viens d'écrire le tout à partir de zéro.
Remarque ': D'autres suggestions sont également les bienvenues.

62
user11617

Pour nginx/mod_wsgi, assurez-vous de lire:

http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html

En raison de la façon dont nginx est un système piloté par événements en dessous, il a des caractéristiques comportementales qui sont préjudiciables au blocage des applications comme c'est le cas avec les applications basées sur WSGI. Dans le pire des cas, avec la configuration multiprocessus nginx, vous pouvez voir les demandes des utilisateurs bloquées même si certains processus de travail nginx peuvent être inactifs. Apache/mod_wsgi n'a pas ce problème car les processus Apache n'accepteront les demandes que s'ils ont les ressources pour gérer réellement la demande. Apache/mod_wsgi donnera ainsi un comportement plus prévisible et fiable.

74
Graham Dumpleton

L'auteur de nginx mod_wsgi explique quelques différences avec Apache mod_wsgi dans ce message de liste de diffusion .

16
akaihola

La principale différence est que nginx est conçu pour gérer un grand nombre de connexions dans un espace mémoire beaucoup plus petit. Cela le rend très bien adapté aux applications qui font des connexions de type comète qui peuvent avoir de nombreuses connexions ouvertes inactives. Cela lui donne également une empreinte mémoire beaucoup plus petite.

Du point de vue des performances brutes, nginx est plus rapide, mais pas tellement plus rapidement que j'inclurais cela comme facteur déterminant.

Apache a l'avantage dans le domaine des modules disponibles, et le fait qu'il soit à peu près standard. Tout hébergeur avec lequel vous allez le faire installer, et la plupart des techniciens le connaissent très bien.

De plus, si vous utilisez mod_wsgi, c'est votre serveur wsgi donc vous n'avez même pas besoin de cherrypy.

En dehors de cela, le meilleur conseil que je puisse donner est d'essayer de configurer votre application sous les deux et de faire des analyses comparatives, car peu importe ce que l'on vous dit, votre kilométrage peut varier.

13
Chuck

Une chose que le serveur Web de CherryPy a pour elle est que c'est un pur python serveur Web (AFAIK), ce qui peut ou non faciliter le déploiement pour vous. De plus, je pouvais voir les avantages de l'utiliser si vous utilisez simplement un serveur pour WSGI et du contenu statique.

(avertissement de plug sans vergogne: j'ai écrit le code WSGI que je suis sur le point de mentionner)

Kamaelia aura le support WSGI à venir dans la prochaine version. Ce qui est cool, c'est que vous pourrez probablement utiliser celui prédéfini ou créer le vôtre en utilisant le code HTTP et WSGI existant.

(bouchon sans vergogne)

Cela dit, compte tenu des options actuelles, j'irais probablement personnellement avec CherryPy car il semble être le plus simple à configurer et je peux comprendre python code plus que je ne peux comprendre le code C.

Vous pouvez faire de leur mieux pour essayer chacun d'eux et voir quels sont les avantages et les inconvénients de chacun pour votre application spécifique.

7
Jason Baker