Ответ 1
Вы можете настроить контейнер для сохранения сеанса в базе данных с помощью JDBC. Если вы используете tomcat, вы можете настроить провайдер непрерывности сеанса JDBC. Я предполагаю, что вы можете делать аналогичную вещь и в других контейнерах.
Я документировал шаги по настройке настойчивости сеанса tomcat JDBC в своем блоге: http://gerrydevstory.com/2013/08/21/tomcat-7-jdbc-session-persistence/
В итоге вам нужна такая конфигурация в вашем контексте. xml:
<Manager className="org.apache.catalina.session.PersistentManager"
maxIdleBackup="10">
<Store className="org.apache.catalina.session.JDBCStore"
connectionURL="jdbc:mysql://localhost/mytomcat?user=root"
driverName="com.mysql.jdbc.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions"
sessionValidCol="valid_session" />
</Manager>
Однако, maxIdleBackup="10"
выше указывает, что сеанс будет сброшен в jdbc только через 10 секунд бездействия. Я не знаю, будет ли работать с 0.
Я предполагаю, что вся работа для работы будет трудной без липкого сеанса балансировки нагрузки, например: как вы обеспечиваете очистку сеансов до следующего запроса? Вы не можете гарантировать, что следующий запрос будет обслуживаться тем же node.
Возможно, еще одна альтернатива - если вы можете взломать себя/там другую библиотеку провайдеров сеансов, которая напрямую записывается в базу данных.
Редактировать 21 мая 2014 года:
Я только что понял hazelcast WM - отличная библиотека для репликации одноранговых сеансов. Все, что вам нужно сделать, это включить фейерверки в канистру по классам, настроить hazelcast-wm в качестве фильтра на вашем web.xml и настроить hazelcast. Он автоматически реплицирует объекты сеанса по кластерам.