負載均衡(Load Balance),其意思就是將負載(工作任務)進行平衡、分攤到多個操作單元上進行執(zhí)行。在負載均衡中可以分為兩種方式,硬件方式與軟件方式。硬件負載均衡主要是有 F5、思科,軟件方式(不區(qū)分四層與七層負載均衡)主要包括 http 重定向、DNS 重定向、反向代理(如 nginx)、NAT 轉換等。
WRR 算法
假設有3臺機器a、b、c,權重分別為5,1,1, WRR(Weighted Round Robin)算法實現(xiàn)方式是:每次選出權重最大的機器,其權重減 1,直到權重全部為 0。然后按照生成的序列循環(huán)。
最終得到的循環(huán)序列為:a,a,a,a,a,b,c,雖然此時負載是均衡的(5:1:1),但是前五次訪問都打到 a 機器,b 和 c 機器是空閑的。理想狀態(tài)是在均衡的情況下讓訪問次數(shù)也均衡分布,于是就有了 SWRR 算法(Smooth Weighted Round Robin),平滑加權輪訓調(diào)度算法。
SWRR 算法
對于上面的案例,SWRR 算法策略是:
1、從權重中選出最大的,減去總權重
2、然后再給每個權重加上自身權重初始值
3、再次輪訓,直到權重為 0,確定序列
得到的最終循環(huán)序列是:a,a,b,a,c,a,a,訪問效果比 WRR 算法更優(yōu)。
但是 SWRR 算法在大量并發(fā)來臨的時候,第一次始終會選擇 a 機器,就有可能導致 a 機器癱瘓。解決方案為:對于生成的序列隨機選擇一個開始,比如有 5 臺負載的機器,都生成了 a,a,b,a,c,a,a 的序列,但是每臺機器不完全按照這個序列輪訓,而是隨機選擇一個開始,那生成的序列就可能變成下面這樣:
這樣能降低流量突增時第一臺機器被打癱瘓的概率。