一致性hash nginx ip hash原理

2021-08-20 16:27:20 字數 1618 閱讀 6912

一致性hash 環形節點 ,理解

nginx也是用一致性hash

我們指出:網路負載均衡本質上是分布式業務中排程系統的一種實現。作為網路請求分配的控制者,負載均衡器起著至關重要的作用。考慮到在任何乙個網路請求中,都有乙個源位址和目標位址(源ip和目標ip)。這樣,在負載均衡器中,我們就可以利用這兩個ip,通過一種雜湊演算法把請求分配到不同的伺服器上。這種演算法就是目標雜湊排程(利用目標ip)和源位址雜湊排程(利用源ip)。這兩種演算法為靜態演算法。

下面我們分別簡要講述一下。

目標位址雜湊排程(destination hashing scheduling)演算法

目標位址雜湊排程(destination hashing scheduling)演算法的基本原理是:此演算法根據請求的目標ip位址,作為雜湊鍵(hash key)從靜態分配的雜湊表找出對應的伺服器,若該伺服器是可用的且未超載的,則將請求傳送到該伺服器,否則返回空。這裡我們設定某個伺服器的連線數目大於2倍的權值,則表示此伺服器已超載。

目標位址雜湊演算法流程

假設有一組伺服器s = ,w(i)表示伺服器si的權值,c(i)表示伺服器si的當前連線數。servernode是乙個hash表。此表大小就是伺服器的數目,也可根據演算法模組中的具體條件修改。

演算法的初始化是將所有伺服器順序、迴圈地放置到servernode表中。

n = servernode[hashkey(dest_ip)]; 

if ( (n is dead) or (w(n) == 0) or (c(n) > 2*w(n))) then 

return null; 

return n; // 如果一切ok

上面的演算法中,hashkey()為雜湊函式。在實現時,一般採用素數乘法hash函式,通過乘以素數使得雜湊鍵值盡可能地達到較均勻的分布。

hashkey實現如下:

static inline unsigned hashkey(unsigned int dest_ip) 

其中,2654435761ul是2到2^32 (4294967296)間接近於**分割的素數, 

(sqrt(5) - 1) / 2 = 0.618033989 

2654435761 / 4294967296 = 0.618033987

源位址雜湊排程(source hashing scheduling)演算法

源位址雜湊排程(source hashing scheduling)演算法的基本原理是:此演算法根據請求的源ip位址,作為雜湊鍵(hash key)從靜態分配的雜湊表找出對應的伺服器,若該伺服器是可用的且未超載的,則將請求傳送到該伺服器,否則返回空。這裡我們設定某個伺服器的連線數目大於2倍的權值,則表示此伺服器已超載。、

可以看出,這種方式和目標位址雜湊排程方法是類似的,唯一的區別是以源位址作為雜湊鍵。

源位址雜湊演算法流程

源位址雜湊演算法流程和目標位址雜湊演算法流程類似,採用的雜湊函式也一樣。唯一不同的是,需要將請求的目標ip位址換成請求的源ip位址,所以這裡不再贅述。

總結

源位址雜湊排程和目標雜湊排程屬於兩種靜態的排程演算法,在實際應用中,這兩種排程演算法可以結合使用在防火牆集群中,它們可以保證整個系統的唯一出入口。

hash 入門

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...

一致性雜湊

from 學習分布式,一致性雜湊是最最基礎的知識,所以要理解好.那什麼是一致性雜湊呢?what 1.平衡性是指 hash的結果應該平均分配到各個節點,這樣從演算法上就解決了負載均衡問題.2.單調性是指 在新增或者刪減節點時,同乙個key訪問到的值總是一樣的.3.分散性是指 資料應該分散的存放在 分布...