hash一致演算法原理

2022-02-27 00:52:29 字數 840 閱讀 1883

hash一致演算法被用於memcached的集群,memcached的集群主要有hash與一致性hash。下面分別解釋這兩種演算法的原理。

由於memcached的集群方式是每個節點儲存的內容都不一樣,所以在集群時要用個演算法來選擇儲存和讀時在哪台伺服器。這就是hash演算法,這個演算法比較簡單,跟haspmap的演算法一樣,餘數分散(就是hashcode%伺服器個數來決定放在哪台伺服器) 。這種演算法的問題:在伺服器個數變更了,大部分資料就會丟掉。因為伺服器個數變更後,餘數變了。所以要快取重組,資料量大的話代價太大。

如何解決快取重組。,資料的hashcode與所屬伺服器虛擬節點關聯起來放到乙個順時針大環中。伺服器與資料的hashcode都放在這個大環中.

重點:伺服器節點與資料節點的關係是怎樣的呢?資料的hashcode最接近的乙個伺服器節點hashcode就是這個資料節點的伺服器。所以讀與寫資料都是找最接近的伺服器節點。 在物理伺服器個數變更時,不需要全部快取重組。因為這個環是有序的,所以刪除點節,只會影響到這個節點上的資料,其他的不用調整。新增新節點時,就是將順時針最靠近的那個節點的部分最靠近新節點的資料點的資料往新節點遷移就行了。

僅僅使用真實的節點來形成環的結構可能會導致資料的傾斜,為了解決這種資料不對稱的現象,可以在原理快取的機器的基礎上,增加相應的虛擬節點,這樣資料就會均勻的打散到其他節點中。

這個時候客戶端進行資料訪問的時候找的就是虛擬節點,而不是真實的物理節點伺服器。

一致性Hash演算法原理白話

1 技術背景 1.1 技術舉例 memcache 1.2 技術瓶頸 memcached伺服器端本身不提供分布式cache的一致性,由客戶端實現提供。以餘數分布式演算法為例。餘數分布式演算法是根據新增進入快取時key的hash值通過特定的演算法得出餘數,然後根據餘數對映到關聯的快取伺服器,將該key ...

手繪 一致性hash演算法原理

有時候由於資料量太大,乙個資料庫的容量不能滿足我們的需求 就需要多個資料庫儲存資料,這樣讀寫前我們需要先確定應該操作哪乙個資料庫 如下圖,我們想將一批資料放入到8個資料庫中。可以將資料id跟8做求模運算,根據得到的值選擇對應的資料庫,這樣讀寫都可以這樣選擇乙個資料庫操作 有時候不一定是根據id或id...

Hash一致性演算法底層原理

大綱 hash取餘演算法 判定雜湊演算法好壞的四個定義 一致性hash演算法的兩大設計 hash object.key n,hash值隨object.key n的變化而變化。如果有節點 集群中節點增減太正常 發生變化,幾乎重新分配,意味著所有已經分配好的資料都要遷移到新的節點上。1 平衡性 bala...