我正在尋找避免內存中會話複製/羣集並將會話存儲在數據庫中的方法。此時使用Tomcat的JDBCStore是無用的,因爲它只在數據庫中存儲非活動會話以保存服務器內存。 有什麼建議嗎?Tomcat:將會話存儲在數據庫中
由於前期 費邊
我正在尋找避免內存中會話複製/羣集並將會話存儲在數據庫中的方法。此時使用Tomcat的JDBCStore是無用的,因爲它只在數據庫中存儲非活動會話以保存服務器內存。 有什麼建議嗎?Tomcat:將會話存儲在數據庫中
由於前期 費邊
如果你不想在它應該被使用的方式來使用會話,那麼就不要使用它在所有 - 開發自己的會話對象。它仍然可以實現HttpSession
,甚至可以從HttpSession
的實現延伸。
您可以使用Filter
來包裝您的請求,以便它返回您的會話對象而不是標準會話對象。在你的會話中,你可以將內容存儲在數據庫而不是內存中。
而不是寫入數據庫,您可以使用Hazelcast - 它提供分佈式集合。但我想這將花費與配置會話複製相同的工作量。會話複製並不困難 - 它受到所有容器的支持。
這些都是粗略的指導方針,這項任務並不是微不足道的。我建議堅持使用標準會話使用模式,並且只在真正需要時纔將數據存儲在數據庫中。
爲了避免複製的需要,您可以嘗試使用粘滯會話 - 即當用戶通過負載平衡器定向到服務器時,該用戶的每個後續請求都會發送到同一臺服務器。
你可能想看看this project,我寧願將會話存儲在memcached而不是數據庫中。
對我來說似乎沒有辦法,然後自己實現一個JDBC會話管理器,但感謝您的答案和時間 - Hazelcast需要更仔細一下,對我來說似乎非常強大。我會做類似於J. Brisbin:http://jbrisbin.com/web2/articles/tomcat-session-manager-backed-by-riak/
出於好奇,你有沒有看過Amazon的Elastic Beanstalk?他們提供粘性會話。 – stepanian 2011-09-09 04:46:00