Memcache介紹、安裝、使用(四)

Memcache的分佈式算法

Memcached的分佈式是什麼意思?

Memcached雖然成爲“分佈式”服務器,但是服務端根本沒有“分佈式”功能,而是完全有客戶端實現所謂的“分佈式”。

假設有node1,node2,node3三臺Memcache緩存服務器,有五個不同的key值需要保存。

這裏寫圖片描述

首先向memcache添加第一個key:“tokyo”,客戶端接收到key後,客戶端實現的算法會根據傳入的鍵來決定保存數據的memcache服務器,服務器選定後,即保存“Tokyo”鍵,及其值。同樣,其他剩下的鍵都是先選擇哪臺服務器,然後在保存鍵值對。

這裏寫圖片描述

獲取值的過程類似:將需要獲取值的鍵“Tokyo”傳給客戶端程序,通過與保存數據時相同的算法,根據鍵選擇服務器。使用的算法相同,就能選中與保存數據時相同的服務器。然後向選中的服務器發送get命令,進行取值操作。只要數據沒有被刪除,就能獲取該鍵所對應的值。

這裏寫圖片描述

Consistent Hashing算法

分佈式算法是由Memcached客戶端來實現,計算鍵的分散的算法有餘數計算分散算法(略過),Consistent Hashing算法,原理:

首先計算出Memcache**服務器(節點)的哈希值,並將其配置到0~**2的32方的圓上,然後用同樣的方法找出存儲的key的哈希值,並映射到圓上,然後從數據映射到圓上的位置開始順時針尋找,將數據保存到找到的第一個服務器節點上,如果超過2的32方仍然找不到服務器,就會保存在第一臺Memcached服務器上。

這裏寫圖片描述

如果添加一臺服務器,只有在增加服務器的節點與其逆時針方向第一個節點,兩者之間的鍵值會受到影響,因此,最大程度的限制了所有鍵的重新排布。

這裏寫圖片描述

有的Consistent Hashing算法還採用了虛擬節點的思想,採用一般hash算法,服務器的映射地點分佈的就不會太均勻,採用虛擬節點的思想,爲每個服務器節點在continuum上分配100~200個節點,這樣就能抑制服務器分佈的不均勻,最大程度的減小服務器增減時的緩存重新分佈

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