W produkcji Apache + Mod wsgi czy Nginx + Mod wsgi?

Czego używać do średnich i dużych aplikacji WSGI Pythona, Apache + mod_wsgi lub Nginx + mod_wsgi?

Które połączenie będzie wymagało więcej pamięci i czasu procesora?
Który jest szybszy?
Który jest znany z tego, że jest bardziej stabilny niż inne?

Zastanawiam się też nad użyciem serwera WSGI CherryPy, ale słyszałem, że nie nadaje się do bardzo obciążonej aplikacji, co Ty o tym wiesz?

uwaga: nie używałem żadnego frameworka internetowego Pythona, po prostu napisałam wszystko od podstaw.
uwaga': inne sugestie są również mile widziane.

Author: Graham Dumpleton, 2008-10-12

4 answers

Dla nginx / mod_wsgi, upewnij się, że czytasz:

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

Ze względu na to, jak nginx jest systemem opartym na zdarzeniach, ma cechy behawioralne, które są szkodliwe dla blokowania aplikacji, takich jak w przypadku aplikacji opartych na WSGI. Gorszym scenariuszem jest to, że z wieloprocesową konfiguracją nginx można zobaczyć blokowanie żądań użytkowników, nawet jeśli niektóre procesy robocze nginx mogą być bezczynność. Apache / mod_wsgi nie ma tego problemu, ponieważ procesy Apache będą akceptować żądania tylko wtedy, gdy mają zasoby, aby faktycznie obsłużyć żądanie. Apache / mod_wsgi da więc bardziej przewidywalne i niezawodne zachowanie.

 71
Author: Graham Dumpleton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-24 12:26:01

Autor nginx mod_wsgi wyjaśnia pewne różnice w stosunku do Apache mod_wsgi w tej wiadomości listy dyskusyjnej .

 16
Author: akaihola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-03 13:04:18

Główna różnica polega na tym, że nginx jest zbudowany do obsługi dużej liczby połączeń w znacznie mniejszej przestrzeni pamięci. To sprawia, że bardzo dobrze nadaje się do aplikacji, które robią comet jak połączenia, które mogą mieć wiele bezczynnych otwartych połączeń. Daje to również dość mniejszy odcisk stopy pamięci.

Z perspektywy surowej wydajności, nginx jest szybszy, ale nie tak dużo szybciej, że uwzględniłbym to jako czynnik decydujący.

Apache ma przewagę w obszarze modułów dostępne, a fakt, że jest to prawie standard. Każdy host, z którym pójdziesz, będzie miał go zainstalowany, a większość techników będzie z nim dobrze zaznajomiona.

Ponadto, jeśli używasz mod_wsgi, jest to twój serwer wsgi, więc nawet nie potrzebujesz cherrypy.

Poza tym, najlepsza rada mogę dać jest spróbować skonfigurować aplikację pod obu i zrobić kilka benchmarking, ponieważ bez względu na to, co ktoś mówi, przebieg może się różnić.

 13
Author: Chuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-07 09:02:51

Jedną z zalet serwera CherryPy jest to, że jest to czysty serwer WWW w Pythonie (AFAIK), który może, ale nie musi, ułatwić wdrożenie. Plus, widzę korzyści z używania go, jeśli używasz tylko serwera do WSGI i treści statycznych.

(shameless plug warning: I wrote the WSGI code that I ' m about to mention)

Kamaelia będzie miała wsparcie WSGI już w następnym wydaniu. Fajne jest to, że prawdopodobnie będziesz w stanie albo użyć pre-made one lub zbuduj swój własny przy użyciu istniejącego kodu HTTP i WSGI.

(końcówka)

Mając to na uwadze, biorąc pod uwagę obecne opcje, osobiście wybrałbym CherryPy, ponieważ wydaje się być najprostszy w konfiguracji i mogę zrozumieć kod Pythona bardziej niż mogę zrozumieć kod C.

Możesz zrobić najlepiej, aby wypróbować każdy z nich i zobaczyć, jakie są plusy i minusy każdego z nich dla konkretnej aplikacji.

 7
Author: Jason Baker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-12 20:52:17