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

StackOverflow https://stackoverflow.com/questions/82340

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top