Citrix Netscaler負載均衡算法

  衆所周知,作爲新一代應用交付產品的Citrix Netscaler具有業內領先的數據控制、應用交付的能力,然而作爲根本內容之一的ADC功能,如果不具備強大的、多元化的均衡算法是不可能適應如此衆多的應用場景,更無法做到好的應用交付產品。因此我們在此討論一下比較常用的負載均衡算法就很有必要。

目前最新版本的Netscaler支持17種均衡算法,目前先討論最常用的12種

1輪詢算法(Round Robin

NetScaler 使用輪詢的負載均衡算法時,它會將來自客戶端的請求輪流分配給後臺中的服務器,從1開始,直到N(後臺服務器個數),然後重新開始循環。

如果考慮後臺服務器的處理能力不同,可以給每個服務器分配不同的權值,通過設置權重比率來調整循環調度的機率。

2、最少連接算法(Least Connection

NetScaler 使用最小連接的負載均衡算法時,它是把新的連接請求分配到當前連接數最小的服務器。最小連接算法是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。系統會記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器時,其連接數加1,當連接中止,其連接數減一。

如果考慮後臺服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小連接算法的調度機率。

3、最少響應時間

NetScaler 使用最小響應時間的負載均衡算法時,它是把新的連接請求分配到當前連接數最小並且平均響應時間最小的服務器。最小響應時間算法的調度因素實際上有兩個部分組成,即當前每服務器上的最小連接數和每服務器的平均響應時間(這裏的平均響應時間爲TTFB,即第一個字節到達的時間,對於Http協議爲response code200的第一個字節數據返回的時間),這兩個因子的乘積做爲算法調度的判斷依據。最新的連接請求將被髮送到最小連接數和平均響應時間乘積最小的服務器。

如果考慮後臺服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小享用時間算法的調度機率。

4、最小帶寬算法(Least Bandwidth

NetScaler 使用最小帶寬的負載均衡算法時,它是把新的連接請求分配到當前流量吞吐(單位爲bps)最小的服務器。

如果考慮後臺服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小帶寬算法的調度機率。

5、最少數據包算法(Least Packets

NetScaler 使用最少數據包的負載均衡算法時,它是把新的連接請求分配到數據包最少的服務器。計算最小數據包的方法是過去14秒每個服務器上處理的數據包數量。

如果考慮後臺服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最少數據包算法的調度機率。

6、令牌算法(Token

NetScaler 使用令牌負載均衡算法時,它分發新的連接請求將依據客戶端請求中所附帶的令牌(Token)信息,具備相同令牌的請求將會分配到相同的後臺服務器。令牌算法是一種基於內容信息的調度算法,NetScaler可設置令牌(Token)所在的位置和尺寸,這樣通過搜索到相同的令牌,而將請求發往相同的後臺服務器。

令牌算法可以應用到TCPhttpHttps服務類型,甚至可以實現不同的服務之間的唯一性。對於Http/Https協議,令牌(Token)可以在Http headerURLHttp body中取得。Netscaler可以在TCP Payload前最多24K字節中搜索配置的Token,如果是非Http服務,Netscaler可以在最多前16個數據包中中搜索配置的令牌(Token),但不能超過24K字節。

7URL 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種均衡算法。下面僅以最小連接的加權來討論

最小連接數

NetScaler 使用最小連接的負載均衡算法時,它是把新的連接請求分配到當前連接數最小的服務器。最小連接算法是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。系統會記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器時,其連接數加1,當連接中止,其連接數減一。

如果考慮後臺服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小連接算法的調度機率。

無權重參與

 

service1權重=4


servcie2權重=2





NW=當前連接數*(10000/權重)

service1NW=連接數*2500

service2NW=連接數*5000

加入權重後請求的分配情況

 請求數

service1 NW

service2 NW

當前NW

0

0

0

0

1

2500

0

2500

2

2500

5000

5000

3

5000

5000

10000

4

5000

10000

12500

5

7500

10000

17500

6

10000

10000

20000

7

10000

15000

22500

8

12500

15000

27500

9

15000

15000

30000

10

15000

20000

32500

11

17500

20000

37500

12

20000

20000

40000

13

20000

25000

42500

14

22500

25000

45000

15

25000

25000

47500

16

25000

30000

50000

17

27500

30000

55000

18

30000

30000

57500

19

30000

35000

60000

註釋:

serviceNW相同的時候遵循輪詢算法,這也是導致在第一個週期與權重比例有所不同的原因所在。

當前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





NW=當前連接數*(10000/權重)

service1NW=連接數*2000

service2NW=連接數*10000

 

請求數

service1 NW

service2 NW

當前NW

0

0

0

0

1

2000

0

2000

2

2000

10000

4000

3

4000

10000

14000

4

6000

10000

16000

5

8000

10000

18000

6

10000

10000

20000

7

10000

20000

22000

8

12000

20000

32000

9

14000

20000

34000

10

16000

20000

36000

11

18000

20000

38000

12

20000

20000

40000

13

20000

30000

42000

14

22000

30000

52000

15

24000

30000

54000

16

26000

30000

56000

17

28000

30000

58000

18

30000

30000

60000

19

32000

30000

62000


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章