Nginx負載均衡演算法分析

2021-08-10 02:57:39 字數 1042 閱讀 9604

負載均衡就是將負載分攤到不同的服務單元,即可保證服務的可用性,又保證響應足夠的快,給使用者很好的體驗,

nginx的負載均衡可以劃分為兩大類,內建策略和擴充套件策略。內建策略包括加權輪詢和ip hash,在預設的情況下這兩種策略會編譯進nginx核心中,只需要在nginx中配置指明引數即可。

1.加權輪詢

輪詢的原理很簡單,首先我們介紹一下輪詢的基本流程。如下是處理一次請求的流程圖:

圖中有兩點需要注意,第一,如果可以把加權輪詢演算法分為先深搜尋和先廣搜尋,那麼nginx採用的是先深搜尋演算法,即將首先將請求都分給高權重的機器,直到該機器的權值降到了比其他機器低,才開始將請求分給下乙個高權重的機器;第二,當所有後端機器都down掉時,nginx會立即將所有機器的標誌位清成初始狀態,以避免造成所有的機器都處在timeout的狀態,從而導致整個前端被夯住。

2. ip hash

ip hash是nginx內建的另乙個負載均衡的策略,流程和輪詢很類似,只是其中的演算法和具體的策略有些變化,如下圖所示:

fair策略是擴充套件策略,預設不被編譯進nginx核心。其原理是根據後端伺服器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流。這種策略具有很強的自適應性,但是實際的網路環境往往不是那麼簡單,因此要慎用。

4. 通用hash、一致性hash

這兩種也是擴充套件策略,在具體的實現上有些差別,通用hash比較簡單,可以以nginx內建的變數為key進行hash,一致性hash採用了nginx內建的一致性hash環,可以支援memcache。

對上面的集中負載均衡演算法進行測試(測試工具polygraph),考察下面三個關鍵的測試指標:

均衡性:是否能夠將請求均勻的傳送給後端

一致性:同乙個key的請求,是否能落到同一臺機器

容災性:當部分後端機器掛掉時,是否能夠正常工作

nginx 負載均衡演算法

1 輪詢 就是按照時間順序分配下乙個請求的伺服器。2 權值輪詢 給每乙個伺服器加上權值,權值和分配的請求成正比,比較適應於伺服器配置不均的情況。upstream backend 3 ip雜湊 根據ip的雜湊值分配,這樣每個ip每次訪問的伺服器都相同,這樣session的處理會容易些。upstream...

Nginx 負載均衡演算法

1 輪詢 預設 每個請求按順序逐一分配到不同的伺服器,如果某台伺服器宕機,自動剔除故障系統,整個服務保證可用 2 weight 輪詢加權 weight的值越大分配到的訪問概率越高 upstream bakend 3 ip hash 每個請求按訪問ip的雜湊結果分配,使來自同乙個ip的訪客固定訪問一台...

Nginx負載均衡演算法

目前只有思路,過兩天上 伺服器 權重 a 5 b 3 c 2 1 總的權重是10,先隨機出乙個數字 肯定是10以內的數字 2 然後遍歷權重的陣列 5,3,2 乙個乙個的去比較 核心 遍歷ip 拿到權重weight if offset 數形結合 權重座標 0 5 8 10 a b c 如果offset...