分佈式系統的負載均衡以及ngnix負載均衡的五種策略

通常而言,有如下幾種常見的負載均衡策略:算法

一.輪詢後端

特色:給每一個請求標記一個序號,而後將請求依次派發到服務器節點中,適用於集羣中各個節點提供服務能力等同且無狀態的場景。緩存

缺點:該策略將節點視爲等同,與實際中複雜的環境不符。加權輪詢爲輪詢的一個改進策略,每一個節點會有權重屬性,可是由於權重的設置難以作到隨實際狀況變化,仍有必定的不足。服務器

二.隨機session

特色:每次請求隨機分發給服務器節點。併發

缺點:在同一截面上發生碰撞的機率比較高; 在非對等集羣組網,或者硬件配置差別較大時,各節點負載不均勻 經過加權隨機進行提高。負載均衡

三.最小響應時間(服務調用時延)性能

特色:根據每一個服務器處理請求的時間和平均時間的差值,來動態調整分發權重, 能夠保證服務延時大的服務器,處理更少的請求。 該策略能夠保證處理請求能力強的服務器接收到更多的請求。 經過動態權重縮小服務調用時延的震盪範圍,使全部請求的處理時間接近平均值。ui

缺點:計算平均響應時間會耗費時間,滯緩請求的分發。 改進的只計算最近若干次的平均時間的策略。url

四. 最小併發數。客戶端的每一次請求服務在服務器停留的時間可能會有較大的差別,隨着工做時間加長,若是採用簡單的輪循或隨機均衡算法,每一臺服務器上的鏈接進程可能會產生較大的不一樣,並無達到真正的負載均衡。最小併發數的策略則是記錄了當前時刻,每一個備選節點正在處理的事務數,而後選擇併發數最小的節點。該策略可以快速地反應服務器的當前情況,較爲合理地將負責分配均勻,適用於對當前系統負載較爲敏感的場景。

五.一致性哈希。哈希值是32位的正整數,其值的分佈範圍按照必定規則分配給多個虛擬節點; 虛擬節點數量至少應是實際節點的兩倍; 實際節點經過哈希值再對虛擬節點進行瓜分; 對「請求」取哈希值,分發到相應虛擬節點,虛擬節點對應的實際節點來處理「請求」。 相同參數的請求,老是發送到同一個服務提供者。 當某一臺服務器宕機時,本來發往該節點的請求,基於虛擬節點,平攤到其餘提供者, 從而避免引發集羣劇烈變更。

 

ngnix負載均衡的五種策略:

一、輪詢(默認)
每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。 
upstream backserver { 
server 192.168.0.14; 
server 192.168.0.15; 

二、指定權重
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。 
upstream backserver { 
server 192.168.0.14 weight=10; 
server 192.168.0.15 weight=10; 

三、IP綁定 ip_hash
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。 
upstream backserver { 
ip_hash; 
server 192.168.0.14:88; 
server 192.168.0.15:80; 

四、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。 
upstream backserver { 
server server1; 
server server2; 
fair; 
}
五、url_hash(第三方)
按訪問url的hash結果來分配請求,使每一個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。 
upstream backserver { 
server squid1:3128; 
server squid2:3128; 
hash $request_uri; 
hash_method crc32; 

例子:

proxy_pass http://backserver/; 
upstream backserver{ 
ip_hash; 
server 127.0.0.1:9090 down; (down 表示單前的server暫時不參與負載) 
server 127.0.0.1:8080 weight=2; (weight 默認爲1.weight越大,負載的權重就越大) 
server 127.0.0.1:6060; 
server 127.0.0.1:7070 backup; (其它全部的非backup機器down或者忙的時候,請求backup機器) 
} 
相關文章
相關標籤/搜索