天天看點

幾種session存儲方式比較

叢集中session安全和同步是個最大的問題,下面是我收集到的幾種session同步的方案,希望能通過分析其各自的優劣找出其适應的場景。

1. 用戶端cookie加密

這是我以前采用的方式,簡單,高效。比較好的方法是自己采用cookie機制來實作一個session,在應用中使用此session實作。​

2. application server的session複制

可能大部分應用伺服器都提供了session複制的功能來實作叢集,tomcat,jboss,was都提供了這樣的功能。

3. 使用資料庫儲存session

使用資料庫來儲存session,就算伺服器當機了也沒事,session照樣在。

問題:

程式需要定制;

每次請求都進行資料庫讀寫開銷不小(使用記憶體資料庫可以提高性能,當機就會丢失資料。可供選擇的記憶體資料庫有BerkeleyDB,Mysql的記憶體表);

資料庫是一個單點,當然可以做資料庫的ha來解決這個問題。

4. 使用共享存儲來儲存session

和資料庫類似,就算伺服器當機了也沒事,session照樣在。使用nfs或windows檔案共享都可以,或者專用的共享儲存設備。

頻繁的進行資料的序列化和反序列化,性能是否有影響;

共享存儲是一個單點,這個可以通過raid來解決。

5. 使用memcached來儲存session

這種方式跟資料庫類似,不過因為是記憶體存取的,性能自然要比資料庫好多了。

程式需要定制,增加了工作量;

存入memcached中的資料都需要序列化,效率較低;

memcached伺服器一死,所有session全丢。memchached能不能做HA? 我也不知道,網站上沒提。

6. 使用terracotta來儲存session

跟memcached類似,但是資料不需要序列化,并且是Find-Grained Changes,性能更好。配置對原來的應用完全透明,原有程式幾乎不用做任何修改。而且terracotta本身支援HA。

問題:terracotta的HA本身進行資料複制性能如何?

用Spring Web Flow和Terracotta搭建Web應用

Terracotta實戰示例——叢集RIFE

Terracotta近況:轉向開源,接受度,Hibernate支援