Nginx負載均衡演算法

2022-03-23 06:37:05 字數 2162 閱讀 4004

目前只有思路,過兩天上**。。。。。。

伺服器    權重

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小於5就直接返回ip a

如果offset大於5 比如是7 就 用7減去當前的5得到offset=2

此時權重座標是:

0——3—5

b c然後下次遍歷2落在b的位置 直接返回ip b

這種演算法的好處和list相比 如果有個權重100 list需要放100個物件,而這種演算法比較省空間

伺服器    權重

a     5

b     1

c     1

如果請求

aaaaabc對abc三個伺服器不夠平衡

aababac 我們想要請求這個結果  nginx 平衡加權輪詢演算法

這時我們需要增加乙個動態權重變數 currentweight

返回結果aabacaa 達到了平均加權輪詢的目的,這個演算法的過程寫在圖上面了,過兩天上**

普通hash演算法

假設我們有三颱伺服器 s1 s2 s3。我們有三萬張據需要快取到伺服器上,這些資料最好均勻的分配到伺服器上。

1)hash(名稱)%機器數=餘數。 如果有三颱伺服器 取模的結果就是0 1 2 與伺服器編號對應

2)對同一條資料做相同的hash計算時得到的資料時不變的,訪問的時候 對進行hash計算 就可以知道快取在哪台伺服器上

通過這種演算法 就可以將三萬張快取在三颱伺服器上,而且下次訪問時 就能直接計算出快取在哪台伺服器上,這種演算法就是雜湊演算法

雜湊演算法缺陷:

伺服器從3臺變成4臺  hash(名稱)%機器數(由3變成4) 得到的餘數會發生變化,這裡由於快取伺服器數量發生變化,導致不能正常訪問快取資料,大量快取同一時間失效,導致快取雪崩

改進:一致性hash演算法

一致性hash演算法由乙個雜湊環組成 環上又2的32次方個點

1)hash(a)%2的32次方=結果,結果的值在0到2的32次方之間,可以把伺服器a b c對映到雜湊環上。

2)用同樣的方法 可以把要快取的物件對映到雜湊環上 hash(名稱)%2的32次方

3)確定需要快取在哪一台伺服器上:位置 瞬時間旋轉,遇到第乙個伺服器的位置,就是鎖存放的快取伺服器

假設增加了一台伺服器d 會有部分沿順時針遇到的第一台快取伺服器就由伺服器a變成了伺服器d

這樣 每增加一台伺服器會有一小部分快取失效,無法訪問大部分依然可以正常訪問 避免了快取雪崩

(如果abc不是均勻的分散在hash環上,距離很近)導致快取分部極度不均勻 這就是hash偏斜。解決辦法:增加一層虛擬節點

具體進行快取讀寫時:——>先找到虛擬節點——>虛擬節點在找到真實節點——>快取的讀取和儲存

資料定位演算法不變,只需要增加一步:虛擬節點到實際點的對映。

所以加入虛擬節點之後,即使在服務節點很少的情況下,也能做到資料的均勻分布。

nginx 負載均衡演算法

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

Nginx 負載均衡演算法

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

Nginx 負載均衡演算法

nginx負載均衡演算法 1 輪詢 預設 每個請求按時間順序逐一分配到不同的後端服務,如果後端某台伺服器宕機,自動剔除故障系統,使使用者訪問不受影響。upstream tomcat server server 192.168.10.11 8080 weight 1 server 192.168.10...