Почему Nginx намного быстрее, чем Apache в этой среде?

У нас есть веб-приложение с бэкэндом java и внешним сервером Tomcat. Перед котом стоит Apache. Оба они находятся на одном хосте. Бэкэнд находится на другом хосте. Веб-браузеры взаимодействуют с Apache / Tomcat с помощью вызовов Rest. Клиентское приложение использует много параллельных вызовов API.

Пока мы проводим тест производительности на Apache с использованием большого числа параллельных TCP-соединений (~ 300), браузеры не могут / очень медленно загружать клиентское js-приложение.

Мы пробовали много настроек prefork / worker / maxclients. Ни один из них не помог.

После того, как мы временно заменили Apache на Nginx, эта проблема была мгновенно решена. Бэкэнд находится на другом хосте. Веб-браузеры взаимодействуют с Apache / Tomcat с помощью вызовов Rest. Клиентское приложение использует много параллельных вызовов API.

Пока мы проводим тест производительности на Apache с использованием большого числа параллельных TCP-соединений (~ 300), браузеры не могут / очень медленно загружать клиентское js-приложение.

Мы пробовали много настроек prefork / worker / maxclients. Ни один из них не помог.

После того, как мы временно заменили Apache на Nginx, эта проблема была мгновенно решена. Бэкэнд находится на другом хосте. Веб-браузеры взаимодействуют с Apache / Tomcat с помощью вызовов Rest. Клиентское приложение использует много параллельных вызовов API.

Пока мы проводим тест производительности на Apache с использованием большого числа параллельных TCP-соединений (~ 300), браузеры не могут / очень медленно загружать клиентское js-приложение.

Мы пробовали много настроек prefork / worker / maxclients. Ни один из них не помог.

После того, как мы временно заменили Apache на Nginx, эта проблема была мгновенно решена. Nginx кажется хорошей альтернативой, но Apache в этой среде будет лучше. Кто-нибудь знает, в чем разница?

ЦП / память / сеть не могут быть узким местом.

Интересно, что jmeter дает такой ответ на множество запросов: Код ответа не HTTP: java.net.SocketTimeoutException Код ответа, отличный от HTTP: javax.net.ssl.SSLHandshakeException. Конечно, для этого типа запросов много 200.

Спасибо.

0
задан 18 August 2018 в 15:36
1 ответ

Это из-за различий в архитектуре. Nginx - это легкий асинхронный (неблокирующий) прокси. Apache - это полнофункциональный веб-сервер.

Хотя apache должен проверять и читать дополнительные файлы (.htaccess) по каждому запросу, выполнять все фильтры и обработчики (перезаписывать и т. Д.), Nginx просто передает байты между клиентом и сервером (при необходимости изменяя заголовки)

2
ответ дан 4 December 2019 в 13:24

Теги

Похожие вопросы