Nginx и веб-серверы apache

Этот вопрос не nginx vs apache. Меня больше интересуют архитектурные преимущества NGinx над Apache. Как я мог понять -

  • nginx - это асинхронный, управляемый событиями веб-сервер, который превосходит Apache с огромным запасом.

Почему это? Где Apache отстает?

Ответ 1

Нет единственной причины, по которой nginx строго "превосходит" Apache. Для многих шаблонов загрузки вы можете настроить Apache так, чтобы он обрабатывал эту нагрузку. Для некоторых (очень загруженных) нагрузок nginx в конфигурации по умолчанию может демонстрировать снижение производительности и может потребовать точной настройки для правильной работы.

Однако, опыт многих, что nginx действительно работает "лучше" из коробки или с простой настройкой. Производительность многих систем явно улучшилась, когда nginx был установлен в качестве интерфейсного устройства, а Apache перешел на задний план.

Основная причина заключается в том, что nginx управляется событиями и содержит конечный автомат, который обрабатывает жизненный цикл соединений. Таким образом, вы можете иметь очень мало "рабочих" процессов, каждый из которых управляет многими сотнями или даже тысячами подключений одновременно. Для Apache вам нужно будет запустить столько же дочерних процессов (или потоков), сколько количества подключений.

Очевидно, что три процесса против тысячи процессов должны быть огромной победой, по крайней мере.

В частности, nginx легко позволяет значительно снизить нагрузку на сервисные статические файлы (изображения, Javascript, CSS). Обработка каждого дополнительного соединения в nginx очень дешевая, так как статические файлы обычно составляют большинство по количеству запросов, вы получаете эффективную обработку.

Кроме того, производительность nginx лучше для "медленных клиентов". Когда у вас есть Apache, который смотрит прямо в Интернет, а клиенты отправляют запросы через (перегруженные) линии, вашему (быстрому) серверу придется терпеливо кормить (медленного) клиента, ожидая, пока он не поглотит весь ответ. Таким образом, ребенок (или поток) Apache не может ничего использовать. С другой стороны, рабочий Nginx просто сохраняет это медленное соединение в наборе дескрипторов epoll, все время обрабатывая другие соединения.

С концептуальной точки зрения вы всегда должны пытаться отделить "классы" запросов, с их собственным профилем производительности и требованиями. Например, обслуживание небольших статических файлов является одним из таких классов; работающие динамические страницы - еще один такой класс; обслуживание огромных статических файлов - еще одно. Введение nginx в вашу систему неявно обрабатывает это разделение.