Использование tomcat в режиме round robin - PullRequest
4 голосов
/ 26 февраля 2011

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

Насколько я вижу, если каждый запрос обслуживается разными tomcats, неизвестный sessionId получит tomcat, поэтому он будет вынужден создать новый сеанс и перезаписать старый sessionId. Таким образом, для каждого запроса будет создан новый сеанс. Это, кажется, много накладных расходов.

Правильно ли мое мнение об этом? Есть ли способ отключить управление сеансами Tomcat?

С уважением, Michael

Ответы [ 3 ]

3 голосов
/ 26 февраля 2011

Обычно у вас есть два варианта:

1) Реплицируйте ваши сеансы, чтобы они стали доступны любому узлу Tomcat.Решения: Tomcat Cluster , memcached-session-manager , возможно, другие.

2) Используйте балансировщик нагрузки и реализуйте липкие сессии.Первые запросы будут перенаправлены случайным образом на основе циклического перебора, но последующие запросы будут привязаны к тому же серверу.Решения: mod_proxy , диспетчеры аппаратного трафика.

Недостатком первого варианта является то, что репликация сеанса является дорогостоящей, не очень надежной и часто требует, чтобы данные Serializable включались в сеанс.

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

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

1 голос
/ 26 февраля 2011

Обычно мы используем Tomcat за веб-сервером Apache с mod_jk для балансировки нагрузки запросов между экземплярами Tomcat.

При липких сеансах пользователь будет получать сеанс только по первому запросу и впоследствии всегда будет направлен на Tomcat, откуда начинается его сеанс.Таким образом, нет необходимости реплицировать сеансы для всех Tomcats, и запросы будут также распределяться по Tomcats.

Конечно, это не гарантирует какой-то циклический перебор, о котором вы просили.

0 голосов
/ 26 февраля 2011

Сессия будет создана только после того, как ваш код запросит сессию, поэтому, если ваше приложение не требует сессии, просто просто не обращайтесь к ней.Извлеките раздел о getSession () в HttpServletRequest

http://download.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html#getSession(boolean)

Я не уверен, существует ли способ репликации сеанса между различными экземплярами tomcat, однако, если вам требуется некоторое пользовательское состояние безсеанс, то вы можете вместо этого использовать куки.

РЕДАКТИРОВАТЬ: Если вам нужно повторить сеанс, вы, вероятно, могли бы начать с чтения этого документа Tomcat.http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...