Сервлеты Java: производительность

Я работаю над веб-приложением на Java, которое получает данные от сервлетов через вызовы AJAX.

В этом приложении есть несколько элементов страницы, которые через довольно короткие промежутки времени получают новые данные с сервера.

При большом количестве пользователей спрос на сервер может стать довольно высоким, поэтому мне любопытно:

Какой подход предлагает лучшую производительность:

Много сервлетов (по одному для каждого типа запроса данных)?

Или же:

один сервлет, который может обрабатывать все запросы?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
1 211
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Нет причин для производительности иметь более одного сервлета. В веб-приложении мгновенно запускается только один экземпляр класса сервлета, независимо от количества запросов. Запросы не сериализуются, они обрабатываются одновременно, поэтому сервлет должен быть потокобезопасным.

Спасибо, я никогда не понимал, что именно происходит на нижнем уровне для сервлетов.

TM. 15.10.2008 16:16

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

Как сказал Тони, на самом деле нет причин использовать более одного сервлета, если только вам не нужно разбить сложный класс сервлетов Java или, возможно, реализовать перехватывающий фильтр.

1. Вам следует редко, если вообще когда-либо, добавлять атрибуты в ServletContext. 2. Можете ли вы подтвердить это: «Несколько сервлетов - определенно способ добиться чистой скорости»? это просто неправильно, если вам нужно синхронизировать что-то, вам придется синхронизировать, есть ли у вас 1 или 100 сервлетов

Tony BenBrahim 15.10.2008 07:29

1. Просто скажу, что ServletContext не является потокобезопасным и ничего не говорит о хороших практиках. 2. Ты абсолютно прав в этом, мозговой перд с моей стороны, и я изменю свой ответ. Я думал, что мы могли бы каким-то образом избежать блокировки потоков с помощью нескольких сервлетов. Моя вина.

Eric Wendelin 15.10.2008 07:57

Одна из возможных причин наличия нескольких сервисов заключается в том, что если вам нужно расширить до нескольких серверов, чтобы справиться с нагрузкой в ​​будущем, легче перенести отдельную службу на собственный сервер, чем делать это «за кулисами», если все идет. из одной службы.

При этом есть дополнительные накладные расходы на обслуживание, если у вас есть несколько сервлетов, поэтому это вопрос баланса будущей гибкости с меньшей ремонтопригодностью.

К сожалению, вопрос задан о запросе Ajax, поэтому сервер должен быть таким же, как и страница, с которой была загружена страница. Признанный способ сделать то, что вы предлагаете, - использовать балансировщик нагрузки перед несколькими серверами, обслуживающими один и тот же контент (т.е. у всех одинаковые сервлеты).

Tony BenBrahim 15.10.2008 07:59

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

Но, сохраняя модульность и разделение кода, у вас может быть несколько сервлетов.

Я уверен, что вы знаете, что у вас может быть несколько экземпляров одного и того же сервлета, если вы зарегистрируете разные узлы в файле web.xml для своего приложения, т.е. если вы хотите это сделать.

Помимо этого, насколько я понимаю, вам может быть полезна архитектура кометы - http://en.wikipedia.org/wiki/Comet_(programming).
Уже есть некоторые реализации Comet на некоторых контейнерах сервлетов - вот один взгляд на то, как использовать Ajax и Comet - http://www.ibm.com/developerworks/java/library/j-jettydwr/. Вы должны изучить, прежде чем выбирать свою архитектуру.

BR,
~ А

Другие вопросы по теме