memcached 用戶端總結,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用戶端的一些知識。