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


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

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

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

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

4 60

4 ответа:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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