在集群中session安全和同步是個(gè)最大的問題,下面是收集到的幾種session同步的方案,希望能通過分析其各自的優(yōu)劣找出其適應(yīng)的場(chǎng)景。

          1. 客戶端cookie加密

          簡(jiǎn)單,高效。比較好的方法是自己采用cookie機(jī)制來(lái)實(shí)現(xiàn)一個(gè)session,在應(yīng)用中使用此session實(shí)現(xiàn)。

             問題:session中數(shù)據(jù)不能太多,最好只有個(gè)用戶id。

             參考實(shí)現(xiàn):http://rollerweblogger.org/

          2. application server的session復(fù)制

             可能大部分應(yīng)用服務(wù)器都提供了session復(fù)制的功能來(lái)實(shí)現(xiàn)集群,tomcat,jboss,was都提供了這樣的功能。

             問題:

          性能隨著服務(wù)器增加急劇下降,而且容易引起廣播風(fēng)暴;

          session數(shù)據(jù)需要序列化,影響性能。

          如何序列化,可以參考 對(duì)象的序列化和反序列化.

          參考資料:

          Tomcat 5集群中的SESSION復(fù)制一

          Tomcat 5集群中的SESSION復(fù)制二

          應(yīng)用服務(wù)器-JBoss 4.0.2集群指南

          3. 使用數(shù)據(jù)庫(kù)保存session

             使用數(shù)據(jù)庫(kù)來(lái)保存session,就算服務(wù)器宕機(jī)了也沒事,session照樣在。

             問題:

          程序需要定制;

          每次請(qǐng)求都進(jìn)行數(shù)據(jù)庫(kù)讀寫開銷不小(使用內(nèi)存數(shù)據(jù)庫(kù)可以提高性能,宕機(jī)就會(huì)丟失數(shù)據(jù)??晒┻x擇的內(nèi)存數(shù)據(jù)庫(kù)有BerkeleyDB,Mysql的內(nèi)存表);

          數(shù)據(jù)庫(kù)是一個(gè)單點(diǎn),當(dāng)然可以做數(shù)據(jù)庫(kù)的ha來(lái)解決這個(gè)問題。

          4. 使用共享存儲(chǔ)來(lái)保存session

             和數(shù)據(jù)庫(kù)類似,就算服務(wù)器宕機(jī)了也沒事,session照樣在。使用nfs或windows文件共享都可以,或者專用的共享存儲(chǔ)設(shè)備。

             問題:

          程序需要定制;

          頻繁的進(jìn)行數(shù)據(jù)的序列化和反序列化,性能是否有影響;

          共享存儲(chǔ)是一個(gè)單點(diǎn),這個(gè)可以通過raid來(lái)解決。

          5. 使用memcached來(lái)保存session

             這種方式跟數(shù)據(jù)庫(kù)類似,不過因?yàn)槭莾?nèi)存存取的,性能自然要比數(shù)據(jù)庫(kù)好多了。

             問題:

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

          存入memcached中的數(shù)據(jù)都需要序列化,效率較低;

                    memcached服務(wù)器一死,所有session全丟。memchached能不能做HA? 我也不知道,網(wǎng)站上沒提。

             參考資料:

          應(yīng)用memcached保存session會(huì)話信息

          正確認(rèn)識(shí)memcached的緩存失效

          擴(kuò)展Tomcat 6.x,使用memcached存放session信息

           

          6. 使用terracotta來(lái)保存session

             跟memcached類似,但是數(shù)據(jù)不需要序列化,并且是Find-Grained Changes,性能更好。配置對(duì)原來(lái)的應(yīng)用完全透明,原有程序幾乎不用做任何修改。而且terracotta本身支持HA。

          問題:terracotta的HA本身進(jìn)行數(shù)據(jù)復(fù)制性能如何?

          參考資料:

          JVM-level clustering

          Terracotta集群Tomcat實(shí)現(xiàn)Session同步

          使用Terracotta和Tomcat建立ACTIVE-PASSIVE模式的集群

          用Spring Web Flow和Terracotta搭建Web應(yīng)用

          Terracotta實(shí)戰(zhàn)示例——集群RIFE

          Terracotta近況:轉(zhuǎn)向開源,接受度,Hibernate支持

           

          附: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.

          posted on 2008-03-06 12:23 lzj520 閱讀(17910) 評(píng)論(0)  編輯  收藏 所屬分類: 個(gè)人學(xué)習(xí)日記
          主站蜘蛛池模板: 临夏县| 榆社县| 怀远县| 大安市| 竹溪县| 安龙县| 太保市| 海口市| 雅江县| 洛南县| 金沙县| 永福县| 聊城市| 枞阳县| 神木县| 西畴县| 丽江市| 武川县| 儋州市| 河曲县| 苏州市| 达日县| 舒兰市| 桐乡市| 原阳县| 上思县| 阿勒泰市| 奉新县| 焦作市| 五莲县| 新田县| 库尔勒市| 白沙| 盈江县| 湄潭县| 安阳县| 静安区| 松桃| 攀枝花市| 垦利县| 丰县|