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