Управление кластерной средой и сессиями (сервлеты) - PullRequest
2 голосов
/ 25 марта 2012

Я читал книгу о сервлетах Java, где я встретил HTTPSessionActivationListener. Было указано, что в кластерной среде может быть только один объект HTTPSession, содержащий определенный идентификатор сеанса. Предположим, что в кластере 2 узла A и B -

первый запрос идет к узлу А. Здесь HTTPSession S1 создается вместе с атрибутами сеанса, а ответ возвращается клиенту. Этот же клиент отправляет последующий запрос. Этот запрос направляется на узел B. Теперь объект сеанса S1 перемещается с узла A на узел B (активируется в узле B и пассивируется в узле A).

В этом случае должен ли объект сеанса наряду с атрибутами быть сериализуемыми? Что произойдет, если он не сериализуем?

Чтобы подсчитать количество активных сеансов, следует ли суммировать сеансы в обоих узлах, чтобы получить фактическое значение? Как это обычно делается?

Также я предполагаю, что ServletContext уникален для каждой JVM. Атрибуты, заданные как часть контекста сервлета, скопированы в контекст сервлета во всех узлах кластера?

Ответы [ 2 ]

2 голосов
/ 25 марта 2012

Обычно я видел людей, использующих липкие сеансы (обычно предоставляемые балансировщиком нагрузки, например, ec2 ELB имеет эту функцию: http://shlomoswidler.com/2010/04/elastic-load-balancing-with-sticky-sessions.html), ИЛИ данные сеанса хранятся в общем хранилище, таком как база данных или Магазин NoSQL.

1 голос
/ 12 февраля 2015

Весенний сеанс, по-видимому, предлагает возможность под названием «Кластерные сеансы», а также имеет функцию разгрузки сеанса в решение для кэширования RedIs или GemFire.

Ссылка: http://projects.spring.io/spring-session/

...