負(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ī)器被打癱瘓的概率。