
- 基于NFS的Session共享
NFS是Net FileSystem的簡稱,最早由Sun公司為解決Unix網絡主機間的目錄共享而研發。
這個方案實作最為簡單,無需做過多的二次開發,僅需将共享目錄伺服器mount到各頻道伺服器的本地session目錄即可,缺點是NFS依托 于複 雜的安全機制和檔案系統,是以并發效率不高,尤其對于session這類高并發讀寫的小檔案, 會由于共享目錄伺服器的io-wait過高,最終拖累前端WEB應用程式的執行效率。
- 基于資料庫的Session共享
首選當然是大名鼎鼎的Mysql資料庫,并且建議使用記憶體表Heap,提高session操作的讀寫效率。這個方案的實用性比較強,相信大家普 遍在 使用,它的缺點在于session的并發讀寫能力取決于Mysql資料庫的性能,同時需要自己實作session淘汰邏輯,以便定時從資料表中更新、删除 session記錄,當并發過高時容易出現表鎖,雖然我們可以選擇行級鎖的表引擎,但不得不否認使用資料庫存儲Session還是有些殺雞用牛刀的架勢。
- 基于Cookie的Session共享
這個方案我們可能比較陌生,但它在大型網站中還是比較普遍被使用。原理是将全站使用者的Session資訊加密、序列化後以Cookie的方式, 統一 種植在根域名下(如:.host.com),利用浏覽器通路該根域名下的所有二級域名站點時,會傳遞與之域名對應的所有Cookie内容的特性,進而實作 使用者的Cookie化Session 在多服務間的共享通路。
這個方案的優點無需額外的伺服器資源;缺點是由于受http協定頭信心長度的限制,僅能夠存儲小部分的使用者資訊,同時Cookie化的 Session内容需要進行安全加解密(如:采用DES、RSA等進行明文加解密;再由MD5、SHA-1等算法進行防僞認證),另外它也會占用一定的帶 寬資源,因為浏覽器會在請求目前域名下任何資源時将本地Cookie附加在http頭中傳遞到伺服器。
- 基于Memcache的Session共享
Memcache由于是一款基于Libevent多路異步I/O技術的記憶體共享系統,簡單的Key + Value資料存儲模式使得代碼邏輯小巧高效,是以在并發處理能力上占據了絕對優勢,目前本人所經曆的項目達到2000/秒 平均查詢,并且伺服器CPU消耗依然不到10%。
另外值得一提的是Memcache的記憶體hash表所特有的Expires資料過期淘汰機制,正好和Session的過期機制不謀而合,降低了 過期Session資料删除的代碼複雜度,對比“基于資料庫的存儲方案”,僅這塊邏輯就給資料表産生巨大的查詢壓力。
5、基于Redis 的Session共享
以上就是Session共享的五種方法,大型PHP項目實戰直播可以掃碼加我微信擷取免費學習資料,也可以進群擷取:
link