В производстве Apache + mod_wsgi или Nginx + mod_wsgi?
Вопрос
Что использовать для WSGI-приложений среднего и большого размера, Apache + mod_wsgi или Nginx + mod_wsgi?
Какая комбинация потребует больше памяти и процессорного времени?
Какой из них быстрее?
Который известен как более стабильный, чем другие?
Я также собираюсь использовать WSGI-сервер CherryPy, но слышу, что он не очень подходит для приложений с очень высокой нагрузкой. Что вы об этом знаете?
Примечание . Я не использовал веб-платформу Python, я просто написал все с нуля.
Примечание. . Другие предложения также приветствуются.
Решение
Для 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.
Вы можете сделать все возможное, чтобы опробовать каждый из них и посмотреть, какие плюсы и минусы у каждого из них для вашего конкретного приложения.