2011-01-31 80 views
7

我正在尋找避免內存中會話複製/羣集並將會話存儲在數據庫中的方法。此時使用Tomcat的JDBCStore是無用的,因爲它只在數據庫中存儲非活動會話以保存服務器內存。 有什麼建議嗎?Tomcat:將會話存儲在數據庫中

由於前期 費邊

+1

出於好奇,你有沒有看過Amazon的Elastic Beanstalk?他們提供粘性會話。 – stepanian 2011-09-09 04:46:00

回答

5

如果你不想在它應該被使用的方式來使用會話,那麼就不要使用它在所有 - 開發自己的會話對象。它仍然可以實現HttpSession,甚至可以從HttpSession的實現延伸。

您可以使用Filter來包裝您的請求,以便它返回您的會話對象而不是標準會話對象。在你的會話中,你可以將內容存儲在數據庫而不是內存中。

而不是寫入數據庫,您可以使用Hazelcast - 它提供分佈式集合。但我想這將花費與配置會話複製相同的工作量。會話複製並不困難 - 它受到所有容器的支持。

這些都是粗略的指導方針,這項任務並不是微不足道的。我建議堅持使用標準會話使用模式,並且只在真正需要時纔將數據存儲在數據庫中。

爲了避免複製的需要,您可以嘗試使用粘滯會話 - 即當用戶通過負載平衡器定向到服務器時,該用戶的每個後續請求都會發送到同一臺服務器。

+0

感謝您的快速響應。我的意圖是在Microsoft Azure中運行多個Tomcat。粘滯會話的問題在於,它不受Azure的負載平衡器支持。在此雲環境中實現會話複製的最簡單方法是將會話存儲在數據庫中。你有HttpSession擴展和Filter的代碼示例嗎?感謝您的回答 – Fabe 2011-01-31 21:43:44

+0

@Fabe - 我沒有例子,對不起。 – Bozho 2011-01-31 21:48:13

3

你可能想看看this project,我寧願將會話存儲在memcached而不是數據庫中。