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