Подача статического контента на веб-сервер, а динамического контента в tomcat - это все еще хорошая практика производительности?
В старых версиях tomcat (например, 3.2) вы можете найти рекомендации по обслуживанию статического содержимого на веб-сервере apache и оставить динамический контент самому tomcat. В новых версиях документации tomcat вы не найдете ссылок на эту практику даже в учебнике по настройке mod_jk. Вот мне и интересно.
Правда ли, что tomcat недостаточно хорош для обслуживания статического контента? Если я изменю свою схему развертывания для разделения статического и динамического контента, у меня будет улучшение производительности?
3 ответа
Что касается чистой скорости, я предлагаю прочитать Миф или правду: всегда нужно использовать Apache httpd перед Apache Tomcat для повышения производительности? Сообщение блога. Позвольте мне процитировать это частично:
Короткий ответ: это миф. Более длинный ответ заключается в том, что во времена Tomcat 3 в этом была некоторая доля правды в зависимости от обстоятельств. Однако для используемых сегодня версий Tomcat (5.5.x и 6.0.x) нет необходимости использовать httpd исключительно из соображений производительности. Tomcat теперь поддерживает собственный /APR-коннектор, который использует ту же собственную библиотеку (Apache Portable Runtime-APR), что и httpd для низкоуровневого ввода-вывода, и, следовательно, может достичь производительности, аналогичной httpd. При обслуживании статического контента при использовании Tomcat издержки немного выше, чем при использовании httpd, но различия настолько малы, что вряд ли будут заметны в производственных системах.
...
Тестирование производительности, проводимое Кристофером Шульцем, постоянным участником списка рассылки пользователей Tomcat, использовало более широкий диапазон размеров файлов и, на мой взгляд, дает лучшие результаты. Результаты его испытаний показаны на графике ниже.
Эти результаты намного больше соответствуют ожидаемым, хотя есть несколько интересных моментов, на которые следует обратить внимание:
- Apache httpd и Coyote APR/native показывают схожие уровни производительности.
- Coyote NIO не слишком отстает от httpd и Coyote APR/native.
- Кажется, есть ограничение на полезность sendfile. Это может быть аппаратным ограничением, но заслуживает дальнейшего внимания. Я добавил это в свой список задач.
- При небольших размерах файлов (менее ~10 КБ) кэширование статических файлов в Tomcat обеспечивает значительное повышение производительности.
...
Хотя необработанная производительность для статического содержимого может не быть хорошей причиной для использования httpd, существует ряд веских причин, по которым вы можете захотеть использовать httpd с Tomcat. Наиболее частой причиной является распределение нагрузки для двух или более экземпляров Tomcat. httpd - не единственный вариант, так что можно использовать аппаратные балансировщики нагрузки или другие обратные прокси-серверы, но это популярный выбор среди системных администраторов, поскольку многие из них уже знакомы с httpd. Я напишу больше об использовании httpd в качестве балансировщика нагрузки в следующей статье.
...
Стоит прочитать.
При этом использование веб-сервера перед Tomcat для обслуживания статического контента, очевидно, высвободит больше энергии для динамического контента и, таким образом, является моим любимым вариантом.
Вы не должны учитывать скорость, когда выбираете между Apache httpd и Tomcat.
Что такое JK (или AJP)?
AJP - это проводной протокол. Это оптимизированная версия протокола HTTP, позволяющая автономному веб-серверу, такому как Apache, общаться с Tomcat. Исторически Apache намного быстрее, чем Tomcat, обслуживал статический контент. Идея состоит в том, чтобы Apache, когда это возможно, обслуживал статический контент, но передавал запрос в Tomcat для контента, связанного с Tomcat.
А также
Скорость. Apache быстрее обслуживает статический контент, чем Tomcat. Но если у вас нет сайта с высоким трафиком, этот пункт бесполезен. Но в некоторых случаях tomcat может работать быстрее, чем Apache httpd. Итак, отметьте ВАШ сайт. Tomcat может работать со скоростью httpd при использовании соответствующего соединителя (APR с включенным sendFile). Скорость не должна учитываться при выборе между Apache httpd и Tomcat.
Ресурсы:
Возможно, заголовок Cache-Control со значением max-age может быть добавлен фильтром сервлета в Tomcat для всего содержимого "/static/*". И поэтому, если одни и те же клиенты возвращаются часто (Интранет), Tomcat может быть достаточно, поскольку статический контент будет в кеше браузера и редко запрашивается на сервере по сравнению с динамическим контентом.
Кроме того, Cache-Control для статического контента может быть хорошей идеей для расширенной пропускной способности сети.
(Это всего лишь мой собственный опыт стремления к KISS)