1. 程式人生 > >叢集中幾種session同步解決方案的比較

叢集中幾種session同步解決方案的比較

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

1. 客戶端cookie加密

簡單,高效。比較好的方法是自己採用cookie機制來實現一個session,在應用中使用此session實現。

   問題:session中資料不能太多,最好只有個使用者id。

2. application server的session複製

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

   問題:

效能隨著伺服器增加急劇下降,而且容易引起廣播風暴;

session資料需要序列化,影響效能。

參考資料:

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本身進行資料複製效能如何?

參考資料:

附:terracotta介紹

Open Terracotta is an enterprise-class, open-source, JVM-level clustering solution. JVM-level clustering simplifies enterprise Java by enabling applications to be deployed on multiple JVMs, yet interact with each other as if they were running on the same JVM. Terracotta extends the Java Memory Model of a single JVM to include a cluster of virtual machines such that threads on one virtual machine can interact with threads on another virtual machine as if they were all on the same virtual machine with an unlimited amount of heap.