發(fā)布于:2021-01-07 15:47:22
0
177
0
當(dāng)涉及到負(fù)載平衡時,輪詢可能不是最佳選擇。如果安裝了自動縮放功能,那就更糟了。在本文中,請看一個簡單的示例,解釋為什么會這樣,輪詢算法如何工作,以及應(yīng)該為平均流量分配而潛在選擇的負(fù)載平衡算法。
根據(jù)我們的經(jīng)驗,我們認(rèn)為輪詢可能不是一種有效的負(fù)載平衡算法,因為它不會在所有節(jié)點之間平均分配流量。
您可能想知道這怎么可能?對的,這是可能的!
循環(huán)負(fù)載均衡算法如何工作?
循環(huán)算法按接收請求的順序在節(jié)點之間發(fā)送請求。這是一個簡單的例子。假設(shè)您有3個節(jié)點:節(jié)點A,節(jié)點B和節(jié)點C。
第一個請求發(fā)送到節(jié)點A。
第二個請求發(fā)送到節(jié)點B。
第三請求被發(fā)送到節(jié)點C。
負(fù)載平衡器將繼續(xù)根據(jù)此順序?qū)⒄埱蟀l(fā)送到服務(wù)器。似乎流量將在節(jié)點之間平均分配。但這不是事實。
循環(huán)算法有什么問題?
讓我們舉一個簡單的例子。假設(shè)您使用負(fù)載均衡器啟動了Web應(yīng)用程序,并且它后面有兩個節(jié)點(node-A,node-B)。負(fù)載平衡器配置為以循環(huán)算法運行,并且啟用了粘性會話負(fù)載平衡。假設(shè)當(dāng)前有200個用戶在使用您的應(yīng)用程序。
由于在負(fù)載均衡器中啟用了循環(huán)算法,因此每個節(jié)點將獲得100個用戶的請求。
幾分鐘后,添加節(jié)點C。假設(shè)現(xiàn)在有另外100個用戶開始使用該應(yīng)用程序。由于它是循環(huán)算法,因此負(fù)載均衡器會將新用戶的請求平均分配給所有3個節(jié)點(即,每個節(jié)點33個用戶的請求)。
但是請記住,節(jié)點A和節(jié)點B已經(jīng)分別處理100個用戶請求。因此,現(xiàn)在節(jié)點A和節(jié)點B最終將分別處理133個用戶請求(即100個原始用戶請求+ 33個新用戶請求),而節(jié)點C將僅處理33個(新)用戶請求?,F(xiàn)在,您知道為什么輪詢機(jī)制不能平均分配流量嗎?
在循環(huán)算法中,池中較舊的節(jié)點將總是最終處理更多的請求。新添加的節(jié)點最終將處理更少的流量。負(fù)載永遠(yuǎn)不會平均分配。為了維護(hù),修補和安裝目的,您必須不斷地從負(fù)載均衡器池中添加和刪除節(jié)點。
如果您安裝了自動縮放功能,問題將變得更加嚴(yán)重。在自動縮放中,節(jié)點更加動態(tài)。它們被添加和刪除的頻率更高。
使用什么算法?
負(fù)載平衡算法有多種:加權(quán)循環(huán),隨機(jī),源IP,URL,最少連接,最少流量和最小延遲。
考慮到循環(huán)輪詢的缺點,您可以考慮嘗試其他選擇。
您可能考慮的一種選擇是:“最少連接數(shù)”算法。根據(jù)此算法,連接數(shù)最少的節(jié)點將獲得下一個請求。因此,按照我們前面的示例,當(dāng)新的100個用戶開始使用該應(yīng)用程序時,所有新用戶的請求都將發(fā)送到節(jié)點C。因此,負(fù)載將在所有節(jié)點之間平均分配。