關於Session的分布式存儲和容災問題


引子:一般對session的分布式管理常用的有以下3中方式,當然必須是當訪問用戶達到一定的量級以后才有分布式Session的概念
1)集群分組
2)一致性哈希
3)放置前端cookie中
 
首先說說集群分組:
  • 一般一組memcache支持3000個並發,如果10組就是30000個並發, 你想瞬間30000個並發是什么感念,每天幾億的Pv不是問題。
  • 組內memcached服務器數量可配(一般2~4台)通過內存共享的方式對client來說就是一塊內存,其實是幾台memcached服務台的合集。
容災備份:重要的東西可以在memcached攢夠了一個閥值,統一備份一次放到文件中或者數據庫中,這樣在一台服務器死掉后可以去數據庫拿數據放在另外一台服務器上(這個有點耗時)
對於這個備份有比較成熟的解決方案,比如靠sina的開源插件,memcachedb這個 可以把 memcached數據緩存到 伯克利db里面  ) 
 
一致性哈希:
這個比較普遍了,我以前的公司采用的就是這個辦法。具體算法如下:
解釋:其實是這樣的,我們把所有的sessionId從前端用戶請求cookie中拿到 做getHashCode(sessionId)=key1,多個sessionId就是keyn。。。。,在用一直的哈希算法后得到的key永遠在一個0~2的32次方內的定值,sessionID不同,這個key也就不同,這樣在0到2的32次方的數可以組成一個閉環,在把我們的memcached服務器也采用統一的hash算法一般是getHashCode(memcached ID地址)這樣是不是服務器的key也落到這個閉環里面了,呵呵,從0開始向右,或者向左都行,一般是向右開始找key找到一個key就放到離他最近的一個服務器的key中,這樣在2個node之間的key就可以放在右側的node服務器中。怎么知道key是sessionID算出來的,還是memcached IP地址算出來的呢,哈哈,大家自己想想,別想的太復雜啊。
 
放置前端cookie中:
這個也比較簡單,就是將用戶的登陸成功信息放在cookie中,並設置一個失效時間,當用戶請求web服務器時,這個請求會經過一個策略,這個策略會看cookie里面的信息,
如果發現已經登陸了,則將cookie里面的信息提出來用戶用戶基本信息展示,並給出已登錄界面。
如果發現未登陸,直接給出登錄界面。
這個方法就是有些瀏覽器對cookie的大小是有限制的,所有要將你放入cookie盡可能的小,bool型的用0,1表示,字符串編碼成數字最好。
 
好了,說了這么多,我的手都打累了。
今天就到這里吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM