Citrix Netscaler负载均衡算法
Citrix Netscaler負(fù)載均衡算法
http://blog.51cto.com/caojin/1926308
?
眾所周知,作為新一代應(yīng)用交付產(chǎn)品的Citrix Netscaler具有業(yè)內(nèi)領(lǐng)先的數(shù)據(jù)控制、應(yīng)用交付的能力,然而作為根本內(nèi)容之一的ADC功能,如果不具備強(qiáng)大的、多元化的均衡算法是不可能適應(yīng)如此眾多的應(yīng)用場景,更無法做到好的應(yīng)用交付產(chǎn)品。因此我們在此討論一下比較常用的負(fù)載均衡算法就很有必要。
目前最新版本的Netscaler支持17種均衡算法,目前先討論最常用的12種
1、輪詢算法(Round Robin)
當(dāng)NetScaler?使用輪詢的負(fù)載均衡算法時(shí),它會(huì)將來自客戶端的請求輪流分配給后臺(tái)中的服務(wù)器,從1開始,直到N(后臺(tái)服務(wù)器個(gè)數(shù)),然后重新開始循環(huán)。
如果考慮后臺(tái)服務(wù)器的處理能力不同,可以給每個(gè)服務(wù)器分配不同的權(quán)值,通過設(shè)置權(quán)重比率來調(diào)整循環(huán)調(diào)度的機(jī)率。
2、最少連接算法(Least Connection)
當(dāng)NetScaler?使用最小連接的負(fù)載均衡算法時(shí),它是把新的連接請求分配到當(dāng)前連接數(shù)最小的服務(wù)器。最小連接算法是一種動(dòng)態(tài)調(diào)度算法,它通過服務(wù)器當(dāng)前所活躍的連接數(shù)來估計(jì)服務(wù)器的負(fù)載情況。系統(tǒng)會(huì)記錄各個(gè)服務(wù)器已建立連接的數(shù)目,當(dāng)一個(gè)請求被調(diào)度到某臺(tái)服務(wù)器時(shí),其連接數(shù)加1,當(dāng)連接中止,其連接數(shù)減一。
如果考慮后臺(tái)服務(wù)器的處理能力不同,也可以給每個(gè)服務(wù)器分配不同的權(quán)值,通過設(shè)置權(quán)重比率來調(diào)整最小連接算法的調(diào)度機(jī)率。
3、最少響應(yīng)時(shí)間
當(dāng)NetScaler?使用最小響應(yīng)時(shí)間的負(fù)載均衡算法時(shí),它是把新的連接請求分配到當(dāng)前連接數(shù)最小并且平均響應(yīng)時(shí)間最小的服務(wù)器。最小響應(yīng)時(shí)間算法的調(diào)度因素實(shí)際上有兩個(gè)部分組成,即當(dāng)前每服務(wù)器上的最小連接數(shù)和每服務(wù)器的平均響應(yīng)時(shí)間(這里的平均響應(yīng)時(shí)間為TTFB,即第一個(gè)字節(jié)到達(dá)的時(shí)間,對于Http協(xié)議為response code為200的第一個(gè)字節(jié)數(shù)據(jù)返回的時(shí)間),這兩個(gè)因子的乘積做為算法調(diào)度的判斷依據(jù)。最新的連接請求將被發(fā)送到最小連接數(shù)和平均響應(yīng)時(shí)間乘積最小的服務(wù)器。
如果考慮后臺(tái)服務(wù)器的處理能力不同,也可以給每個(gè)服務(wù)器分配不同的權(quán)值,通過設(shè)置權(quán)重比率來調(diào)整最小享用時(shí)間算法的調(diào)度機(jī)率。
4、最小帶寬算法(Least Bandwidth)
當(dāng)NetScaler?使用最小帶寬的負(fù)載均衡算法時(shí),它是把新的連接請求分配到當(dāng)前流量吞吐(單位為bps)最小的服務(wù)器。
如果考慮后臺(tái)服務(wù)器的處理能力不同,也可以給每個(gè)服務(wù)器分配不同的權(quán)值,通過設(shè)置權(quán)重比率來調(diào)整最小帶寬算法的調(diào)度機(jī)率。
5、最少數(shù)據(jù)包算法(Least Packets)
當(dāng)NetScaler?使用最少數(shù)據(jù)包的負(fù)載均衡算法時(shí),它是把新的連接請求分配到數(shù)據(jù)包最少的服務(wù)器。計(jì)算最小數(shù)據(jù)包的方法是過去14秒每個(gè)服務(wù)器上處理的數(shù)據(jù)包數(shù)量。
如果考慮后臺(tái)服務(wù)器的處理能力不同,也可以給每個(gè)服務(wù)器分配不同的權(quán)值,通過設(shè)置權(quán)重比率來調(diào)整最少數(shù)據(jù)包算法的調(diào)度機(jī)率。
6、令牌算法(Token)
當(dāng)NetScaler?使用令牌負(fù)載均衡算法時(shí),它分發(fā)新的連接請求將依據(jù)客戶端請求中所附帶的令牌(Token)信息,具備相同令牌的請求將會(huì)分配到相同的后臺(tái)服務(wù)器。令牌算法是一種基于內(nèi)容信息的調(diào)度算法,NetScaler可設(shè)置令牌(Token)所在的位置和尺寸,這樣通過搜索到相同的令牌,而將請求發(fā)往相同的后臺(tái)服務(wù)器。
令牌算法可以應(yīng)用到TCP、http和Https服務(wù)類型,甚至可以實(shí)現(xiàn)不同的服務(wù)之間的唯一性。對于Http/Https協(xié)議,令牌(Token)可以在Http header或URL或Http body中取得。Netscaler可以在TCP Payload前最多24K字節(jié)中搜索配置的Token,如果是非Http服務(wù),Netscaler可以在最多前16個(gè)數(shù)據(jù)包中中搜索配置的令牌(Token),但不能超過24K字節(jié)。
7、URL Hash算法
URL散列(Hash)負(fù)載均衡算法常用于緩存(Cache)環(huán)境,當(dāng)NetScaler?使用URL散列(Hash)負(fù)載均衡算法時(shí),NetScaler通過一個(gè)散列(Hash)函數(shù)將此連接請求的URL信息進(jìn)行計(jì)算并將計(jì)算值緩存在系統(tǒng)中,同時(shí)映射到后臺(tái)某個(gè)服務(wù)器。隨后基于URL信息做為散列鍵(Hash Key)進(jìn)行Hash計(jì)算得到相同值的請求,均發(fā)送到這個(gè)后臺(tái)服務(wù)器。
8、域名?Hash算法
當(dāng)NetScaler?使用域名散列(Hash)負(fù)載均衡算法時(shí),NetScaler通過一個(gè)散列(Hash)函數(shù)將此連接請求的域名(Domain)信息進(jìn)行計(jì)算并將計(jì)算值緩存在系統(tǒng)中,同時(shí)映射到后臺(tái)某個(gè)服務(wù)器。隨后基于域名信息做為散列鍵(Hash Key)進(jìn)行Hash計(jì)算得到相同值的請求,均發(fā)送到這個(gè)后臺(tái)服務(wù)器。
9、源IP地址?Hash算法
當(dāng)NetScaler?使用源IP地址散列(Hash)負(fù)載均衡算法時(shí),NetScaler通過一個(gè)散列(Hash)函數(shù)將此連接請求的源IP地址信息進(jìn)行計(jì)算并將計(jì)算值緩存在系統(tǒng)中,同時(shí)映射到后臺(tái)某個(gè)服務(wù)器。隨后基于源IP地址做為散列鍵(Hash Key)進(jìn)行Hash計(jì)算得到相同值的請求,均發(fā)送到這個(gè)后臺(tái)服務(wù)器。
10、目的IP地址Hash算法
當(dāng)NetScaler?使用目的IP地址散列(Hash)負(fù)載均衡算法時(shí),NetScaler通過一個(gè)散列(Hash)函數(shù)將此連接請求的目的IP地址信息進(jìn)行計(jì)算并將計(jì)算值緩存在系統(tǒng)中,同時(shí)映射到后臺(tái)某個(gè)服務(wù)器。隨后基于目的IP地址做為散列鍵(Hash Key)進(jìn)行Hash計(jì)算得到相同值的請求,均發(fā)送到這個(gè)后臺(tái)服務(wù)器。
11、源IP和目的IP地址?hash算法
當(dāng)NetScaler?使用源IP和目的IP地址散列(Hash)負(fù)載均衡算法時(shí),NetScaler通過一個(gè)散列(Hash)函數(shù)將此連接請求的源IP地址和目的IP地址信息進(jìn)行計(jì)算并將計(jì)算值緩存在系統(tǒng)中,同時(shí)映射到后臺(tái)某個(gè)服務(wù)器。隨后基于源IP地址和目的IP地址做為散列鍵(Hash Key)進(jìn)行Hash計(jì)算得到相同值的請求,均發(fā)送到這個(gè)后臺(tái)服務(wù)器。
源IP地址和目的IP地址散列(Hash)算法常應(yīng)用在防火墻集群負(fù)載均衡環(huán)境中,它們可以保證流量出入的唯一性。
12、自定義的基于SNMP的判斷算法(Custom Load)
當(dāng)NetScaler?使用自定義負(fù)載均衡算法時(shí),NetScaler按照自定義策略通過SNMP協(xié)議獲取相關(guān)服務(wù)器運(yùn)行參數(shù),例如CPU利用率、內(nèi)存使用、服務(wù)器連接和響應(yīng)時(shí)間等多種信息,最終通過預(yù)先策略設(shè)定的參數(shù)矩陣(metric)來決定新的連接請求發(fā)送給哪一臺(tái)后臺(tái)服務(wù)器。
??也許有人會(huì)問怎么Netscaler不支持加權(quán)算法?在其他ADC里面加權(quán)會(huì)作為一種單獨(dú)的算法出現(xiàn),也就只能支持一兩種而已。但是在Netscaler,加權(quán)是在service的設(shè)定,會(huì)和其他已有的算法結(jié)合,從某種程度上講就變成更多的算法,也就變成了12+12加權(quán)=24種均衡算法。下面僅以最小連接的加權(quán)來討論
最小連接數(shù)
當(dāng)NetScaler?使用最小連接的負(fù)載均衡算法時(shí),它是把新的連接請求分配到當(dāng)前連接數(shù)最小的服務(wù)器。最小連接算法是一種動(dòng)態(tài)調(diào)度算法,它通過服務(wù)器當(dāng)前所活躍的連接數(shù)來估計(jì)服務(wù)器的負(fù)載情況。系統(tǒng)會(huì)記錄各個(gè)服務(wù)器已建立連接的數(shù)目,當(dāng)一個(gè)請求被調(diào)度到某臺(tái)服務(wù)器時(shí),其連接數(shù)加1,當(dāng)連接中止,其連接數(shù)減一。
如果考慮后臺(tái)服務(wù)器的處理能力不同,也可以給每個(gè)服務(wù)器分配不同的權(quán)值,通過設(shè)置權(quán)重比率來調(diào)整最小連接算法的調(diào)度機(jī)率。
無權(quán)重參與
?
| service1權(quán)重=4 | ? | |
| servcie2權(quán)重=2 | ? | |
| ? | ? | ? |
| NW=當(dāng)前連接數(shù)*(10000/權(quán)重) | ||
| service1NW=連接數(shù)*2500 | ||
| service2NW=連接數(shù)*5000 | ||
加入權(quán)重后請求的分配情況
| 請求數(shù) | service1 NW | service2 NW | 當(dāng)前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 |
注釋:
當(dāng)service的NW相同的時(shí)候遵循輪詢算法,這也是導(dǎo)致在第一個(gè)周期與權(quán)重比例有所不同的原因所在。
當(dāng)前NW的計(jì)算方法:NW=當(dāng)前連接數(shù)*(10000/權(quán)重)但在計(jì)算系統(tǒng)當(dāng)前NW(不是service的NW)時(shí)會(huì)利用上次索取Service的權(quán)重來進(jìn)行計(jì)算。例如請求3-》4,由于請求3落在service1,servcie1的權(quán)重是4(10000/4=2500)那么在計(jì)算第4個(gè)請求的NW就用上次NW+10000/權(quán)重=12500。在4-》5的時(shí)候由于上次落在了service2上,那計(jì)算第5個(gè)請求的NW就用上次NW+10000/權(quán)重(用servcie2的權(quán)重)=17500。
?
為了明確看出權(quán)重的影響,下表以1:5的權(quán)重來體現(xiàn)
| service1權(quán)重=5 | ? | |
| servcie2權(quán)重=1 | ? | |
| ? | ? | ? |
| NW=當(dāng)前連接數(shù)*(10000/權(quán)重) | ||
| service1NW=連接數(shù)*2000 | ||
| service2NW=連接數(shù)*10000 | ||
?
| 請求數(shù) | service1 NW | service2 NW | 當(dāng)前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 ? |
?
總結(jié)
以上是生活随笔為你收集整理的Citrix Netscaler负载均衡算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bash中的whereis
- 下一篇: 12月9日 php环境的安装和基本知识的