У меня есть новый сервер для игры, и я смотрю на пустой холст. Я могу положить все, что захочу. Хотя я доволен Apache, я продолжаю слышать, как nginx может обрабатывать намного больше трафика, чем Apache, в 10, 100 и даже больше раз. Мало того, что это "намного намного быстрее".
Когда я ищу статьи, я могу найти много вещей, не связанных с Drupal. Или, когда я сталкиваюсь со статьей, связанной с Drupal, это либо 1) чей-то конфигурационный файл с быстрой попыткой объяснить, как его настроить, либо 2) кто-то говорит «нет, не используйте nginx, переходите на Apache с PHP fcgid ", но никогда не бывает объяснений, почему.
Итак, когда дело доходит до Drupal, какова здесь реальность?
В качестве примера, я ищу что-то похожее на эту статью 2bits.com . Здесь автор довольно подробно рассмотрел Apache mod_php против Apache с помощью fcgid, взвесив все за и против каждого из них, и предоставил пример для иллюстрации воздействия в реальном мире. В этой статье достаточно информации, чтобы я мог принять обоснованное решение о том, какой подход лучше всего подходит для моей ситуации.
Хотя этот автор сравнивает mod_php с fcgid, я ищу тот же тип всестороннего реального взгляда на Apache vs Nginx.
Кто-нибудь переключился на Nginx и был «поражен» различием, которое он сделал по сравнению с Apache? Даже для высокооптимизированных сред, в которых уже используются APC, Memcache и агрессивное кэширование, например, Varnish, когда единственная изменяемая переменная - это замена Apache на Nginx, она сама по себе достаточно для того, чтобы вложить средства в эту более новую альтернативную технологию. ?
Сайт, который будет работать на этом сервере, получает в среднем 2 миллиона PV в месяц. Стек LAMP под управлением Cent OS 6. 4-ядерный процессор с 8 ГБ оперативной памяти. Memcached и APC будут частью микса. Ничего особенного в установке Drupal - в основном vanilla 7 с около 50 модулями.
источник
Ответы:
Строго говоря, это не отвечает на вопрос, который вы задаете. Я надеюсь, что это все равно полезно.
Apache / Nginx / Lighttpd / другой веб-сервер. Имеет ли значение, какой я выберу? Короче нет .
Гораздо более длинный ответ:
Если и только если, у вас очень большой процент пользователей, вошедших в систему, если вы вообще заботитесь о производительности вашего веб-сервера. Если ваши пользователи являются анонимными, любое различие, которое вы теоретически можете получить из оптимизации абсолютных значений на этих слоях, по сравнению с улучшением кэширования ваших ресурсов. Если ваши CSS-файлы имеют надлежащие заголовки кэша, UA даже не будет запрашивать их во второй раз. Это важно Если вы можете кэшировать свои страницы в Varnish или аналогичном программном решении, то для обслуживания этой страницы нужно выполнить поиск по хешу, а затем вернуть большой кусок данных непосредственно из ОЗУ. Это важно В обоих этих сценариях демон HTTP даже не задействован, PHP не вызывается. Drupal не запускается. В ОЗУ не нужно загружать большой набор модулей, не требуются длительные запросы к базе данных.
Когда вы выполняете полную загрузку страницы из холодного кэша для зарегистрированного пользователя на сложной странице; много чего происходит. Да, веб-сервер занимается обработкой входящего запроса, установкой некоторых заголовков и передачей ответа обратно. Но время, которое требуется, даже не имеет значения в контексте Drupal, запускающего полную загрузку и выводящего его ответ. Могут выполняться сотни запросов к базе данных. Очень сложная логика в PHP оценивается парсером. Многие модули загружаются в оперативную память. Улучшение производительности любой из этих вещей, гораздо более вероятно, внесет серьезный вклад в производительность.
Ради аргумента: допустим, вы потратили много времени на оптимизацию всего остального.
Если у вас много пользователей, вошедших в систему, и вы справились со всем вышеперечисленным, то вы, вероятно, можете изменить ситуацию, но не настройте производительность или не замените веб-сервер. Однако угадайте, что. Ваш сайт настолько сложен, и модели использования ваших конкретных пользователей уникальны . Там нет общего ответа. Вам нужно будет настроить все различные веб-серверы за балансировщиком нагрузки и посмотреть, как они ведут себя в соответствии с вашим сценарием .
Вышесказанное было попыткой логически прийти к выводу, что тратить время на оптимизацию производительности веб-сервера, скорее всего, нецелесообразно. Я хотел бы, чтобы кто-то выбрал дыры в вышеперечисленном, хотя, возможно, я бы узнал что-то новое из этого. :)
Некоторые другие заметки:
$ wc -l $(find . -type f | grep -v "^\.git" | grep -v "^\.hphp/third_party") | sort -nr | head -n1
и обнаружил, что он состоит из 1,512,481 строк кода. Это абсолютно безумный объем работы по улучшению скорости PHP. Я предполагаю, что это потому, что скорость PHP очень важна для них.источник
Хорошо, хотя на этот вопрос уже дан ответ, я еще раз некромантирую, прежде всего потому, что мне не нравятся последствия этих ответов, потому что они не имеют значения, и потому что как веб-разработчик я ненавижу кэширование со страстью ,
Разница между Apache и nginx заключается не в том, «насколько быстро они могут обслуживать запрос», а в том, сколько запросов они могут обслуживать на одном и том же количестве оборудования (особенно при ограниченных ресурсах), что несколько иное.
Apache - это сервер на основе процессов. Это означает, что процесс разветвляется на каждый запрос. Nginx - это сервер, основанный на событиях, то есть он использует (асинхронный) цикл событий вместо процессов или потоков.
И хотя сервер на основе процессов (например, Apache) может работать более или менее наравне с асинхронным сервером на основе событий (например, nginx) при небольших нагрузках, при более высоких нагрузках, например, например, 10 10000 одновременных запросов, nginx использует только несколько мегабайт оперативной памяти, в то время как Apache требуется несколько сотен мегабайт только для веб-сервера (не включая веб-приложение, которое нуждается в гораздо большем количестве ресурсов), если оно вообще может это сделать.
Таким образом, при более высоких нагрузках вы увидите, что Apache потребляет слишком много оперативной памяти, что неудивительно значительно снижает производительность.
Что еще более важно, более высокое потребление ОЗУ означает, что Apache способен обслуживать меньше запросов на том же оборудовании, чем nginx, что означает, что Apache требует больше оборудования для того же количества пользователей, что означает, что у вас более высокая совокупная стоимость владения (общая стоимость владения) с Apache, чем с nginx, что снижает рентабельность инвестиций (возврат инвестиций).
Общий объем памяти, используемый X одновременными подключениями (чем меньше, тем лучше)
Запросы, которые можно обслуживать в секунду при одновременных подключениях X на 1 наборе оборудования (чем больше, тем лучше)
Источник: ApacheBench, автор dreamhost.com
Смотрите также это цифровое океанское издание.
Очевидно, это зависит от архитектуры обработки соединений, которую вы выбираете для Apache.
источник
Я перешел с Apache на Nginx / PHP-FPM несколько месяцев назад.
Я сделал несколько тестов на сайте drupal и протестировал несколько вариантов использования. На VPS-сервере с 1 ЦП и 512 МО оперативной памяти
Друпал только с кешем
Nginx
апаш
Друпал с кешем и бустом
Nginx
апаш
тест для аутентифицированного пользователя (загрузка страницы)
Nginx
апаш
Но сила Nginx в системе кеша
Drupal без Boost и Nginx с включенной кеш-системой
Вы должны использовать конфигурацию Perginio Nginx для Drupal
источник
Вот тест производительности для десяти веб-серверов / вариантов (например, Apache, Nginx, lighttpd, Lightspeed, Hiawatha, Cherokee). Три из тестов относятся к Drupal.
Я думаю, что Hiawatha может быть лучшим выбором. Предполагается, что он полностью совместим с Drupal , уделяет особое внимание безопасности (DoS, XSS, CSRF, предотвращение SQL-инъекций) и скорости и занимаемой площади, аналогичной Nginx.
В двух из трех тестов Drupal и Hiawatha, и Nginx превосходят Apache примерно на 150%, но в статическом тесте Drupal Apache незначительно превосходит Nginx, тогда как Hiawatha превосходит пакет примерно на 10%.
Я бы не повесил шляпу ни на один из этих тестов, но он дает приблизительное представление о производительности в различных ситуациях использования. Я думаю, что только производительность не должна быть единственным соображением. Стабильность и безопасность могут быть более важными факторами.
источник
Вот результаты нагрузочного тестирования для drupal, работающего на том же оборудовании, но на разных веб-серверах. (nginx и apache)
вот заключение этого теста:
источник