集群中几种session同步解决方案的比较[转]
集群中session安全和同步是個最大的問題,下面是我收集到的幾種session同步的方案,希望能通過分析其各自的優(yōu)劣找出其適應(yīng)的場景。
1. 客戶端cookie加密
這是我以前采用的方式,簡單,高效。比較好的方法是自己采用cookie機(jī)制來實(shí)現(xiàn)一個session,在應(yīng)用中使用此session實(shí)現(xiàn)。
問題:session中數(shù)據(jù)不能太多,最好只有個用戶id。
參考實(shí)現(xiàn):http://rollerweblogger.org/
2. application server的session復(fù)制
可能大部分應(yīng)用服務(wù)器都提供了session復(fù)制的功能來實(shí)現(xiàn)集群,tomcat,jboss,was都提供了這樣的功能。
問題:
性能隨著服務(wù)器增加急劇下降,而且容易引起廣播風(fēng)暴;
session數(shù)據(jù)需要序列化,影響性能。
如何序列化,可以參考?對象的序列化和反序列化.
參考資料:
Tomcat 5集群中的SESSION復(fù)制一
Tomcat 5集群中的SESSION復(fù)制二
應(yīng)用服務(wù)器-JBoss 4.0.2集群指南
3. 使用數(shù)據(jù)庫保存session
使用數(shù)據(jù)庫來保存session,就算服務(wù)器宕機(jī)了也沒事,session照樣在。
問題:
程序需要定制;
每次請求都進(jìn)行數(shù)據(jù)庫讀寫開銷不小(使用內(nèi)存數(shù)據(jù)庫可以提高性能,宕機(jī)就會丟失數(shù)據(jù)。可供選擇的內(nèi)存數(shù)據(jù)庫有BerkeleyDB,Mysql的內(nèi)存表);
數(shù)據(jù)庫是一個單點(diǎn),當(dāng)然可以做數(shù)據(jù)庫的ha來解決這個問題。
4. 使用共享存儲來保存session
和數(shù)據(jù)庫類似,就算服務(wù)器宕機(jī)了也沒事,session照樣在。使用nfs或windows文件共享都可以,或者專用的共享存儲設(shè)備。
問題:
程序需要定制;
頻繁的進(jìn)行數(shù)據(jù)的序列化和反序列化,性能是否有影響;
共享存儲是一個單點(diǎn),這個可以通過raid來解決。
5. 使用memcached來保存session
這種方式跟數(shù)據(jù)庫類似,不過因?yàn)槭莾?nèi)存存取的,性能自然要比數(shù)據(jù)庫好多了。
問題:
程序需要定制,增加了工作量;
存入memcached中的數(shù)據(jù)都需要序列化,效率較低;
memcached服務(wù)器一死,所有session全丟。memchached能不能做HA? 我也不知道,網(wǎng)站上沒提。
參考資料:
應(yīng)用memcached保存session會話信息
正確認(rèn)識memcached的緩存失效
擴(kuò)展Tomcat 6.x,使用memcached存放session信息
6. 使用terracotta來保存session
跟memcached類似,但是數(shù)據(jù)不需要序列化,并且是Find-Grained Changes,性能更好。配置對原來的應(yīng)用完全透明,原有程序幾乎不用做任何修改。而且terracotta本身支持HA。
問題:terracotta的HA本身進(jìn)行數(shù)據(jù)復(fù)制性能如何?
參考資料:
轉(zhuǎn)載于:https://www.cnblogs.com/isoftware/p/3785499.html
總結(jié)
以上是生活随笔為你收集整理的集群中几种session同步解决方案的比较[转]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采用流水线技术实现8位加法器
- 下一篇: 《数据结构与算法分析:C语言描述》复习—