◆梁潤強(qiáng) 史 偉
基于路由和QoS令牌桶的集中式限速網(wǎng)關(guān)
◆梁潤強(qiáng) 史 偉
(廣東睿江云計(jì)算股份有限公司 廣東 528000)
企業(yè)或數(shù)據(jù)中心的帶寬總是有限的,但是需要服務(wù)的用戶卻不止一個,特別是在當(dāng)前云計(jì)算興起的背景下,云計(jì)算節(jié)點(diǎn)的用戶數(shù)量通常都是巨大的,但是帶寬容量固定,不能由于某個用戶的大流量傳輸擁塞了網(wǎng)絡(luò),導(dǎo)致其他用戶無法正常使用服務(wù)。設(shè)備通訊協(xié)議的設(shè)計(jì)最初只是考慮比較簡單的場景,而到目前為止,組網(wǎng)的環(huán)境復(fù)雜多樣,有公共互聯(lián)網(wǎng),有專線網(wǎng)絡(luò)。而目前興起的云計(jì)算節(jié)點(diǎn)也需要接入到現(xiàn)有的網(wǎng)絡(luò)環(huán)境中,這眾多的網(wǎng)絡(luò)連接在一起,承載傳輸著各種各樣的應(yīng)用流量,而應(yīng)用流量有些需要大帶寬,而有些卻對延時有比較嚴(yán)格的要求,但是這其中幾乎所有的流量都是基于TCP/IP協(xié)議傳輸?shù)?。在這復(fù)雜的環(huán)境中如何實(shí)現(xiàn)資源的合理性調(diào)度、有效性管理和可靠性實(shí)現(xiàn),也就提出了網(wǎng)絡(luò)對服務(wù)質(zhì)量QoS(Quality of Service)的要求。
路由;QoS;令牌桶;限速
下文將簡單介紹QoS中令牌桶算法的工作原理,并且淺顯分析為什么TCP協(xié)議不能簡單地進(jìn)行流量限制而令牌桶算法能很好地為TCP協(xié)議服務(wù),簡述在目前新興的云計(jì)算技術(shù)環(huán)境下如何使用令牌桶技術(shù)比較合理。
我們首先來想想使用何種技術(shù)對流量進(jìn)行控制,一個容易想到的方法:在流量處理設(shè)備上面設(shè)定兩個線程,分別為統(tǒng)計(jì)線程T和報文線理線程P,P線程收到報文的時候,使用該報文上的某個標(biāo)識,例如目標(biāo)IP地址作為索引,首先判斷該IP的速率是否大于設(shè)定值,是的話則丟棄報文,否則讓該IP的當(dāng)前報文數(shù)量加1,且發(fā)送該報文;T線程負(fù)責(zé)對每個IP進(jìn)行速率統(tǒng)計(jì),每一秒鐘使用IP的當(dāng)前報文減去上一秒的報文,得到該IP的速率。
這種簡單粗暴的流量控制方法對UDP協(xié)議的控制沒有問題,但對TCP協(xié)議的控制有一個致命的缺點(diǎn):假如在某個TCP會話傳輸?shù)倪^程中,P線程發(fā)現(xiàn)當(dāng)前速率大于設(shè)定值,那么在T線程得出下一秒速率之前,該會話的所有后續(xù)報文都將會被丟棄,這將會使該會話因?yàn)閬G失過多報文而斷開,無法保證QoS要求的可靠性。
令牌桶是QoS中一種對流量的控制技術(shù),目前大眾普遍認(rèn)可使用這種技術(shù)來實(shí)現(xiàn)對流量的限速需求。令牌桶通過設(shè)定大小固定的裝載一定數(shù)量的令牌的桶,然后設(shè)置向桶添加令牌的速率,當(dāng)有報文需要通行時,需要首先向令牌桶申請取出同等大小數(shù)量的令牌。假如目前桶中沒有足夠的令牌數(shù),則對當(dāng)前報文采取禁止通行或者緩存到隊(duì)列或者做特殊標(biāo)記,以此實(shí)現(xiàn)對流量的控制和監(jiān)管。
令牌桶定義了3個參數(shù):
(1)承諾信息速率(CIR):此為向令牌桶中添加令牌的速率;
(2)承諾突發(fā)量(Bc):此為令牌桶的容量大小;
(3)時間間隔:用來作為測量時間(Tc),用于規(guī)定間隔多長時間向令牌桶加入令牌。
可通過CIR和Bc的關(guān)系計(jì)算得到:Tc=Bc/CIR。比如,將CIR設(shè)置為1000bit/s,如Bc設(shè)為200,那Tc就是200/1000=0.2,也就是200ms。
根據(jù)令牌桶添加速率和令牌桶容量大小算出的間隔時間Tc,每間隔Tc就向令牌桶中添置一定數(shù)量的令牌,假如目前令牌桶已滿,則將多余的令牌丟棄。當(dāng)有大小為n的報文需要通行時,向令牌桶中取出n個令牌,假如令牌數(shù)充足則允許報文通行,否則采取相應(yīng)的限制手段,根據(jù)使用需求的不同,可以將不被允許通行的報文放上緩存隊(duì)列待令牌充足時再允許通行,或者打上顏色標(biāo)記以表示報文的轉(zhuǎn)發(fā)優(yōu)先級。
根據(jù)使用場景的不同,令牌桶設(shè)計(jì)成三種類別,分別為單速雙色的單速單桶令牌桶算法、單速雙桶令牌桶算法和雙速雙桶令牌桶算法。其中,第一種單速單桶比較適合于單純限速的場景,由于單速雙桶令牌桶和雙速雙桶令牌桶算法較為復(fù)雜,下面將只介紹單速單桶令牌桶算法。
(1)設(shè)置好令牌桶的幾個關(guān)鍵參數(shù),包括令牌桶的尺寸大小設(shè)置為a(以字節(jié)byte為單位,一個字節(jié)代表一個令牌),向桶中添加令牌的速率r和緩存隊(duì)列長度L(以字節(jié)為單位)。
(2)每隔1/r秒向桶中添加一個令牌,當(dāng)桶目前的令牌數(shù)大于或等于a時,則將令牌丟棄。
(3)當(dāng)需要使用令牌桶限制速度的流量的報文到達(dá)時,假設(shè)當(dāng)前報文的大小為n(單位為字節(jié)),而當(dāng)前桶中剩余令牌數(shù)為m,則需要考慮下面情況:
①如果n<=m(令牌數(shù)量充足),就從令牌桶中取出n個令牌,數(shù)據(jù)包允許通行并被發(fā)送到網(wǎng)絡(luò)出口;
②如果n>m(令牌數(shù)量不足),那么不會清除令牌,并且認(rèn)為這個數(shù)據(jù)包在流量限制之外。
(4)對于在流量限制外的數(shù)據(jù)包處理方式有三種:一是直接被丟棄;二是排放在緩存隊(duì)列中等待當(dāng)令牌桶中累積了足夠多的令牌時再傳輸,但是如果n>L,數(shù)據(jù)包也將被丟棄;三是它們可以繼續(xù)發(fā)送,但需要做特殊標(biāo)記,比如設(shè)置較低的優(yōu)先級。
采用令牌桶算法實(shí)現(xiàn)流量控制的情況下,是按照1/cir(速率)秒向令牌桶中添加令牌的,當(dāng)不斷到來的TCP報文取空了當(dāng)前令牌桶而被丟棄的時候,令牌桶很快又會被重新填入新的令牌,下一個TCP報文無須等到下一秒鐘而只需要等待令牌桶重新有足夠令牌時就能夠被發(fā)送了,而TCP協(xié)議本身就具備擁塞控制算法,在不斷地通信過程中,發(fā)現(xiàn)某個時刻的報文被丟棄,就會調(diào)整連接雙方的發(fā)送和接收窗口的大小,從而適配實(shí)際可以使用的帶寬。而一個實(shí)際更好的令牌桶實(shí)現(xiàn)方案是,令牌桶無須自主按照固定速率向令牌桶中添加令牌,而只需要在報文到來的時刻,計(jì)算與上一個報文的時間差,再以此計(jì)算需要往令牌桶中添加多少個令牌,這樣的實(shí)現(xiàn)方式更為簡單。
云計(jì)算節(jié)點(diǎn)通常由多個不同的模塊組成,例如計(jì)算資源模塊和網(wǎng)絡(luò)資源模塊,一般情況下的網(wǎng)絡(luò)通信流程是位于計(jì)算資源模塊下的虛擬機(jī)向外發(fā)出報文,再經(jīng)由網(wǎng)絡(luò)資源模塊比如NAT網(wǎng)關(guān)進(jìn)行地址轉(zhuǎn)換后,再按照路由方式轉(zhuǎn)發(fā)至網(wǎng)關(guān)。假如目前需要在云計(jì)算節(jié)點(diǎn)中實(shí)現(xiàn)QoS限速功能,一個實(shí)現(xiàn)是可以在計(jì)算資源模塊中進(jìn)行部署,但是這樣無法實(shí)現(xiàn)多個虛擬機(jī)共用一個公網(wǎng)IP的限速的場景,所以這個限速設(shè)備部署位于網(wǎng)絡(luò)資源模塊和公網(wǎng)網(wǎng)關(guān)之間比較合適。而限速設(shè)備與網(wǎng)絡(luò)資源模塊和公網(wǎng)網(wǎng)關(guān)之間的接入方式,也可以選擇使用串聯(lián)方式或者路由方式,而使用路由方式則較為理想,因?yàn)榇?lián)的方式會造成單點(diǎn)故障,也不靈活,使用基于路由的方式,可以最大限度地符合原先的網(wǎng)絡(luò)架構(gòu)和網(wǎng)絡(luò)標(biāo)準(zhǔn),也具備良好的擴(kuò)展性。
幾十年前設(shè)計(jì)的TCP/IP通信協(xié)議,并沒有考慮到發(fā)展到目前這么復(fù)雜多樣的應(yīng)用場景,而由于組網(wǎng)環(huán)境中的各個節(jié)點(diǎn)分布極為廣闊,各個節(jié)點(diǎn)的網(wǎng)絡(luò)實(shí)現(xiàn)又不盡相同,傳輸?shù)膸捄蛡鬏數(shù)臅r延等等都是千差萬別的,通過連接所有網(wǎng)絡(luò)節(jié)點(diǎn)的傳輸設(shè)備已經(jīng)被大量部署,且這些設(shè)備通常由不同的廠商生產(chǎn),快速且大量地更新這些通信設(shè)備成本極高,實(shí)施難度太大,所以在面對如此復(fù)雜的網(wǎng)絡(luò)環(huán)境和設(shè)備更新手段的諸多限制時,對實(shí)現(xiàn)面向服務(wù)質(zhì)量的網(wǎng)絡(luò)提出了極大的挑戰(zhàn)。
[1]李建寶,桑海.令牌桶算法在IP QoS中的應(yīng)用[J].華南金融電腦,2006,14(04):98-99.
[2]常恒,陳丹,王利存.網(wǎng)絡(luò)QoS技術(shù)研究[J].信息技術(shù),2005(08):11-15.
[3]馬素剛.QoS技術(shù)的研究與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2015,23(22):14-17.
[4]費(fèi)嘉.淺析QoS中的令牌桶算法[J].郵電設(shè)計(jì)技術(shù),2014(06):54-57.