Почему Nginx намного быстрее, чем Apache в этой среде?
У нас есть веб-приложение с Java-бэкендом и внешним сервером tomcat. Перед котом стоит апач. Оба они на одном хосте. Бэкэнд находится на другом хосте. Веб-браузеры взаимодействуют с 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 для этого типа запросов.
Благодарю.
1 ответ
Это из-за различий в архитектуре. Nginx - это легкий асинхронный (неблокирующий) прокси. Apache - полнофункциональный веб-сервер.
В то время как apache должен проверять и читать дополнительные файлы (.htaccess) по каждому запросу, выполнять все фильтры и обработчики (переписывать и т. Д.), Nginx просто передает байты между клиентом и сервером (возможно, изменяя заголовки)