衆所周知,作為新一代應用傳遞産品的Citrix Netscaler具有業内領先的資料控制、應用傳遞的能力,然而作為根本内容之一的ADC功能,如果不具備強大的、多元化的均衡算法是不可能适應如此衆多的應用場景,更無法做到好的應用傳遞産品。是以我們在此讨論一下比較常用的負載均衡算法就很有必要。
目前最新版本的Netscaler支援17種均衡算法,目前先讨論最常用的12種
1、輪詢算法(Round Robin)
當NetScaler 使用輪詢的負載均衡算法時,它會将來自用戶端的請求輪流配置設定給背景中的伺服器,從1開始,直到N(背景伺服器個數),然後重新開始循環。
如果考慮背景伺服器的處理能力不同,可以給每個伺服器配置設定不同的權值,通過設定權重比率來調整循環排程的機率。
2、最少連接配接算法(Least Connection)
當NetScaler 使用最小連接配接的負載均衡算法時,它是把新的連接配接請求配置設定到目前連接配接數最小的伺服器。最小連接配接算法是一種動态排程算法,它通過伺服器目前所活躍的連接配接數來估計伺服器的負載情況。系統會記錄各個伺服器已建立連接配接的數目,當一個請求被排程到某台伺服器時,其連接配接數加1,當連接配接中止,其連接配接數減一。
如果考慮背景伺服器的處理能力不同,也可以給每個伺服器配置設定不同的權值,通過設定權重比率來調整最小連接配接算法的排程機率。
3、最少響應時間
當NetScaler 使用最小響應時間的負載均衡算法時,它是把新的連接配接請求配置設定到目前連接配接數最小并且平均響應時間最小的伺服器。最小響應時間算法的排程因素實際上有兩個部分組成,即目前每伺服器上的最小連接配接數和每伺服器的平均響應時間(這裡的平均響應時間為TTFB,即第一個位元組到達的時間,對于Http協定為response code為200的第一個位元組資料傳回的時間),這兩個因子的乘積做為算法排程的判斷依據。最新的連接配接請求将被發送到最小連接配接數和平均響應時間乘積最小的伺服器。
如果考慮背景伺服器的處理能力不同,也可以給每個伺服器配置設定不同的權值,通過設定權重比率來調整最小享用時間算法的排程機率。
4、最小帶寬算法(Least Bandwidth)
當NetScaler 使用最小帶寬的負載均衡算法時,它是把新的連接配接請求配置設定到目前流量吞吐(機關為bps)最小的伺服器。
如果考慮背景伺服器的處理能力不同,也可以給每個伺服器配置設定不同的權值,通過設定權重比率來調整最小帶寬算法的排程機率。
5、最少資料包算法(Least Packets)
當NetScaler 使用最少資料包的負載均衡算法時,它是把新的連接配接請求配置設定到資料包最少的伺服器。計算最小資料包的方法是過去14秒每個伺服器上處理的資料包數量。
如果考慮背景伺服器的處理能力不同,也可以給每個伺服器配置設定不同的權值,通過設定權重比率來調整最少資料包算法的排程機率。
6、令牌算法(Token)
當NetScaler 使用令牌負載均衡算法時,它分發新的連接配接請求将依據用戶端請求中所附帶的令牌(Token)資訊,具備相同令牌的請求将會配置設定到相同的背景伺服器。令牌算法是一種基于内容資訊的排程算法,NetScaler可設定令牌(Token)所在的位置和尺寸,這樣通過搜尋到相同的令牌,而将請求發往相同的背景伺服器。
令牌算法可以應用到TCP、http和Https服務類型,甚至可以實作不同的服務之間的唯一性。對于Http/Https協定,令牌(Token)可以在Http header或URL或Http body中取得。Netscaler可以在TCP Payload前最多24K位元組中搜尋配置的Token,如果是非Http服務,Netscaler可以在最多前16個資料包中中搜尋配置的令牌(Token),但不能超過24K位元組。
7、URL Hash算法
URL散列(Hash)負載均衡算法常用于緩存(Cache)環境,當NetScaler 使用URL散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數将此連接配接請求的URL資訊進行計算并将計算值緩存在系統中,同時映射到背景某個伺服器。随後基于URL資訊做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個背景伺服器。
8、域名 Hash算法
當NetScaler 使用域名散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數将此連接配接請求的域名(Domain)資訊進行計算并将計算值緩存在系統中,同時映射到背景某個伺服器。随後基于域名資訊做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個背景伺服器。
9、源IP位址 Hash算法
當NetScaler 使用源IP位址散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數将此連接配接請求的源IP位址資訊進行計算并将計算值緩存在系統中,同時映射到背景某個伺服器。随後基于源IP位址做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個背景伺服器。
10、目的IP位址Hash算法
當NetScaler 使用目的IP位址散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數将此連接配接請求的目的IP位址資訊進行計算并将計算值緩存在系統中,同時映射到背景某個伺服器。随後基于目的IP位址做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個背景伺服器。
11、源IP和目的IP位址 hash算法
當NetScaler 使用源IP和目的IP位址散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數将此連接配接請求的源IP位址和目的IP位址資訊進行計算并将計算值緩存在系統中,同時映射到背景某個伺服器。随後基于源IP位址和目的IP位址做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個背景伺服器。
源IP位址和目的IP位址散列(Hash)算法常應用在防火牆叢集負載均衡環境中,它們可以保證流量出入的唯一性。
12、自定義的基于SNMP的判斷算法(Custom Load)
當NetScaler 使用自定義負載均衡算法時,NetScaler按照自定義政策通過SNMP協定擷取相關伺服器運作參數,例如CPU使用率、記憶體使用、伺服器連接配接和響應時間等多種資訊,最終通過預先政策設定的參數矩陣(metric)來決定新的連接配接請求發送給哪一台背景伺服器。
也許有人會問怎麼Netscaler不支援權重算法?在其他ADC裡面權重會作為一種單獨的算法出現,也就隻能支援一兩種而已。但是在Netscaler,權重是在service的設定,會和其他已有的算法結合,從某種程度上講就變成更多的算法,也就變成了12+12權重=24種均衡算法。下面僅以最小連接配接的權重來讨論
最小連接配接數
無權重參與
service1權重=4
servcie2權重=2
NW=目前連接配接數*(10000/權重)
service1NW=連接配接數*2500
service2NW=連接配接數*5000
加入權重後請求的配置設定情況
請求數
service1 NW
service2 NW
目前NW
1
2500
2
5000
3
10000
4
12500
5
7500
17500
6
20000
7
15000
22500
8
27500
9
30000
10
32500
11
37500
12
40000
13
25000
42500
14
45000
15
47500
16
50000
17
55000
18
57500
19
35000
60000
注釋:
當service的NW相同的時候遵循輪詢算法,這也是導緻在第一個周期與權重比例有所不同的原因所在。
目前NW的計算方法:NW=目前連接配接數*(10000/權重)但在計算系統目前NW(不是service的NW)時會利用上次索取Service的權重來進行計算。例如請求3-》4,由于請求3落在service1,servcie1的權重是4(10000/4=2500)那麼在計算第4個請求的NW就用上次NW+10000/權重=12500。在4-》5的時候由于上次落在了service2上,那計算第5個請求的NW就用上次NW+10000/權重(用servcie2的權重)=17500。
為了明确看出權重的影響,下表以1:5的權重來展現
service1權重=5
servcie2權重=1
service1NW=連接配接數*2000
service2NW=連接配接數*10000
請求數
2000
4000
14000
6000
16000
8000
18000
22000
12000
32000
34000
36000
38000
42000
52000
24000
54000
26000
56000
28000
58000
62000