Преимущества использования NGINX

16

Рассматривая использование NGINX для обслуживания magento, я не беспокоюсь о деталях реализации, но хочу знать, есть ли у кого-то хорошие (или плохие) вещи, чтобы сказать об этом. Также особый интерес представляет использование NGINX для балансировки нагрузки magento.

Джонатан Боундс
источник
у нас есть 2 магазина, работающих на выделенном сервере с NginX. Для магазинов с высоким трафиком, безусловно, есть преимущество, поскольку NginX просто лучше обрабатывает запросы и оставляет больше ресурсов для Magento. Для магазинов с низким трафиком я не уверен, что есть какая-то выгода
Сандер Мангель

Ответы:

15

Nginx, безусловно, является хорошим выбором для хостинга Magento, и он имеет ряд приятных (но небольших) преимуществ, которые могут помочь повысить производительность сайта.

Основное различие между Nginx и Apache заключается в том, что Nginx использует неблокирующий Evented IO, а Apache просто использует многопоточность / обработку. В чем разница и почему это важно? Хорошо, в случае с Apache, скажем, он имеет 5 потоков, он может обрабатывать 5 запросов на что-либо в любой момент времени. Если один из этих потоков занимает много времени, остается только 4 потока для обработки любых дальнейших входящих запросов. Если все 5 потоков заблокированы, то никакие входящие запросы не могут быть обработаны, пока один из них не завершится.

С Evented IO, когда поток получает запрос на что-то, он запускает событие и сразу переходит к следующему запросу. Когда событие перезванивает, оно передает ответ соответствующему клиенту.

Это примерно похоже на то, как работает асинхронный JavaScript. Вы запускаете запрос AJAX и продолжаете, пока не получите обратный вызов.

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

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

Различия невелики, но по мере того, как вы масштабируете многие тысячи запросов, эти небольшие различия в совокупности имеют большое значение.

Теперь важно помнить, что самым большим узким местом производительности в приложении Magento является выполнение кода PHP. Здесь есть в основном незначительная разница в производительности между Apache и Nginx. Важно использовать PHP-FPM и рабочий MPM с Apache (и, безусловно, избегать prefork / mod-php). Основная причина заключается в том, что вы вызываете интерпретатор PHP только тогда, когда вам нужно выполнить код PHP, и вы можете эффективно использовать программное обеспечение для кэширования кода операции, такое как APC (и это единственный самый большой прирост производительности, который вы получите).

Последнее замечание: некоторые модули / приложения ожидают, что Apache будет использоваться, и документация может быть ориентирована на использование ModRewrite или использование файлов .htaccess. Хотя в Nginx есть поддержка стилей ModRewrite, поддержка стилевых решений для каждого каталога не поддерживается.

Лично мне нравится Nginx, потому что он эффективно обслуживает статический контент, очень легко настроить PHP-FPM и мне очень нравится его синтаксис конфигурации. Это не волшебное решение проблем с производительностью, но надежный и гибкий вариант для рассмотрения.

Аарон Боннер
источник
1
Отличный ответ, подкрепленный выводами Magento, Inc.: magentocommerce.com/whitepaper
отметки
Да, я согласен с Aaron на 100%. Мы также используем Nginx для большинства наших развертываний Magento из-за его способности быстрее обслуживать статический контент и обрабатывать большее количество одновременных запросов по сравнению с Apache. Единственный недостаток, с которым мы столкнулись с Nginx, - это один из наших проектов, он случайным образом выдает ошибку тайм-аута 504 шлюза (даже когда нагрузки на сервер довольно низкие). Мы еще не дошли до этого ... большинство решений, описанных на различных форумах, мало чем помогли.
Винчи Руфус
1

Я бы сказал, что выигрыш в производительности Nginx при использовании Magento невелик. Преимущество ввода-вывода, основанное на событиях, как упомянуто Аароном, также применимо к Apache (при использовании события MPM).

Если говорить о Magento в целом, то большая часть обработки (99%) происходит в PHP и в базе данных, поэтому оптимизация первых 1% даст вам сравнительно небольшую выгоду.

Однако есть и другие причины выбрать Nginx для Magento, такие как меньший объем памяти, лучший предел скорости и поддержка SPDY.

Nginx имеет большой недостаток при преобразовании существующих сайтов Magento, работающих на Apache, поскольку многие операторы .htaccess не отображаются непосредственно на операторы Nginx. Например, Nginx не поддерживает имена хостов в ACL.

Willem
источник