1、一致性hash演算法
一致性hash演算法是現代系統架構中的最關鍵演算法之一,在分布式計算系統、分布式儲存系統、資料分析等眾多領域中廣泛應用。
hash演算法的關鍵在於它能夠根據不同的屬性資料,生成一串不相同的hash值,並且能夠將這個hash值轉換為 0—232?1 範圍整數(即上圖中的圓環) 一台伺服器的某個或者某一些屬性當然也可以進行hash計算(通常是這個伺服器的ip位址和開放埠),並且根據計算分布在這個圓環上的某乙個點。也就是圖中圓環上的藍色點。 乙個處理請求當然也可以根據這個請求的某乙個或者某一些屬性進行hash計算(可以是這個請求的ip、埠、cookie值、url值或者請求時間等等),並且根據計算記過分布在這個圓環上的某乙個點上。也就是上圖圓環上的黃色點。 我們約定落在某乙個藍點a左側和藍點b右側的黃色點所代表的請求,都有藍點a所代表的伺服器進行處理,這樣就完成解決了「誰來處理」的問題。在藍色點穩定存在的前提下,來自於同乙個hash約定的請求所落在的位置都是一樣的,這就保證了服務處理對映的穩定性。 當某乙個藍色點由於某種原因下線,其所影響到的黃色點也是有限的。即下一次客戶端的請求將由其他的藍色點所代表的伺服器進行處理。
2、輪詢與加權輪詢
當有任務需要傳遞到下層節點進行處理時,任務**點會按照乙個固定的順序,將任務依次分配到下層節點,如果下層可用的節點數量為x,那麼第n個任務的分配規則為:
目標節點=(nmodx)+1 輪詢處理在很多架構思想中都有體現:dns解析多ip時、lvs向下**訊息時、nginx向下**訊息時、zookeeper向計算節點分配任務時。了解基本的輪詢過程有助於我們在進行軟體架構設計時進行思想借鑑。 但是上面的輪詢方式是有缺陷的,由於各種客觀原因我們可能無法保證任務處理節點的處理能力都是一樣的(cpu、io、記憶體頻率等不同)。所以a節點業務能同時處理100個任務,但是b節點可能同時只能處理50個任務。 在這種情況下我們需要依據下層節點某個或者多個屬性設定權值。這個屬性可能是網路頻寬、cpu繁忙程度或者就是各乙個固定的權值。
那麼加權輪詢的分配依據是什麼呢?有很多分配依據,例如:概率演算法(此演算法中包括蒙特卡羅演算法,拉斯維加斯演算法和舍伍德演算法,在網路上有很多介紹資料)、最大公約數法。這裡我們對最大公約數演算法進行介紹,因為該方法簡單實用:
首先按照某種規則計算得到每個處理節點的權值,上文已經說到計算規則可能是這個服務節點的cpu利用率、網路占用情況或者在配置檔案中的固定權重。 求這些權值的最大公約數,在上圖中三個節點的權值分別是100、80、60.那麼求得的最大公約數就是20(如果您忘記了最大公約數的定義,請自行複習)。那麼這三個節點的被除結果分別是5、4、3,求和值為12。 得到以上的計算結果,就可以開始進行請求分配了,公式同樣為:
(nmodx)+1=y
其中n表示當前的第n次任務;x表示整除後的求和結果;y為處理節點。
總結一下:加權輪詢是輪詢方案的補充,通過將處理節點的屬性轉換成權值可以有效的描述處理節點的處理能力,實現更科學的處理任務分配。加權輪詢的關鍵在於加權演算法,最大公約數演算法簡單實用,定位效率高。
Nginx 重要演算法介紹
1 一致性hash演算法 一致性hash演算法是現代系統架構中的最關鍵演算法之一,在分布式計算系統 分布式儲存系統 資料分析等眾多領域中廣泛應用。2 輪詢與加權輪詢 那麼加權輪詢的分配依據是什麼呢?有很多分配依據,例如 概率演算法 此演算法中包括蒙特卡羅演算法,拉斯維加斯演算法和舍伍德演算法,在網路...
Nginx 一 nginx基礎介紹
toc 文章目錄 一款高效能 輕量級web服務軟體 nginx engine x 是乙個可以作為http web伺服器 反向 伺服器 郵件 伺服器和乙個通用的tcp udp 伺服器 1.9.0版本後 的多功能架構元件,同時也可以提供一定的快取服務功能 1 乙個master程序生成多個worker子程...
Nginx重要概念之pipeline
什麼是pipeline?pipeline是http1.1引入的新特性,流水線作業,是keepalive長連線的昇華,可以實現乙個連線做多次請求。pipeline與keepalive的區別 當客戶端提交多個請求的時候,keepalive場景下,第二個請求必須等到第乙個請求響應接收完全後才能發起,跟tc...