Насколько эффективен Apache Tomcat для длинных опросов? - PullRequest
5 голосов
/ 03 апреля 2012

Я проходил через этот Вопрос о длительных опросах, когда помимо предоставления решения был сделан интересный вопрос о неэффективности Apache для обработки большого количества запросов. У меня была такая же забота о Apache Tomcat?

Является ли Apache Tomcat достаточно эффективным для обработки длинных опросов. Я знаю одну вещь, что Apache Tomcat поддерживает довольно большое количество параллельных потоков, но масштабируется ли он до такого предела, что мы можем использовать его для длинных опросов, как объясняет упомянутый выше поток?

Ответы [ 2 ]

5 голосов
/ 15 апреля 2012

Вы ссылаетесь на этот комментарий по вопросу ,

запуск этого на обычном веб-сервере, таком как Apache, быстро свяжет все «рабочие потоки» и
оставьте его неспособным ответить на другие запросы

Последние версии apache tomcat поддерживают комету , что позволяет неблокирующему IO разрешать tomcat масштабироваться для большого количества запросов. Из этой статьи ,

Благодаря неблокирующей возможности ввода / вывода, представленной в Java 4, New API ввода-вывода для пакета Java Platform (NIO), постоянный HTTP соединение не требует, чтобы к нему постоянно была присоединена нить. Потоки могут быть выделены для соединений только во время запросов обработанный. Когда соединение неактивно между запросами, поток может перерабатываются, а соединение размещается в централизованном NIO Select установить для обнаружения новых запросов без использования отдельного потока. это модель, называемая потоком на запрос, потенциально позволяет веб-серверам обрабатывать растущее число пользовательских соединений с фиксированным числом потоки. При одинаковой конфигурации оборудования веб-серверы работают в этот режим масштабируется намного лучше, чем в режиме потока на соединение. Сегодня популярные веб-серверы - включая Tomcat, Jetty, GlassFish (Grizzly), WebLogic и WebSphere - все используют поток для запроса через Java NIO.

2 голосов
/ 16 апреля 2012

См. отчет о сравнении Tomcat и Jetty для Comet :

  • Tomcat, как правило, имеет немного лучшую производительность, когда подключений очень мало. Он имеет небольшое преимущество в задержке запросов, что наиболее очевидно, когда многие запросы / ответы отправляются через несколько соединений без какого-либо значительного времени простоя.

  • Jetty, как правило, имеет лучшую масштабируемость при наличии большого количества соединений со значительным временем простоя, как это имеет место на большинстве веб-сайтов. Небольшой объем памяти Jetty и прогрессивное использование NIO позволяют большему количеству пользователей на единицу доступной памяти. Кроме того, меньшая занимаемая площадь означает, что контейнер сервлетов потребляет меньше памяти и кэш-памяти ЦП, и больше кэш-памяти доступно для ускорения выполнения нетривиальных приложений.

  • Jetty также имеет лучшую производительность в отношении обслуживания статического контента, так как Jetty может использовать расширенные буферы файлов с отображением в памяти в сочетании с записями сбора NIO, чтобы дать операционной системе команду отправлять контент файлов на максимальной скорости DMA без ввода пользователя. пространство памяти или JVM.

Если ваше приложение будет иметь периоды, когда существуют незанятые соединения или клиенты, которые просто ждут ответа от сервера, тогда Jetty будет лучшим выбором, чем Tomcat. В качестве примера можно привести тикер фондовой биржи, на котором клиенты отправляют несколько запросов и просто ждут обновлений.

Кроме того, команда Jetty была пионером для Comet, и большинство информации и примеров, которые я нашел, имеют тенденцию фокусироваться исключительно на Jetty. Мы использовали Jetty на сервере Comet с 2008 года и были довольны результатами.

Еще одна вещь, которую следует учитывать, это то, что Jetty разработан как автономный веб-сервер. Это означает, что вам не нужен сервер Apache перед Jetty. Мы запускаем Jetty на порту 80 для обслуживания всех запросов нашего приложения, включая запросы Comet.

Если вы используете Tomcat для кометных запросов, вам, скорее всего, потребуется разрешить прямой доступ к порту 8080 и обойти Apache, поскольку Apache может свести на нет ваш длительный опрос.

...