memcached 客戶端總結

        本文將從memcached 使用角度,從客戶端,協議,服務器端來簡要介紹一下memcached 的特性。

memcached是一個高性能的分佈式K-V內存存儲系統,其在內存中維護了一張hash表,由於其可以在內存中讀取,所以讀寫速度很快,由於內容存在內存中,斷電後會遺失,所以可靠性不如db,現在也有將memcached和BDB結合在一起的,叫做memcacheDB,這裏不做討論

由於其讀寫速度快的特性,在服務端的應用中,memcache 多應用於web機器和db層面之間的緩存。

對於memcache來說,它的分佈式是在客戶端實現的,客戶端使用一致性hash的算法,實現memcache的分佈式。

        一致性hash簡要介紹:



對每個memcached服務節點計算其hash值,並按照hash值大小順序將其順時針排列在一個圓之上,當有新的key過來存儲的時候,計算其hash值,並按照順時針查找,找到的第一個的hash值大於key的hash值的節點,如果找不到,那就取第一臺機器,就將其存儲在這個節點之上。這樣的好處是,如果增加了一個節點,只有新增的節點和其上一個節點之間的hash值的key的存取會有變化,如下圖所示:


這樣大大減少了增加機器後對命中率的影響。

但是可能會出現如下情況


這樣的話,server1的存的量要遠遠大於server2存的量(只有server1和server2的中間的hash值的key 纔會被存到cache裏面),在這裏,memcache客戶端使用虛擬節點的方式,實現負載均衡。

所謂虛擬節點,就是在這個圓上設置一些點,使得落在這些點區間內的某個key歸結到上面兩臺機器上去,具體做法可以是,對上面兩個節點,在名稱之後加上#序號,假設我們設置三個虛擬節點,分別就是server1#1 server1#2 server1#3 ,server2#1 server2#2 server2#3,設置之後計算節點的hash值,節點的分佈如下圖所示

 


這樣我們相當於增加了一些節點,這樣的負載就均衡了一些。


以上就是memcache客戶端的一些知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章