#python #apache #nginx #mod-wsgi
Вопрос:
Что использовать для среднего или большого приложения python WSGI, Apache mod_wsgi или Nginx mod_wsgi?
Для какой комбинации потребуется больше памяти и процессорного времени?
Какой из них быстрее?
Который, как известно, более стабилен, чем другой?
Я также подумываю использовать сервер WSGI CherryPy, но я слышал, что он не очень подходит для приложений с очень высокой нагрузкой, что вы об этом знаете?
Примечание: Я не использовал веб-фреймворк Python, я просто написал все с нуля.
Примечание»: Другие предложения также приветствуются.
Ответ №1:
Для 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 обеспечит более предсказуемое и надежное поведение.
Комментарии:
1. не могли бы вы, пожалуйста, добавить некоторые свежие данные о новом mpm на основе событий Apache 2.4?
2. MPM на основе событий Apache сильно отличается от nginx. nginx полностью асинхронен. С MPM на основе событий в Apache асинхронность в основном используется только при обработке сокетов в режиме сохранения активности и некоторых других вещах, которые я не могу вспомнить. Даже при использовании MPM событий запросы по-прежнему передаются для обработки отдельными потоками из пула потоков, поэтому ресурсы по-прежнему ограничены. Из-за того, что сокеты keep alive теперь поддерживаются асинхронно, существует вероятность чрезмерной фиксации ресурсов, но есть средства для решения этой проблемы, и ситуация будет не такой плохой, как асинхронная. Во всяком случае, сейчас не могу вспомнить, как именно это работает.
3. Привет, мы можем использовать его сейчас?
4. Пользователь 3526, вероятно, имел в виду, что теперь, по прошествии нескольких лет с момента вашего поста в блоге, у nginx все еще есть эти «проблемы»?
5. Это не имеет никакого отношения к nginx конкретно, он работает так, как он работает. Идея встраивания блокирующего приложения WSGI в процессы nginx была плохой. Это не изменилось. Насколько я знаю, этот клон mod_wsgi для nginx умер давным-давно.
Ответ №2:
Автор nginx mod_wsgi объясняет некоторые отличия от Apache mod_wsgi в этом сообщении списка рассылки.
Ответ №3:
Основное отличие состоит в том, что nginx построен для обработки большого количества соединений в гораздо меньшем объеме памяти. Это делает его очень хорошо подходящим для приложений, которые выполняют кометоподобные соединения, которые могут иметь много незанятых открытых соединений. Это также дает ему довольно меньший отпечаток ноги в памяти.
С точки зрения производительности nginx быстрее, но не настолько, чтобы я включил это в качестве определяющего фактора.
Apache имеет преимущество в области доступных модулей и в том, что он в значительной степени стандартен. На любом веб-хостинге, с которым вы работаете, он будет установлен, и большинство специалистов будут с ним хорошо знакомы.
Кроме того, если вы используете mod_wsgi, это ваш сервер wsgi, поэтому вам даже не нужен cherrypy.
Кроме этого, лучший совет, который я могу дать, — это попробовать настроить свое приложение под обоими и провести сравнительный анализ, поскольку, что бы вам ни говорили, ваш пробег может отличаться.
Ответ №4:
Одна из особенностей веб-сервера CherryPy заключается в том, что это чистый веб-сервер python (AFAIK), который может упростить или не упростить развертывание для вас. Кроме того, я мог бы увидеть преимущества его использования, если вы просто используете сервер для WSGI и статического контента.
(предупреждение о бесстыдном плагине: я написал код WSGI, о котором собираюсь упомянуть)
Камаэлия получит поддержку WSGI в следующем выпуске. Самое интересное, что вы, скорее всего, сможете либо использовать готовый, либо создать свой собственный, используя существующий код HTTP и WSGI.
(конец бесстыдной пробки)
С учетом сказанного, учитывая текущие параметры, я бы лично, вероятно, выбрал CherryPy, потому что он кажется самым простым в настройке, и я могу понять код на python лучше, чем я могу понять код на Си.
Возможно, вам лучше всего попробовать каждый из них и посмотреть, каковы плюсы и минусы каждого из них для вашего конкретного приложения.