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

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

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

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

Примечание: я не использовал Python Web Framework, я просто написал все с нуля.
Примечание: другие предложения также приветствуются.

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 создан для обработки большого количества соединений в гораздо меньшем пространстве памяти. Это делает его очень подходящим для приложений, которые выполняют кометоподобные соединения, которые могут иметь много открытых соединений в режиме ожидания. Это также дает ему меньший отпечаток памяти.

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

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

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

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

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

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

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

(конец бесстыдной заглушки)

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

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

Другие вопросы по тегам