分散式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很早就寫過兩篇文章
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的精簡。