Memcached與一致性哈希

Memcached是一個分布式的高性能內存對象緩存系統,可以緩存數據,如果沒有它,就必須從數據庫中獲取數據,加重數據庫的負擔.
減輕數據庫負載,減少應用程序對數據庫的調用,加快了數據的訪問.

即使是通過在硬盤上設立高速緩存(cache)的方式,也無法滿足海量的數據查詢需求。一個典型的實例就是搜索網站,在某些時刻,1s內服務器收到的查詢請求會達到千萬級別。

在硬盤表現得日益無力時,人們自然而然就想到了速度更快的內存。Memcached系統就是這種思路的產物。把頻繁使用的數據放入內存,在CPU收到數據請求后,就可以直接從內存中返回所需要的結果,而不必訪問硬盤。由于內存在訪問速度上比硬盤快好幾個數量級,因此這種方式就可以大大提高數據庫運行的速度和效率。

Memcached用途示例

通過在內存里同一維護一個巨大的hashtable,Memcached能夠存儲各種格式的數據

Memcached的緩存系統是分布式的,也就是允許在不同的主機上的多個用戶同時訪問這個系統.這種方式不僅解決了以往只能單機共享的缺憾,還減輕了數據庫的壓力,同時提高了訪問并獲取數據的速度

Memcached緩存技術的特點

1.協議簡單

服務器與客戶端使用簡單的基于文本的協議相互通信.

2.使用了基于libevent的事件處理方法

libevent是一個程序庫,能吧linux李痛得kqueue等事件處理功能封裝成一個同一的接口.

3.基于key-value的數據管理

Memcached在實際應用中,以守護進程daemon的形式駐留在服務器內存中,等待客戶端的連接.通信時,客戶端首先與服務器建立連接,隨后存取數據

Memcached的通信機制

4.自行管理內存

Memcached緩存給系統的基礎是內存,Mem保存的數據都存儲在Mem內置的內存存儲空間中,而不是文件,這就是快速的原因

Memcached的內存管理算法Slab Allocator

1)工作原理

初衷:減少內存碎片,提高工作效率

實現:事先將系統分配給Memcached的內存劃分為許多下該桶長度的頁(默認1M)
然后將不同的頁劃分為不同長度的塊(chunk)


Slab Allocator構造圖

2)通過Slab Allocator緩存記錄

Memcached收到一條數據時,會根據數據大小選擇何時的塊進行存儲.Memcached中維持一張表(FreeList[])記錄空閑塊信息.
通過這種方法,Memcached成功避免malloc和alloc式的內存管理;同時,通過固定內存塊管理,避免了內存碎片的產生.

3)Slab Allocator的缺點

解決了內存碎片的問題,但是也帶來新的問題.造成了內部碎片的問題:eg,申請85空間,但是只能返回100空間,就有15B的內碎片產生

4)Memcached的內存刪除機制

客戶端向Memcached提交數據時,除了指明key值外,還需要指明這條數據的有效期,超過有效期,客戶端就無法看到這個數據了.
Memcached自身不會釋放已分配的內存.通過這種方式,實現對內存空間的重復利用.

Memcached優先選擇已超時的記錄的空間,即使如此,依舊可能出現追加新數據時空間不足的問題.

這時就使用LRU機制來分配空間.:當Memcached的內存空間不足時(無法從Slab Class獲取新的空間時)Memcached就會從最近未被使用的記錄中搜索,并將其空間分配給新的記錄.

5)支持分布式數據管理

Memcached是一個高性能的分布式緩存系統.然而服務端沒有分布式功能,各個服務器不會相互通信.分布式實現依賴于客戶端的程序庫,這也是Memcached的一大特點

(1)Memcached的分布方法

a.向Memcached添加數據,首先根據客戶端算法利用key選擇保存的服務器;
b.服務器選定后,保存數據
c.獲取數據時,以相同的key,相同的算法可以定位到相同的服務器位置,從而獲取數據


客戶端上傳數據set



客戶端獲取數據get

(2)Memcached的分布式算法

Memcached使用的分布式算法中,我們簡單介紹兩種:余數哈希;一致性哈希

A.余數哈希

根據服務器臺數的余數進行哈希,求得鍵的哈希值,再處理服務器臺數,根據余數選擇服務器,

缺點:當添加或者移除服務器時,緩存重組的代價太大,

當添加服務器,訪問數據,Memcached命中率下降,那么就增加了數據庫服務器的負載.

B.一致性哈希

使用一致性哈??梢杂行П苊夥掌靼l生改變后對整個系統的影響.此外通過虛擬節點還可以避免負載不均衡的情況

一致性哈希是將整個哈希值空間組織成一個虛擬的圓環,如假設某哈希函數H的值空間是0~(2^32 -1)(即哈希值是一個32位的無符號整型),這個哈希空間為環

哈??臻g按順時針方向組織.為確定每臺服務器在空間上的位置,按照服務器主機名或者IP地址對每臺服務器進行Hash尋址.然后需要使用hash算法來判斷數據應該存儲在哪個服務器:首先,將數據根據key值使用相同的函數H計算出哈希值h,根據h確定數據在環上的位置,從此位置延環順時針向下尋找,遇到的第一個服務器就是其應該存儲的服務器.


有三臺服務器分布的哈??臻g



數據分布的哈??臻g

注:一致性哈希方式,使得服務器保存的哈希值空間是一個范圍,而不是一個特定的余數系列.所以減少了增刪服務器后的影響.

一致性哈希的容錯性與可擴展性

eg容錯

對上圖,當Server3服務器故障時,數據的存儲指示D發生了改變,存放在了Server2上邊,系統的存儲數據變化最少

eg擴展
假設增加服務器Server4
那么只是B存儲在Server4上邊了,整體的影響只是發生在了新增節點的區間部分

一致性哈希的虛擬節點

為了解決負載均衡問題,引入了虛擬節點概念,通過虛擬節點可以使得數據更均勻分布在系統的服務器上

eg只有兩臺服務器時,如圖,那么會有很少的數據存放在server2上邊


負載不均衡的哈希空間

引入虛擬節點可以解決這個問題,

所謂虛擬節點的機制,就是將每臺服務器在空間上映射為多個虛擬節點,大概數據哈希到系統空間時,仍然按照順時針方向找響應的存儲節點,但是找到的卻是虛擬節點.然后存儲到實際對應的服務器上


增加虛擬節點后的哈??臻g
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容