1. 程式人生 > >分散式Session的主流實現方式和優缺點

分散式Session的主流實現方式和優缺點

一、常見的分散式session實現方式有以下幾種

1. 基於資料庫的Session共享

2. 基於NFS共享檔案系統
3. 基於memcached 的session
4. 基於resin/tomcat web容器本身的session複製機制
5. 基於TT/Redis 或 jbosscache 進行 session 共享。

6. 基於cookie 進行session共享

二、優缺點分析

1.基於資料庫的session共享。

原理:就不用多說了吧,拿出一個數據庫,專門用來儲存session資訊。保證session的持久化。

優點:伺服器出現問題,session不會丟失。

缺點:如果網站的訪問量很大,把session儲存到資料庫中,會對資料庫造成很大壓力,還需要增加額外的開銷維護資料庫。

2.基於基於NFS共享檔案系統

原理:拿出一個伺服器,搭建NFS伺服器來共享session。保證session的持久化。

優點:用NFS來儲存session的缺點是,session過期後可以實現自動清除,必須自己設定回收機制,我們可以利用crontab來定期回收,用用以下shell命令即可:

find /tmp/php_sess -mmin +30 | xargs rm -fr

缺點:如果session量比較大並且所有的session檔案都在同一個子目錄下的話,那麼可能會由此帶來很嚴重的負載問題,甚至導致網站無法使用

3.基於memcached 的session(不提倡)

這裡memcached建立者Dormando很早就寫過兩篇文章

,告誡開發人員不要用memcached儲存Session。他在第一篇文章中給出的理由大致是說,如果用memcached儲存Session,那麼當memcached叢集發生故障(比如記憶體溢位)或者維護(比如升級、增加或減少伺服器)時,使用者會無法登入,或者被踢掉線。而在第二篇文章中,他則指出,memcached的回收機制可能會導致使用者無緣無故地掉線。

4.Session Replication 方式管理 (即session複製)

原理:將一臺機器上的Session資料廣播複製到叢集中其餘機器上

優點:實現簡單、配置較少、當網路中有機器Down掉時不影響使用者訪問

缺點:在機器較少,網路流量較小廣播式複製到其餘機器上,當機器數量增多時候會有一定廷時,帶來一定網路開銷

5.基於TT/Redis 或 jbosscache 進行 session 共享(傾向於Redis)

所有Web伺服器都把Session寫入到或則redis,也都從memcache或則redis來獲取。

優點:memcache或則redis本身就是一個分散式快取,便於擴充套件。網路開銷較小,幾乎沒有IO。效能也更好。

缺點:受制於Memcache的容量(除非你有足夠記憶體儲存),如果使用者量突然增多cache由於容量的限制會將一些資料擠出快取,另外memcache故障或重啟session會完全丟失掉。所以更偏向於redis。

6. 基於cookie 進行session共享

將使用者的session資料全部存放在cookie中,很多大型站點都在這麼幹。優點是伺服器架構也變得簡單,每臺web伺服器都可以很獨立。沒有網路開銷和對磁碟IO,伺服器重啟也不會導致資料的丟失。缺點,cookie過於龐大會耗費單位頁面的下載時間,所以要儘量保持cookie的精簡。