《演算法 一致性 hash 演算法》

2022-05-02 08:45:08 字數 1718 閱讀 7358

每天進步一點點——五分鐘理解一致性雜湊演算法(consistent hashing)

一:背景

- 一致性雜湊演算法在2023年由麻省理工學院的karger等人在解決分布式cache中提出的。

- 設計目標是為了解決網際網路中的熱點(hot spot)問題。

- 一致性雜湊修正了使用的簡單雜湊演算法帶來的問題

二:簡單雜湊演算法帶來的問題?

- 在簡單雜湊演算法中

- 我們會根據hash演算法得出的數值和機器數取模計算,計算發到哪台機器上。

- hash(資源)% 機器數 = 落到哪台機器上

- 這樣的話就不會遍歷所有的伺服器,大大提公升了效能!

-但是,在伺服器數量變動的時候,所有快取的位置都要發生改變!

- 假設4臺快取中突然有一台快取伺服器出現了故障,無法進行快取。

- 那麼我們則需要將故障機器移除,但是如果移除了一台快取伺服器,那麼快取伺服器數量從4臺變為3。

- 如果想要訪問資源,資源的快取位置必定會發生改變,以前資源快取也會失去快取的作用與意義。

- 同時由於大量快取在同一時間失效,造成了快取的雪崩,服務端也會承受巨大壓力。

三:一致性雜湊(hash)解決的問題

-解決增減伺服器導致的大量資料**問題。

四:一致性雜湊(hash)

- 原理

-創造環形雜湊(hash)空間,不同節點對映到環上的不同位置,通過和機器節點的匹配,完成hash一致。

- 做法

-  按照常用的hash演算法來將對應的key雜湊到乙個具有2^32次方個桶的空間中,即0~(2^32)-1的數字空間中。 可以將這些數字頭尾相連,想象成乙個閉合的環形。

--  現在我們將object1、object2、object3、object4四個物件通過特定的hash函式計算出對應的key值,然後雜湊到hash環上。

- 在採用一致性雜湊演算法的分布式集群中將新的機器加入。

-其原理是通過使用與物件儲存一樣的hash演算法將機器也對映到環中,然後以順時針的方向計算,將所有物件儲存到離自己最近的機器中。

-  通過上圖可以看出物件與機器處於同一雜湊空間中,這樣按順時針轉動object1儲存到了節點1中

- object3儲存到了節點2中

- object2、object4儲存到了節點3中。

- 在這樣的部署環境中,hash環是不會變更的,因此,通過算出物件的hash值就能快速的定位到對應的機器中,這樣就能找到物件真正的儲存位置了。

五:問題解答

- 如何解決單個節點壓力過大的問題?

- 在 一致雜湊演算法中,提出了虛擬節點的概念,既乙個機器可以通過 雜湊 演算法,對映至多個節點。以解決單個節點的壓力問題

一致性hash演算法

july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...

一致性hash演算法

一致性雜湊演算法在1997年由麻省理工學院提出的一種分布式雜湊 dht 實現演算法,設計目標是為了解決網際網路中的熱點 hot spot 問題,初衷和carp十分類似。一致性雜湊修正了carp使用的簡 單雜湊演算法帶來的問題,使得分布式雜湊 dht 可以在p2p環境中真正得到應用。一致性hash演算...

Hash 一致性演算法

應用在 資料庫分庫 等領域 如果我們採用取餘 或者 普通hash的話.再一次增加一台機器的過程中,會導致大面積資料遷移問題.要不然就會出現入庫不平均.consistent hashing 就是為了解決這個問題的.初始分配 將所有機器通過hash演算法分布在乙個2 32次方的乙個圓環上.當每一次入庫的...