Есть ли способ указать другое хранилище сеансов с Tomcat?

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

Если вы не хотите использовать липкие сеансы (наша конфигурация, к сожалению, этого не позволяет), возникает проблема рассинхронизации сеансов.

На других языках веб-фреймворки, как правило, позволяют использовать базу данных в качестве основного хранилища сеансов. Хотя это создает потенциальную проблему масштабирования, но делает управление сеансом очень простым. Мне интересно, есть ли способ заставить tomcat использовать базу данных для сеансов таким образом (технически это также устранит необходимость в какой-либо конфигурации кластеризации в tomcat server.xml).

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

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

Ответы 4

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

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

Способ определенно есть. Хотя я бы решительно проголосовал за липкие сеансы - это экономит столько нагрузки на ваши серверы / базу данных (если что-то не выходит из строя) ...

http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html содержит информацию о конфигурации и настройке SessionManager для Tomcat. В зависимости от ваших конкретных требований вам может потребоваться реализовать собственный менеджер сеансов, но эта отправная точка должна оказать некоторую помощь.

Я всегда был поклонником техники сеансов Rails: храните сеансы (зашифрованные + зашифрованные + подписанные) в cookie пользователя. Таким образом, вы можете выполнять балансировку нагрузки в соответствии с вашими сердцами, и вам не нужно беспокоиться о липких сеансах или попадании в базу данных для данных сеанса и т.д. переписывания вашего кода доступа к сеансу. Во всяком случае просто мысль.

Размер и количество файлов cookie очень ограничены. Максимум ~ 20 файлов cookie на домен и максимум ~ 4 КБ на файл cookie.

BalusC 29.07.2010 18:56

Как Rails справляется с ограниченным размером файлов cookie?

teon 16.10.2012 08:49

Другой альтернативой может быть memcached-сеанс-менеджер, решение для отработки отказа сеанса и репликации сеанса на основе memcached для tomcat 6.x / 7.x. Он поддерживает как липкие, так и не липкие сеансы.

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

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