分布式系統(tǒng)中Session共享的五種方法
1. 基于NFS的Session共享
NFS是Net FileSystem的簡稱,最早由Sun公司為解決Unix網(wǎng)絡(luò)主機(jī)間的目錄共享而研發(fā)。
這個(gè)方案實(shí)現(xiàn)最為簡單,無需做過多的二次開發(fā),僅需將共享目錄服務(wù)器mount到各頻道服務(wù)器的本地session目錄即可,缺點(diǎn)是NFS依托 于復(fù) 雜的安全機(jī)制和文件系統(tǒng),因此并發(fā)效率不高,尤其對于session這類高并發(fā)讀寫的小文件, 會由于共享目錄服務(wù)器的io-wait過高,最終拖累前端WEB應(yīng)用程序的執(zhí)行效率。
2. 基于數(shù)據(jù)庫的Session共享
首選當(dāng)然是大名鼎鼎的Mysql數(shù)據(jù)庫,并且建議使用內(nèi)存表Heap,提高session操作的讀寫效率。這個(gè)方案的實(shí)用性比較強(qiáng),相信大家普 遍在 使用,它的缺點(diǎn)在于session的并發(fā)讀寫能力取決于Mysql數(shù)據(jù)庫的性能,同時(shí)需要自己實(shí)現(xiàn)session淘汰邏輯,以便定時(shí)從數(shù)據(jù)表中更新、刪除 session記錄,當(dāng)并發(fā)過高時(shí)容易出現(xiàn)表鎖,雖然我們可以選擇行級鎖的表引擎,但不得不否認(rèn)使用數(shù)據(jù)庫存儲Session還是有些殺雞用牛刀的架勢。
3. 基于Cookie的Session共享
這個(gè)方案我們可能比較陌生,但它在大型網(wǎng)站中還是比較普遍被使用。原理是將全站用戶的Session信息加密、序列化后以Cookie的方式, 統(tǒng)一 種植在根域名下(如:.host.com),利用瀏覽器訪問該根域名下的所有二級域名站點(diǎn)時(shí),會傳遞與之域名對應(yīng)的所有Cookie內(nèi)容的特性,從而實(shí)現(xiàn) 用戶的Cookie化Session 在多服務(wù)間的共享訪問。
這個(gè)方案的優(yōu)點(diǎn)無需額外的服務(wù)器資源;缺點(diǎn)是由于受http協(xié)議頭信心長度的限制,僅能夠存儲小部分的用戶信息,同時(shí)Cookie化的 Session內(nèi)容需要進(jìn)行安全加解密(如:采用DES、RSA等進(jìn)行明文加解密;再由MD5、SHA-1等算法進(jìn)行防偽認(rèn)證),另外它也會占用一定的帶 寬資源,因?yàn)闉g覽器會在請求當(dāng)前域名下任何資源時(shí)將本地Cookie附加在http頭中傳遞到服務(wù)器。
4. 基于Memcache的Session共享
Memcache由于是一款基于Libevent多路異步I/O技術(shù)的內(nèi)存共享系統(tǒng),簡單的Key + Value數(shù)據(jù)存儲模式使得代碼邏輯小巧高效,因此在并發(fā)處理能力上占據(jù)了絕對優(yōu)勢,目前本人所經(jīng)歷的項(xiàng)目達(dá)到2000/秒 平均查詢,并且服務(wù)器CPU消耗依然不到10%。
另外值得一提的是Memcache的內(nèi)存hash表所特有的Expires數(shù)據(jù)過期淘汰機(jī)制,正好和Session的過期機(jī)制不謀而合,降低了 過期Session數(shù)據(jù)刪除的代碼復(fù)雜度,對比“基于數(shù)據(jù)庫的存儲方案”,僅這塊邏輯就給數(shù)據(jù)表產(chǎn)生巨大的查詢壓力。

5、基于Redis 的Session共享
