加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • WRR 算法
    • SWRR 算法
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

負(fù)載均衡實(shí)現(xiàn)方式

2021/01/21
395
閱讀需 3 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

負(fù)載均衡(Load Balance),其意思就是將負(fù)載(工作任務(wù))進(jìn)行平衡、分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行。在負(fù)載均衡中可以分為兩種方式,硬件方式與軟件方式。硬件負(fù)載均衡主要是有 F5、思科,軟件方式(不區(qū)分四層與七層負(fù)載均衡)主要包括 http 重定向、DNS 重定向、反向代理(如 nginx)、NAT 轉(zhuǎn)換等。

WRR 算法

假設(shè)有3臺機(jī)器a、b、c,權(quán)重分別為5,1,1, WRR(Weighted Round Robin)算法實(shí)現(xiàn)方式是:每次選出權(quán)重最大的機(jī)器,其權(quán)重減 1,直到權(quán)重全部為 0。然后按照生成的序列循環(huán)。

                           

最終得到的循環(huán)序列為:a,a,a,a,a,b,c,雖然此時(shí)負(fù)載是均衡的(5:1:1),但是前五次訪問都打到 a 機(jī)器,b 和 c 機(jī)器是空閑的。理想狀態(tài)是在均衡的情況下讓訪問次數(shù)也均衡分布,于是就有了 SWRR 算法(Smooth Weighted Round Robin),平滑加權(quán)輪訓(xùn)調(diào)度算法。

SWRR 算法

對于上面的案例,SWRR 算法策略是:

1、從權(quán)重中選出最大的,減去總權(quán)重

2、然后再給每個權(quán)重加上自身權(quán)重初始值

3、再次輪訓(xùn),直到權(quán)重為 0,確定序列

得到的最終循環(huán)序列是:a,a,b,a,c,a,a,訪問效果比 WRR 算法更優(yōu)。

但是 SWRR 算法在大量并發(fā)來臨的時(shí)候,第一次始終會選擇 a 機(jī)器,就有可能導(dǎo)致 a 機(jī)器癱瘓。解決方案為:對于生成的序列隨機(jī)選擇一個開始,比如有 5 臺負(fù)載的機(jī)器,都生成了 a,a,b,a,c,a,a 的序列,但是每臺機(jī)器不完全按照這個序列輪訓(xùn),而是隨機(jī)選擇一個開始,那生成的序列就可能變成下面這樣:

這樣能降低流量突增時(shí)第一臺機(jī)器被打癱瘓的概率。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

機(jī)械轉(zhuǎn)行IT狗,目前在阿里巴巴淘寶事業(yè)群。日常記錄Linux應(yīng)用開發(fā)、嵌入式操作系統(tǒng)、無線網(wǎng)絡(luò)協(xié)議棧。剛深入使用Java,跟大家一起入門交流。