您好,登錄后才能下訂單哦!
這篇文章主要介紹“一致性hash算法怎么理解”,在日常操作中,相信很多人在一致性hash算法怎么理解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”一致性hash算法怎么理解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
這里簡單的對于Hash算法進行描述,之后,再對一致性Hash算法進行描述。
Hash算法是將任意長度的二進制的值,映射為較短的固定長度的二進制值,這個小的二進制值稱為
hash值。
一致性hash算法
設計的目的是為了解決英特網之中的熱點問題,和一致性hash算法相對應的是CARP的算法,前者是對后者的修正 。
簡單的來說,一致性Hash是將整個Hash值空間組織成為一個虛擬的環,如假設某hash函數 H的值空間為
0-2……23 -1 . 也就是指代一個32位的無符號的整類,整個Hash空間環如下 :
簡要來看, 這是一個環,組成環的是每一個點,hash空間,按照順時間方向來組織,0和2^32-1在時鐘零點方向重合,之后,為了確定每臺服務器在空間上的位置,通常而言,會將主機的Host名字,或者Ip地址對每一天服務器進行Hash尋址,
?比如在空間之中有三臺服務,進行Hash尋址,他在空間之中的位置分布如下所示:?
三臺機器,在進行Hash的處理以后。得到了一個地址,這個地址在Hsah環上對應的地址如下所示:
第一步解決好了,機器怎么存好解決了,那么數據該怎么存?
數據其實和機器一樣,也就是需要使用一個Hash的算法來判斷數據該訪問哪一臺機器,首先,將數據Key使用相同的函數H
來計算出hash值 h,依據 h這個值來確定我們在環上的位置,從此位置沿環 順時鐘的向下的去尋找,遇到的第一臺服務器就是其應存儲的服務器,數據存放在這臺服務器上,比如 下圖,我們有了四個數據,在進行Hash算法的取值以后,在空間上的位置如下:
一致性Hash映射的一個整體描述圖如下所示:
igz
傳統的hash算法,存在著容錯性和可擴展性的問題,尤其在增加服務器和減少服務器的時候,如果還要繼續的工作,那么一定需要對算法進行修改。在這一節里,我們將會對一致性Hash算法的容錯性和可擴展性進行介紹。假設Server3 突然停下來,那么就會出現如下的情況:
機器Server3在集群之中消失了。那么整個topology 結構就改變了,如下所示:
依據一致性的Hash算法, A依然是按照順序時鐘方向找到Server1,BCD這三個數據,將直接放置在Server2之上,先對于ServerB的消失,我們能確定的是,BC的位置依舊是機器3,改變的只是機器2之前的節點,
一致性Hash的算法在集群減少的時候,能將集群的數據變動減小到最小的值。
接下來的情況,我們試圖在 當前的Hash 環的境況之下,添加一臺新的,來看看hash環是如何變化的。
數據3依舊不變,而數據2將被分布到新添加的節點Server4 之上。
到此,關于“一致性hash算法怎么理解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。