В производстве Apache + mod wsgi или Nginx + mod wsgi?

Что использовать для среднего и большого приложения python WSGI, Apache + mod_wsgi или Nginx + mod_wsgi?

Какая комбинация потребует больше памяти и времени процессора?
Какой из них быстрее?
Который известен тем, что более стабилен, чем другой?

Я также думаю использовать WSGI-сервер CherryPy, но я слышал, что он не очень подходит для очень высоконагруженного приложения, что вы знаете об этом?

Примечание: я не используйте любую веб-структуру Python, я просто написал все это с нуля.
Примечание': другие предложения также приветствуются.

4 ответов


для nginx/mod_wsgi, убедитесь, что вы прочитали:

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

из-за того, как nginx является системой, управляемой событиями, она имеет поведенческие характеристики, которые наносят ущерб блокированию приложений, таких как приложения на основе WSGI. Худший сценарий заключается в том, что с конфигурацией multiprocess nginx вы можете видеть, что запросы пользователей блокируются, даже если некоторые работники nginx процессы могут простаивать. Apache / mod_wsgi не имеет этой проблемы, поскольку процессы Apache будут принимать запросы только тогда, когда у него есть ресурсы для фактической обработки запроса. Apache / mod_wsgi, таким образом, даст более предсказуемое и надежное поведение.


автор nginx mod_wsgi объясняет некоторые различия в Apache mod_wsgi в этом сообщении списка рассылки.


основное отличие заключается в том, что nginx построен для обработки большого количества соединений в гораздо меньшем объеме памяти. Это делает его очень хорошо подходит для приложений, которые делают кометы, как соединения, которые могут иметь много простоя открытых соединений. Это также дает ему довольно меньший отпечаток ноги памяти.

с точки зрения сырой производительности nginx быстрее, но не настолько быстрее, чтобы я включил это в качестве определяющего фактора.

Apache имеет преимущество в этом районе из доступных модулей и тот факт, что он в значительной степени стандартный. Любой веб-хост, с которым вы идете, будет установлен, и большинство техников будут очень хорошо знакомы с ним.

кроме того, если вы используете mod_wsgi, это ваш сервер wsgi, поэтому вам даже не нужен cherrypy.

кроме этого, лучший совет, который я могу дать, - это попробовать настроить приложение под обоими и сделать некоторые бенчмаркинг, так как независимо от того, что вам говорят, ваш пробег может отличаться.


одна вещь, которую веб-сервер CherryPy имеет для этого, заключается в том, что это чистый веб-сервер python (AFAIK), который может или не может упростить развертывание для вас. Кроме того, я мог бы увидеть преимущества его использования, если вы просто используете сервер для WSGI и статического контента.

(бесстыдный плагин предупреждение: я написал код WSGI, который я собираюсь упомянуть)

Kamaelia будет иметь поддержку WSGI в следующем выпуске. Самое классное, что вы, вероятно, сможете либо используйте готовый, либо создайте свой собственный, используя существующий код HTTP и WSGI.

(конец бессовестной штекер)

с учетом сказанного, учитывая текущие параметры, я лично, вероятно, пойду с CherryPy, потому что это кажется самым простым в настройке, и я могу понять код python больше, чем я могу понять код C.

вы можете попробовать каждый из них и посмотреть, какие плюсы и минусы каждого из них для вашего конкретного приложения, хотя.