**的伸縮性架構中,分布式的設計是現在的基本應用。
在memcached的分布式架構中,key-value快取的命中通常採用分布式的演算法
一、餘數hash
簡單的路由演算法可以使用餘數hash:
node編號=hashcode(key)%伺服器數目
例如: key=『beijing'的hash值為490806430,伺服器數目=3。那麼餘數為1。所以這個key-value就落在第一台快取伺服器上。
優點:計算簡單。
缺點:不利於擴充套件。如果擴充套件的話,由3太伺服器擴充套件為4臺伺服器,那麼通過乙個key='beijing',再除以伺服器數碼,餘數為2。那麼將不能命中,計算可知,增加一台伺服器不能命中的資料將達到:n/(n+1)。那也太高了。
二、一致性hash演算法
演算法過程:
資料存放;先構造乙個長度為2^32的整數環,根據節點名稱的hash值[0,2^32-1],將快取伺服器節點放置在這個hash環上。也就是說,每個節點,都根據起hash值,放在對應的hash環的位置中。。。如上圖,假設有4個節點node1 - node4。當資料來臨時候,根據資料key計算得到的hash值,順時針找到最近的node,然後將資料放入此節點。
增加節點:如果當node5節點增加進入系統時,只有node5之前的資料受到影響,由原來的放在node4上,轉移到新節點node5上。
查詢演算法:hash查詢的過程實際上是在二叉查詢樹中查詢不小於查詢樹的最小數值。當然這個二叉樹的最右邊子節點和最左邊子節點相連線,構成環。
缺陷:
新加入的node5節點只影響到了node4上面的部分資料。原來節點node1,node2,node3都不受影響。這就意味著,node1 - node3 將承受著node4、5的兩倍資料壓力。如果5臺伺服器的效能是一樣的,那麼這種結果顯然不是最好 的。
虛擬節點:
將每個物理節點對映為3個虛擬節點a1,a2,a3。這樣,當增加乙個物理機時,也將該虛擬機器位址對映為3個或多個虛擬節點,將這新的3個虛擬節點分攤到環的不同位置,那麼受到影響的節點也分不到不同的位置。整個環節點的均勻性將會大大增加!
三、系統的擴充套件性和伸縮性區別
擴充套件性和伸縮性不要搞混了。
擴充套件性:對現有系統影響最小的情況下,系統功能可持續擴充套件或提公升的能力。
表現在基礎設施穩定不需要經常變更,應用之間較少以來和耦合,對需求變更可以敏捷響應。是系統架構設計層面的「開閉原則(對擴充套件開放,對修改閉合)」,架構設計考慮未來功能擴充套件,當系統新增功能時,不需要對現有系統的結構和**進行修改。
伸縮性:系統能夠通過增加(減少)自身資源規模的方式增強(減少)自己計算處理事物的能力,如果這種增減是成比例的,就被稱作線性伸縮性。在**架構中,通常指利用集群的方式增加伺服器數量、提高系統的整體事物吞吐能力。
Hash和一致性Hash演算法
hash hash無論是資料結構還是分布式快取,都有應用。hash更確切的說是hash函式,是乙個集合的資料到另乙個集合內資料的乙個對映。被對映方在數學裡面叫做原象,這裡我們叫做資料,對映到的叫象,這裡我們稱作槽。分布式快取伺服器和應用伺服器的區別在於,應用伺服器中的所有伺服器都部署著相同的應用,而...
一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...
一致性hash演算法虛擬節點 一致性hash演算法
hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...