技術(shù)領(lǐng)域
本申請(qǐng)涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)流量限制的方法,以及一種數(shù)據(jù)流量限制的系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的普及,產(chǎn)生的數(shù)據(jù)量也呈指數(shù)級(jí)增長(zhǎng),數(shù)據(jù)處理需要消耗的資源也日趨龐大,而在云計(jì)算平臺(tái)大力發(fā)展的今天,資源的高效利用至關(guān)重要,要達(dá)到這一目標(biāo),資源隔離技術(shù)是其中重要一環(huán)。資源隔離是指為不同任務(wù)提供可獨(dú)立使用的計(jì)算資源,以避免它們之間互相干擾。
現(xiàn)有的資源隔離技術(shù)中,基于進(jìn)程的Cgroup(Control groups,控制族群)使用得比較廣泛。Cgroup是Linux內(nèi)核提供的一種可以隔離進(jìn)程物理資源(如CPU,內(nèi)存,IO等)的機(jī)制,Cgroup整合了現(xiàn)有的cpuset,Memory,net_cls等子系統(tǒng),使得Cgroups適用于從單個(gè)進(jìn)程的資源控制到實(shí)現(xiàn)操作系統(tǒng)層次的虛擬化等多種應(yīng)用場(chǎng)景。
其中,net_cls子系統(tǒng)用于對(duì)單個(gè)進(jìn)程進(jìn)行網(wǎng)絡(luò)帶寬控制,它不會(huì)直接控制網(wǎng)絡(luò)讀寫(xiě),而是使用等級(jí)識(shí)別符classid標(biāo)記網(wǎng)絡(luò)數(shù)據(jù)包,讓linux流量控制程序Traffic Control(簡(jiǎn)稱TC)識(shí)別Cgroup中任務(wù)生成的數(shù)據(jù)包以進(jìn)行限流。
然而,net_cls使用前必須先配置linux cgroups和Traffic Control模塊。在一些實(shí)驗(yàn)性的測(cè)試中,單純的Cgroup網(wǎng)絡(luò)隔離效果并不是很好,網(wǎng)絡(luò)帶寬使用波動(dòng)較大,而且由于Cgroup是內(nèi)核自帶的模塊,因此靈活性有天生的限制,不能很好的滿足網(wǎng)絡(luò)資源的多樣化需求。
因此,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問(wèn)題就是:如何提出一種適用性強(qiáng)的網(wǎng)絡(luò)隔離方案,用以提高網(wǎng)絡(luò)隔離的穩(wěn)定性。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例所要解決的技術(shù)問(wèn)題是提供一種數(shù)據(jù)流量限制的方法,用以提高網(wǎng)絡(luò)隔離的穩(wěn)定性。
相應(yīng)的,本申請(qǐng)實(shí)施例還提供了一種數(shù)據(jù)流量限制的系統(tǒng),用以保證上述方法的實(shí)現(xiàn)及應(yīng)用。
為了解決上述問(wèn)題,本申請(qǐng)實(shí)施例公開(kāi)了一種數(shù)據(jù)流量限制的方法,所述的方法包括:
在應(yīng)用層確定業(yè)務(wù)對(duì)象對(duì)應(yīng)的一個(gè)或多個(gè)父進(jìn)程對(duì)象;
分別采用所述父進(jìn)程對(duì)象創(chuàng)建一個(gè)或多個(gè)對(duì)應(yīng)的子進(jìn)程對(duì)象,并為所述一個(gè)或多個(gè)子進(jìn)程對(duì)象分配最大輸入輸出I/O帶寬閾值;
當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述子進(jìn)程具有子進(jìn)程標(biāo)識(shí),在所述當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制的步驟之前,還包括:
采用所述父進(jìn)程對(duì)象將所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,所述限流規(guī)則包括所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
優(yōu)選地,所述當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制的步驟包括:
采用父進(jìn)程對(duì)象預(yù)先創(chuàng)建socket描述符fd,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;
采用所述父進(jìn)程對(duì)象將所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程 標(biāo)識(shí)發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進(jìn)程對(duì)象將所述socket fd發(fā)送至對(duì)應(yīng)的子進(jìn)程中;
當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象采用所述socket fd輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使所述操作系統(tǒng)內(nèi)核層完成如下操作:
所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),獲得對(duì)應(yīng)的socket結(jié)構(gòu)體;
當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述方法還包括:
自適應(yīng)調(diào)整所述子進(jìn)程對(duì)象的最大I/O帶寬閾值,包括:
確定父層級(jí)的最大I/O帶寬閾值,其中,所述父層級(jí)是在所述子進(jìn)程對(duì)象的級(jí)別之上的對(duì)象,包括業(yè)務(wù)對(duì)象或物理機(jī)器;
若所述父層級(jí)所包含的所有子進(jìn)程對(duì)象的最大I/O帶寬閾值的總和大于所述父層級(jí)的最大I/O帶寬閾值,則根據(jù)所述子進(jìn)程對(duì)象的數(shù)量,計(jì)算每個(gè)子進(jìn)程對(duì)象所分配的第一平均帶寬閾值;
若所述子進(jìn)程對(duì)象的最大I/O帶寬閾值小于所述第一平均帶寬閾值,則保持所述子進(jìn)程對(duì)象的最大I/O帶寬閾值不變;
若所述子進(jìn)程對(duì)象的最大I/O帶寬閾值大于所述第一平均帶寬閾值,則計(jì)算第二平均帶寬閾值,并將所述子進(jìn)程對(duì)象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值,其中,所述第二平均帶寬閾值按照如下方式計(jì)算:(所述父層級(jí)的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的數(shù)量)。
本申請(qǐng)實(shí)施例還公開(kāi)了一種數(shù)據(jù)流量限制的方法,所述的方法包括:
在操作系統(tǒng)內(nèi)核層接收父進(jìn)程對(duì)象發(fā)送的與一個(gè)或多個(gè)子進(jìn)程對(duì)象對(duì)應(yīng)的最大輸入輸出I/O帶寬閾值,其中,所述父進(jìn)程對(duì)象與業(yè)務(wù)對(duì)象關(guān)聯(lián),所述子進(jìn)程對(duì)象是采用所述父進(jìn)程對(duì)象創(chuàng)建的進(jìn)程對(duì)象,所述最大I/O帶寬閾值是所述父進(jìn)程對(duì)象創(chuàng)建子進(jìn)程對(duì)象時(shí)為所述子進(jìn)程對(duì)象分配的帶寬閾值;
當(dāng)接收到所述子進(jìn)程對(duì)象發(fā)送的輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),依據(jù)所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述子進(jìn)程具有子進(jìn)程標(biāo)識(shí),在所述當(dāng)接收到所述子進(jìn)程對(duì)象發(fā)送的輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),依據(jù)所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制的步驟之前,還包括:
創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,所述限流規(guī)則包括所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
優(yōu)選地,所述當(dāng)接收到所述子進(jìn)程對(duì)象發(fā)送的輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),依據(jù)所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制的步驟的步驟包括:
接收父進(jìn)程對(duì)象發(fā)送的預(yù)先創(chuàng)建的socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),其中,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;
根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),獲取到對(duì)應(yīng)的socket結(jié)構(gòu)體;
接收子進(jìn)程對(duì)象采用所述socket fd輸入或輸出的網(wǎng)絡(luò)數(shù)據(jù)包;
當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配 的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制的步驟包括:
獲取所述網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)際數(shù)據(jù)流量;
基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得對(duì)應(yīng)的最大I/O帶寬閾值;
若所述實(shí)際數(shù)據(jù)流量小于所述最大I/O帶寬閾值,則按照所述實(shí)際數(shù)據(jù)流量進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送;
若所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,則按照所述最大I/O帶寬閾值進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送。
優(yōu)選地,所述方法還包括:
若所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實(shí)際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對(duì)應(yīng)的數(shù)據(jù),放置在預(yù)設(shè)大小的緩存區(qū)域中;
若所述緩存區(qū)域中存儲(chǔ)的數(shù)據(jù)量大小為所述預(yù)設(shè)大小,則向所述子進(jìn)程對(duì)象發(fā)出錯(cuò)誤提示。
優(yōu)選地,所述方法還包括:
若檢測(cè)到所述子進(jìn)程對(duì)象被刪除,則刪除對(duì)應(yīng)的限流規(guī)則。
本申請(qǐng)實(shí)施例還公開(kāi)了一種數(shù)據(jù)流量限制的系統(tǒng),所述的系統(tǒng)包括:
父進(jìn)程確定模塊,用于在應(yīng)用層確定業(yè)務(wù)對(duì)象對(duì)應(yīng)的一個(gè)或多個(gè)父進(jìn)程對(duì)象;
子進(jìn)程創(chuàng)建模塊,用于分別采用所述父進(jìn)程對(duì)象創(chuàng)建一個(gè)或多個(gè)對(duì)應(yīng)的子進(jìn)程對(duì)象,并為所述一個(gè)或多個(gè)子進(jìn)程對(duì)象分配最大輸入輸出I/O帶寬閾值;
第一流量限制模塊,用于在檢測(cè)到所述子進(jìn)程對(duì)象輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述子進(jìn)程具有子進(jìn)程標(biāo)識(shí),所述系統(tǒng)還包括:
信息發(fā)送模塊,用于采用所述父進(jìn)程對(duì)象將所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,所述限流規(guī)則包括所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
優(yōu)選地,所述第一流量限制模塊包括:
描述符獲取子模塊,用于采用父進(jìn)程對(duì)象預(yù)先創(chuàng)建socket描述符fd,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;;
描述符發(fā)送子模塊,用于采用所述父進(jìn)程對(duì)象將所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進(jìn)程對(duì)象將所述socket fd發(fā)送至對(duì)應(yīng)的子進(jìn)程中,當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象采用所述socket fd輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使所述操作系統(tǒng)內(nèi)核層完成如下操作:
所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),獲得對(duì)應(yīng)的socket結(jié)構(gòu)體;
當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述系統(tǒng)還包括:
調(diào)整模塊,用于自適應(yīng)調(diào)整所述子進(jìn)程對(duì)象的最大I/O帶寬閾值;
所述調(diào)整模塊進(jìn)一步包括:
父層級(jí)閾值確定子模塊,用于確定父層級(jí)的最大I/O帶寬閾值,其中,所述父層級(jí)為在所述子進(jìn)程對(duì)象的級(jí)別之上的對(duì)象,包括業(yè)務(wù)對(duì)象或物理機(jī)器;
平均值計(jì)算子模塊,用于在所述父層級(jí)所包含的所有子進(jìn)程對(duì)象的最大I/O帶寬閾值的總和大于所述父層級(jí)的最大I/O帶寬閾值時(shí),根據(jù)所述子進(jìn)程對(duì)象的數(shù)量,計(jì)算每個(gè)子進(jìn)程對(duì)象所分配的第一平均帶寬閾值;
閾值保持子模塊,用于在所述子進(jìn)程對(duì)象的最大I/O帶寬閾值小于所述第一平均帶寬閾值時(shí),保持所述子進(jìn)程對(duì)象的最大I/O帶寬閾值不變;
閾值調(diào)整子模塊,用于在所述子進(jìn)程對(duì)象的最大I/O帶寬閾值大于所述第一平均帶寬閾值時(shí),計(jì)算第二平均帶寬閾值,并將所述子進(jìn)程對(duì)象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值,其中,所述第二平均帶寬閾值按照如下方式計(jì)算:(所述父層級(jí)的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的數(shù)量)。
本申請(qǐng)實(shí)施例還公開(kāi)了一種數(shù)據(jù)流量限制的系統(tǒng),所述的系統(tǒng)包括:
閾值接收模塊,用于在操作系統(tǒng)內(nèi)核層接收父進(jìn)程對(duì)象發(fā)送的與一個(gè)或多個(gè)子進(jìn)程對(duì)象對(duì)應(yīng)的最大輸入輸出I/O帶寬閾值,其中,所述父進(jìn)程對(duì)象與業(yè)務(wù)對(duì)象關(guān)聯(lián),所述子進(jìn)程對(duì)象是采用所述父進(jìn)程對(duì)象創(chuàng)建的進(jìn)程對(duì)象,所述最大I/O帶寬閾值是所述父進(jìn)程對(duì)象創(chuàng)建子進(jìn)程對(duì)象時(shí)為所述子進(jìn)程對(duì)象分配的帶寬閾值;
第二流量限制模塊,用于在接收到所述子進(jìn)程對(duì)象發(fā)送的輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),依據(jù)所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述子進(jìn)程具有子進(jìn)程標(biāo)識(shí),所述系統(tǒng)還包括:
規(guī)則創(chuàng)建模塊,用于創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,所述限流規(guī)則包括所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
優(yōu)選地,所述第二流量限制模塊包括:
信息接收子模塊,用于接收父進(jìn)程對(duì)象發(fā)送的預(yù)先建立的socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),其中,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;
Socket獲取子模塊,用于根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),獲取到對(duì)應(yīng)的socket結(jié)構(gòu)體;
標(biāo)識(shí)添加子模塊,用于接收子進(jìn)程對(duì)象采用所述socket fd輸入或輸出的網(wǎng)絡(luò)數(shù)據(jù)包,并在所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
限流子模塊,用于基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
優(yōu)選地,所述限流子模塊包括:
實(shí)際流量獲取單元,用于獲取所述網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)際數(shù)據(jù)流量;
規(guī)則查找單元,用于基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得對(duì)應(yīng)的最大I/O帶寬閾值;
第一傳送單元,用于在所述實(shí)際數(shù)據(jù)流量小于所述最大I/O帶寬閾值時(shí),按照所述實(shí)際數(shù)據(jù)流量進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送;
第二傳送單元,用于在所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值時(shí),按照所述最大I/O帶寬閾值進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送。
優(yōu)選地,所述系統(tǒng)還包括:
緩存模塊,用于在所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實(shí)際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對(duì)應(yīng)的數(shù)據(jù),放置在預(yù)設(shè)大小的緩存區(qū)域中;
錯(cuò)誤提示發(fā)送模塊,用于在所述緩存區(qū)域中存儲(chǔ)的數(shù)據(jù)量大小為所述預(yù)設(shè)大小時(shí),向所述子進(jìn)程對(duì)象發(fā)出錯(cuò)誤提示。
優(yōu)選地,所述系統(tǒng)還包括:
規(guī)則刪除模塊,用于在檢測(cè)到所述子進(jìn)程對(duì)象被刪除時(shí),刪除對(duì)應(yīng)的限流規(guī)則。
與背景技術(shù)相比,本申請(qǐng)實(shí)施例包括以下優(yōu)點(diǎn):
在本申請(qǐng)實(shí)施例應(yīng)用的分布式的多租戶共享集群資源的環(huán)境下,當(dāng)確定業(yè)務(wù)對(duì)象對(duì)應(yīng)的一個(gè)或多個(gè)父進(jìn)程對(duì)象,由父進(jìn)程對(duì)象創(chuàng)建子進(jìn)程對(duì)象來(lái)進(jìn)行業(yè)務(wù)對(duì)象的處理,并為子進(jìn)程對(duì)象分配最大I/O帶寬閾值,使 得同一臺(tái)機(jī)器上的各個(gè)進(jìn)程能夠使用的最大網(wǎng)絡(luò)輸入輸出帶寬不能超過(guò)指定的閾值,否則會(huì)進(jìn)行限流以控制在最大I/O帶寬閾值范圍內(nèi),來(lái)達(dá)到多進(jìn)程網(wǎng)絡(luò)隔離的目的,且不會(huì)對(duì)網(wǎng)絡(luò)造成穩(wěn)定性的影響,以滿足不同業(yè)務(wù)對(duì)象的網(wǎng)絡(luò)需求。
另外,本申請(qǐng)實(shí)施例采用可編程語(yǔ)言(例如C語(yǔ)言)實(shí)現(xiàn),因此可以更容易集成到其他系統(tǒng)之中。
附圖說(shuō)明
圖1是本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例一的步驟流程圖;
圖2是本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例一中的數(shù)據(jù)流量限制原理示意圖;
圖3是本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例一中的多進(jìn)程帶寬分配示意圖;
圖4是本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例二的步驟流程圖;
圖5是本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例三的步驟流程圖;
圖6是本申請(qǐng)的一種數(shù)據(jù)流量限制的系統(tǒng)實(shí)施例一的結(jié)構(gòu)框圖;
圖7是本申請(qǐng)的一種數(shù)據(jù)流量限制的系統(tǒng)實(shí)施例二的結(jié)構(gòu)框圖。
具體實(shí)施方式
為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說(shuō)明。
參照?qǐng)D1,示出了本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例一的步驟流程圖,本申請(qǐng)實(shí)施例從應(yīng)用層的角度加以說(shuō)明,可以包括如下步驟:
步驟101,在應(yīng)用層確定業(yè)務(wù)對(duì)象對(duì)應(yīng)的一個(gè)或多個(gè)父進(jìn)程對(duì)象;
在實(shí)際的業(yè)務(wù)場(chǎng)景中,大部分大型云計(jì)算平臺(tái)一般部署在多數(shù)據(jù)中心,每個(gè)數(shù)據(jù)中心有多個(gè)集群,每個(gè)集群可以有若干臺(tái)物理機(jī)器,每臺(tái)物理機(jī)器可以運(yùn)行不同的業(yè)務(wù)對(duì)象,即典型的集群多租戶模式。
應(yīng)用于本申請(qǐng)實(shí)施例,可以首先為業(yè)務(wù)對(duì)象決策出為其服務(wù)的一個(gè)或多個(gè)父進(jìn)程對(duì)象,其中,父進(jìn)程對(duì)象可以為操作系統(tǒng)預(yù)先創(chuàng)建好的進(jìn)程,如守護(hù)進(jìn)程,守護(hù)進(jìn)程也就是通常說(shuō)的Daemon進(jìn)程,是Linux中的后臺(tái)服務(wù)進(jìn)程,它是一個(gè)生存期較長(zhǎng)的進(jìn)程,通常獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。
步驟102,分別采用所述父進(jìn)程對(duì)象創(chuàng)建一個(gè)或多個(gè)對(duì)應(yīng)的子進(jìn)程對(duì)象,并為所述一個(gè)或多個(gè)子進(jìn)程對(duì)象分配最大輸入輸出I/O帶寬閾值;
參照?qǐng)D2所示的數(shù)據(jù)流量限制原理示意圖,在確定父進(jìn)程對(duì)象以后,父進(jìn)程對(duì)象可以進(jìn)一步調(diào)用預(yù)設(shè)API接口創(chuàng)建create一個(gè)或多個(gè)子進(jìn)程對(duì)象進(jìn)行業(yè)務(wù)對(duì)象的處理,并為創(chuàng)建的子進(jìn)程對(duì)象配置最大I/O帶寬閾值。其中,最大I/O帶寬閾值是指,最大輸出帶寬閾值;或者,最大輸入帶寬閾值;或者,既包括最大輸出帶寬閾值,也包括最大輸入帶寬閾值。
具體來(lái)說(shuō),分配到一臺(tái)物理機(jī)器的所有業(yè)務(wù)對(duì)象可以先分發(fā)到N個(gè)(N>0)常駐的系統(tǒng)daemon進(jìn)程中,這些daemon進(jìn)程作為父進(jìn)程對(duì)象進(jìn)一步創(chuàng)建m個(gè)(m>0)個(gè)子進(jìn)程對(duì)象來(lái)運(yùn)行業(yè)務(wù)對(duì)象的具體計(jì)算邏輯,其中,創(chuàng)建的所有子進(jìn)程對(duì)象都具有對(duì)應(yīng)的子進(jìn)程標(biāo)識(shí),本申請(qǐng)實(shí)施例中子進(jìn)程標(biāo)識(shí)可以用SubPID表示。
由于子進(jìn)程對(duì)象中執(zhí)行的用戶邏輯對(duì)于系統(tǒng)來(lái)說(shuō)可能是透明的,出于安全和資源隔離的需要,父進(jìn)程對(duì)象可以在創(chuàng)建每個(gè)子進(jìn)程對(duì)象時(shí)分配最大輸入輸出I/O帶寬閾值,即每個(gè)子進(jìn)程的網(wǎng)絡(luò)總帶寬使用一定不會(huì)超過(guò)指定的分配額,以此來(lái)限制其網(wǎng)絡(luò)資源使用。如圖3的多進(jìn)程帶寬分配示意圖所示,在一臺(tái)物理機(jī)器上有兩個(gè)業(yè)務(wù),其中,業(yè)務(wù)1的一個(gè)父進(jìn)程對(duì)象1創(chuàng)建了三個(gè)子進(jìn)程對(duì)象,最大輸入網(wǎng)絡(luò)帶寬分別指定為10M/s,40M/s,80M/s;最大輸出網(wǎng)絡(luò)帶寬分別指定為40M/s,20M/s,50M/s,假如這臺(tái)物理機(jī)器的最大輸入輸出帶寬為1000M/s,則這三個(gè)子進(jìn)程對(duì)象能夠使用的網(wǎng)絡(luò)帶寬閾值就是指定的分配額。
需要說(shuō)明的是,一個(gè)父進(jìn)程對(duì)象理論上可以創(chuàng)建無(wú)數(shù)個(gè)子進(jìn)程對(duì)象,只要數(shù)量在linux操作系統(tǒng)可以承受的范疇之內(nèi)即可,父進(jìn)程對(duì)象的主要功能 是管理各個(gè)子進(jìn)程對(duì)象的生命周期,如創(chuàng)建銷毀子進(jìn)程對(duì)象,分配網(wǎng)絡(luò)帶寬和監(jiān)控每個(gè)子進(jìn)程對(duì)象網(wǎng)絡(luò)使用情況等。
在本申請(qǐng)實(shí)施例中,還可以包括如下步驟:
采用所述父進(jìn)程對(duì)象將所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,所述限流規(guī)則包括所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
具體來(lái)說(shuō),在本申請(qǐng)實(shí)施例中,父進(jìn)程對(duì)象在創(chuàng)建子進(jìn)程對(duì)象時(shí),還可以將子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)SubPID及對(duì)應(yīng)的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層。在具體實(shí)現(xiàn)中,如圖2所示,父進(jìn)程對(duì)象每次創(chuàng)建一個(gè)子進(jìn)程對(duì)象時(shí),可以調(diào)用在操作系統(tǒng)應(yīng)用層封裝的API接口,如AddGroup(GroupInfo)接口,以通過(guò)GroupInfo將子進(jìn)程對(duì)象的SubPID、對(duì)應(yīng)的最大I/O帶寬閾值等信息傳送至操作系統(tǒng)內(nèi)核層,促使操作系統(tǒng)內(nèi)核層根據(jù)子進(jìn)程對(duì)象的SubPID及對(duì)應(yīng)的最大I/O帶寬閾值創(chuàng)建對(duì)應(yīng)的限流規(guī)則,關(guān)于操作系統(tǒng)內(nèi)核層的具體處理方式將在下一實(shí)施例中加以詳細(xì)說(shuō)明。
步驟103,當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
在本申請(qǐng)的一種優(yōu)選實(shí)施例中,步驟103可以包括如下子步驟:
子步驟S11,采用父進(jìn)程對(duì)象預(yù)先創(chuàng)建socket描述符fd,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;
子步驟S12,采用所述父進(jìn)程對(duì)象將所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進(jìn)程對(duì)象將所述socket fd發(fā)送至對(duì)應(yīng)的子進(jìn)程中;
子步驟S13,當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象采用所述socket fd輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使所述操作系統(tǒng)內(nèi)核層完成如下操作:
所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn) 程標(biāo)識(shí),獲得對(duì)應(yīng)的socket結(jié)構(gòu)體;
當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
具體來(lái)說(shuō),父進(jìn)程對(duì)象可以預(yù)先創(chuàng)建每個(gè)子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的socket fd,并調(diào)用另一個(gè)封裝的API接口,如AddFd(subPID,fd),將該socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的SubPID發(fā)送至操作系統(tǒng)內(nèi)核層,同時(shí),將該socket fd發(fā)送至對(duì)應(yīng)的子進(jìn)程中,當(dāng)檢測(cè)到子進(jìn)程對(duì)象采用所述socket fd輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使操作系統(tǒng)內(nèi)核層完成如下操作:所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的SubPID,獲得對(duì)應(yīng)的socket結(jié)構(gòu)體;當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述SubPID;基于所述SubPID,查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。關(guān)于操作系統(tǒng)內(nèi)核層的上述操作將在下一實(shí)施例中進(jìn)行詳述。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,還可以包括如下步驟:
自適應(yīng)調(diào)整所述子進(jìn)程對(duì)象的最大I/O帶寬閾值,具體可以包括如下子步驟:
子步驟S21,確定父層級(jí)的最大I/O帶寬閾值,其中,所述父層級(jí)為在所述子進(jìn)程對(duì)象的級(jí)別之上的對(duì)象,包括業(yè)務(wù)對(duì)象或物理機(jī)器;
本申請(qǐng)實(shí)施例設(shè)置的限流規(guī)則是有層級(jí)關(guān)系的,子層級(jí)的限流規(guī)則受到父層級(jí)的限流規(guī)則約束。其中,子層級(jí)可以為子進(jìn)程對(duì)象,父層級(jí)可以為業(yè)務(wù)對(duì)象,或?yàn)?,物理機(jī)器。
若父層級(jí)為物理機(jī)器,則父層級(jí)的最大I/O帶寬閾值為該物理機(jī)器的總帶寬。
若父層級(jí)為業(yè)務(wù)對(duì)象,則父層級(jí)的最大I/O帶寬閾值為該業(yè)務(wù)對(duì)象的最大I/O帶寬閾值,具體來(lái)說(shuō),在某些場(chǎng)景下,可能需要限定一個(gè)業(yè)務(wù)對(duì)象在一臺(tái)物理機(jī)器上所有子進(jìn)程對(duì)象所能使用的最大I/O帶寬閾值,以防干擾其他業(yè)務(wù)對(duì)象的網(wǎng)絡(luò)使用。在這種情況下,可以先采用相同的API創(chuàng)建一個(gè)父Group(父分組),指定業(yè)務(wù)對(duì)象能使用的最大I/O帶寬閾值,然后創(chuàng)建該業(yè)務(wù)對(duì)象下的子進(jìn)程對(duì)象,指定父Group的ID即可,那么該業(yè)務(wù)下的所有子進(jìn)程將共享該業(yè)務(wù)對(duì)象指定的最大I/O帶寬閾值。
根據(jù)指定的父層級(jí)的最大I/O帶寬閾值的不同,調(diào)整得到的子進(jìn)程對(duì)象的最大I/O帶寬閾值也是不同的。例如,物理機(jī)器的總帶寬為200M/s,然后設(shè)定了一個(gè)限流規(guī)則r1,最大輸出帶寬閾值為100M/s,之后又建立了兩條限流規(guī)則r2、r3,設(shè)定的最大輸出帶寬閾值都為80M/s;如果r2、r3在創(chuàng)建的時(shí)候沒(méi)有指定屬于哪個(gè)父層級(jí),那么和r1一樣,父層級(jí)默認(rèn)是物理機(jī)器,父層級(jí)的最大輸出帶寬閾值為200M/s;如果r2、r3創(chuàng)建的時(shí)候指定屬于r1規(guī)則,那么r2和r3的父層級(jí)是r1,父層級(jí)的最大輸出帶寬閾值為100M/s。
子步驟S22,若所述父層級(jí)所包含的所有子進(jìn)程對(duì)象的最大I/O帶寬閾值的總和大于所述父層級(jí)的最大I/O帶寬閾值,則根據(jù)所述子進(jìn)程對(duì)象的數(shù)量,計(jì)算每個(gè)子進(jìn)程對(duì)象所分配的第一平均帶寬閾值;
在確定父層級(jí)的最大I/O帶寬閾值以后,可以進(jìn)一步判斷該父層級(jí)所包含的所有子進(jìn)程對(duì)象的最大I/O帶寬閾值之和是否大于該父層級(jí)的最大I/O帶寬閾值,如果判定結(jié)果為否定,則表示當(dāng)前父層級(jí)的資源能夠滿足各子進(jìn)程對(duì)象的最大I/O帶寬閾值所需;如果判定結(jié)果為肯定,則表示當(dāng)前父層級(jí)的資源不能夠滿足各子進(jìn)程對(duì)象的最大I/O帶寬閾值所需,此時(shí)進(jìn)一步計(jì)算各子進(jìn)程對(duì)象所占的平均帶寬閾值(第一平均帶寬閾值)。
例如,一臺(tái)物理機(jī)器最大輸出總帶寬是100M/s,依次按順序創(chuàng)建子進(jìn)程對(duì)象1,2,3,4,5,分配的最大輸出帶寬依次是10M/s,20M/s,40M/s,80M/s,120M/s,由于五個(gè)子進(jìn)程對(duì)象的最大輸出帶寬閾值之和(10M/s+20M/s+40M/s+80M/s+120M/s=270M/s),大于物理機(jī)器最大輸 出總帶寬是100M/s,此時(shí)可以進(jìn)一步計(jì)算每個(gè)子進(jìn)程對(duì)象所占的第一平均帶寬閾值為100/5=20M/s。
子步驟S23,若所述子進(jìn)程對(duì)象的最大I/O帶寬閾值小于所述第一平均帶寬閾值,則保持所述子進(jìn)程對(duì)象的最大I/O帶寬閾值不變;
子步驟S24,若所述子進(jìn)程對(duì)象的最大I/O帶寬閾值大于所述第一平均帶寬閾值,則計(jì)算第二平均帶寬閾值,并將所述子進(jìn)程對(duì)象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值。
具體來(lái)說(shuō),對(duì)于最大I/O帶寬閾值小于第一平均帶寬閾值的子進(jìn)程對(duì)象,可以保持其最大I/O帶寬閾值不變,對(duì)于最大I/O帶寬閾值大于第一平均帶寬閾值的子進(jìn)程對(duì)象,則進(jìn)一步計(jì)算第二平均帶寬閾值,其中,第二平均帶寬閾值可以按照如下方式計(jì)算:(所述父層級(jí)的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的數(shù)量)。
例如,在上例中,對(duì)于依次創(chuàng)建子進(jìn)程對(duì)象1,2,3,4,5,那么每次新創(chuàng)建一個(gè)子進(jìn)程對(duì)象后,所有的進(jìn)程能達(dá)到的最大輸出帶寬閾值自適應(yīng)調(diào)整的過(guò)程為:
創(chuàng)建子進(jìn)程對(duì)象1時(shí),由于分配的最大輸出帶寬10M/s并沒(méi)有超過(guò)物理機(jī)器最大輸出總帶寬是100M/s,則子進(jìn)程對(duì)象1的最大輸出帶寬保持不變,為(10M/s);
繼續(xù)創(chuàng)建子進(jìn)程對(duì)象2,由于子進(jìn)程對(duì)象1和子進(jìn)程對(duì)象2的最大輸出帶寬總和(10+20=30M/s)沒(méi)有超過(guò)物理機(jī)器最大輸出總帶寬是100M/s,則子進(jìn)程對(duì)象1和子進(jìn)程對(duì)象2的最大輸出帶寬保持不變,為(10M/s,20M/s);
繼續(xù)創(chuàng)建子進(jìn)程對(duì)象3,由于子進(jìn)程對(duì)象1至子進(jìn)程對(duì)象3的最大輸出帶寬總和(10+20+40=70M/s)沒(méi)有超過(guò)物理機(jī)器最大輸出總帶寬是100M/s,則子進(jìn)程對(duì)象1至子進(jìn)程對(duì)象3的最大輸出帶寬保持不變,為(10M/s,20M/s,40M/s);
繼續(xù)創(chuàng)建子進(jìn)程對(duì)象4,由于子進(jìn)程對(duì)象1至子進(jìn)程對(duì)象4的最大輸 出帶寬總和(10+20+40+80=150M/s)超過(guò)了物理機(jī)器最大輸出總帶寬是100M/s,則最大輸出帶寬小于或等于第一平均帶寬閾值的子進(jìn)程對(duì)象的最大輸出帶寬保持不變,即子進(jìn)程對(duì)象1和子進(jìn)程對(duì)象2的最大輸出帶寬保持不變,對(duì)于最大輸出帶寬大于第一平均帶寬閾值的子進(jìn)程對(duì)象的最大輸出帶寬,調(diào)整為第二平均帶寬閾值,第二平均帶寬閾值的計(jì)算方法為:(100-10-20)/2=35,即子進(jìn)程1-4的調(diào)整后的最大輸出帶寬閾值為:(10M/s,20M/s,35M/s,35M/s);
繼續(xù)創(chuàng)建子進(jìn)程對(duì)象5,由于子進(jìn)程對(duì)象1至子進(jìn)程對(duì)象5的最大輸出帶寬總和(10+20+40+80+120=270M/s)超過(guò)了物理機(jī)器最大輸出總帶寬是100M/s,則最大輸出帶寬小于或等于第一平均帶寬閾值的子進(jìn)程對(duì)象的最大輸出帶寬保持不變,即子進(jìn)程對(duì)象1和子進(jìn)程對(duì)象2的最大輸出帶寬保持不變,對(duì)于最大輸出帶寬大于第一平均帶寬閾值的子進(jìn)程對(duì)象的最大輸出帶寬,調(diào)整為第二平均帶寬閾值,第二平均帶寬閾值的計(jì)算方法為:(100-10-20)/3=23,即子進(jìn)程1-5的調(diào)整后的最大輸出帶寬閾值為:(10M/s,20M/s,23M/s,23M/s,23M/s)。
需要說(shuō)明的是,在實(shí)際中,上述得到的每個(gè)子進(jìn)程對(duì)象自適應(yīng)調(diào)整結(jié)果可以有5%左右的微小波動(dòng)誤差,但總的來(lái)說(shuō)所有進(jìn)程都是在閾值范圍內(nèi)共享輸出/輸入帶寬的。
通過(guò)上述自適應(yīng)調(diào)整子進(jìn)程對(duì)象的最大I/O帶寬閾值,可以達(dá)到靈活且精準(zhǔn)控制進(jìn)程的最大輸入輸出帶寬的目標(biāo)。
需要說(shuō)明的是,在本申請(qǐng)實(shí)施例中,操作系統(tǒng)可以采用可插拔的方式對(duì)于線上已經(jīng)運(yùn)行的進(jìn)程進(jìn)行升級(jí),并且升級(jí)過(guò)程不會(huì)影響進(jìn)程正常運(yùn)行。在一種實(shí)施方式中,可以使用dlopen函數(shù)(其主要功能是打開(kāi)一個(gè)動(dòng)態(tài)鏈接庫(kù),并返回動(dòng)態(tài)鏈接庫(kù)的句柄)動(dòng)態(tài)加載本申請(qǐng)實(shí)施例的代碼,來(lái)升級(jí)進(jìn)程,可使運(yùn)行中的進(jìn)程透明的加載和卸載本申請(qǐng)實(shí)施例的代碼。
在本申請(qǐng)實(shí)施例應(yīng)用的分布式的多租戶共享集群資源的環(huán)境下,當(dāng)確定業(yè)務(wù)對(duì)象對(duì)應(yīng)的一個(gè)或多個(gè)父進(jìn)程對(duì)象,由父進(jìn)程對(duì)象創(chuàng)建子進(jìn)程對(duì) 象來(lái)進(jìn)行業(yè)務(wù)對(duì)象的處理,并為子進(jìn)程對(duì)象分配最大I/O帶寬閾值,使得同一臺(tái)機(jī)器上的各個(gè)進(jìn)程能夠使用的最大網(wǎng)絡(luò)輸入輸出帶寬不能超過(guò)指定的閾值,否則會(huì)進(jìn)行限流以控制在最大I/O帶寬閾值范圍內(nèi),來(lái)達(dá)到多進(jìn)程網(wǎng)絡(luò)隔離的目的,且不會(huì)對(duì)網(wǎng)絡(luò)造成穩(wěn)定性的影響,以滿足不同業(yè)務(wù)對(duì)象的網(wǎng)絡(luò)需求。
另外,本申請(qǐng)實(shí)施例采用可編程語(yǔ)言(例如C語(yǔ)言)實(shí)現(xiàn),因此可以更容易集成到其他系統(tǒng)之中。
參照?qǐng)D4,示出了本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例二的步驟流程圖,本申請(qǐng)實(shí)施例從操作系統(tǒng)內(nèi)核層的角度加以說(shuō)明,可以包括如下步驟:
步驟401,在操作系統(tǒng)內(nèi)核層接收父進(jìn)程對(duì)象發(fā)送的與一個(gè)或多個(gè)子進(jìn)程對(duì)象對(duì)應(yīng)的最大輸入輸出I/O帶寬閾值;
應(yīng)用于本申請(qǐng)實(shí)施例,父進(jìn)程對(duì)象與業(yè)務(wù)對(duì)象關(guān)聯(lián),兩者的關(guān)系為多對(duì)多的關(guān)系;子進(jìn)程對(duì)象是采用父進(jìn)程對(duì)象創(chuàng)建的進(jìn)程對(duì)象,一個(gè)父進(jìn)程對(duì)象可以創(chuàng)建一個(gè)或多個(gè)子進(jìn)程對(duì)象;最大I/O帶寬閾值是所述父進(jìn)程對(duì)象創(chuàng)建子進(jìn)程對(duì)象時(shí)為所述子進(jìn)程對(duì)象分配的帶寬閾值,其中,最大I/O帶寬閾值是指,最大輸出帶寬閾值;或者,最大輸入帶寬閾值;或者,既包括最大輸出帶寬閾值,也包括最大輸入帶寬閾值。
具體來(lái)說(shuō),在確定業(yè)務(wù)對(duì)象的父進(jìn)程對(duì)象以后,父進(jìn)程對(duì)象可以進(jìn)一步調(diào)用預(yù)設(shè)API接口創(chuàng)建create一個(gè)或多個(gè)子進(jìn)程對(duì)象來(lái)進(jìn)行業(yè)務(wù)對(duì)象的處理,并為創(chuàng)建的子進(jìn)程對(duì)象配置最大I/O帶寬閾值。
父進(jìn)程對(duì)象每次創(chuàng)建一個(gè)子進(jìn)程對(duì)象時(shí),還可以調(diào)用在操作系統(tǒng)應(yīng)用層封裝的API接口,如AddGroup(GroupInfo)接口,以通過(guò)GroupInfo將子進(jìn)程對(duì)象的SubPID、對(duì)應(yīng)的最大I/O帶寬閾值等信息傳送至操作系統(tǒng)內(nèi)核層。
在操作系統(tǒng)內(nèi)核層,可以通過(guò)內(nèi)核自帶的流量控制器Traffic Control(簡(jiǎn)稱TC)來(lái)接收父進(jìn)程對(duì)象傳送的子進(jìn)程對(duì)象的SubPID、對(duì)應(yīng)的 最大I/O帶寬閾值等信息。
操作系統(tǒng)內(nèi)核層接收到來(lái)自應(yīng)用層的信息以后,本申請(qǐng)實(shí)施例還可以包括如下步驟:
創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則。
具體來(lái)說(shuō),操作系統(tǒng)內(nèi)核層可以在TC中根據(jù)子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值創(chuàng)建與一條該子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,該限流規(guī)則包括子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
在實(shí)際中,在流量控制器TC中存儲(chǔ)的限流規(guī)則可以采用機(jī)器全局唯一的規(guī)則ID進(jìn)行標(biāo)識(shí),由于子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)也是全局唯一的,因此,可以將子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)作為規(guī)則ID,實(shí)際上是將TC的classid賦值為子進(jìn)程標(biāo)識(shí)。
在實(shí)際應(yīng)用中,在一臺(tái)物理機(jī)器上,不管有多少個(gè)父進(jìn)程對(duì)象,以及每個(gè)父進(jìn)程對(duì)象創(chuàng)建了多少個(gè)子進(jìn)程對(duì)象,每個(gè)子進(jìn)程對(duì)象在TC中對(duì)應(yīng)的限流規(guī)則都是公平使用帶寬的。然而,linux內(nèi)核自帶的TC可能存在如下缺陷:同一個(gè)父進(jìn)程對(duì)象下的所有子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則不能完全公平的共享父進(jìn)程對(duì)象所設(shè)置的規(guī)則帶寬,導(dǎo)致有些限流規(guī)則由于分配不到帶寬而被餓死的情況,即帶寬一直被其他限流規(guī)則占用?;诖?,應(yīng)用于本申請(qǐng)實(shí)施例,可以采用hotfix(hotfix是針對(duì)某一個(gè)具體的系統(tǒng)漏洞或安全問(wèn)題而發(fā)布的專門解決該漏洞或安全問(wèn)題的小程序,通常稱為修補(bǔ)程序)技術(shù)修補(bǔ)該缺陷。
具體來(lái)說(shuō),可以采用hotfix技術(shù)對(duì)TC默認(rèn)實(shí)現(xiàn)的HTB和SFQ隊(duì)列進(jìn)行了優(yōu)化,使所有限流規(guī)則都可以平等的共享帶寬。其中,HTB(Hierarchical Token Bucke,分層的令牌桶)隊(duì)列是TC可分類隊(duì)列的一種,主要配合TC進(jìn)行流量控制;SFQ(Stochastic Fairness Queueing,隨機(jī)公平隊(duì)列)是公平隊(duì)列算法家族中的一個(gè)簡(jiǎn)單實(shí)現(xiàn),主要針對(duì)一個(gè)TCP會(huì)話或者UDP流,流量被分成相當(dāng)多數(shù)量的FIFO(First Input First Outpu,先入先出)隊(duì)列中,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)會(huì)話,數(shù)據(jù)按照簡(jiǎn)單輪轉(zhuǎn)的方式 發(fā)送,每個(gè)會(huì)話都按順序得到發(fā)送機(jī)會(huì),這種方式非常公平,保證了每一個(gè)會(huì)話都不會(huì)被其它會(huì)話所淹沒(méi)。
步驟402,當(dāng)接收到所述子進(jìn)程對(duì)象發(fā)送的輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),依據(jù)所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
當(dāng)在操作系統(tǒng)內(nèi)核層創(chuàng)建了與子進(jìn)程對(duì)象關(guān)聯(lián)的限流規(guī)則以后,接下來(lái)可以讓子進(jìn)程對(duì)象創(chuàng)建的所有網(wǎng)絡(luò)流關(guān)聯(lián)上在TC中創(chuàng)建的限流規(guī)則,從而使用該限流規(guī)則對(duì)網(wǎng)絡(luò)流的數(shù)據(jù)流量進(jìn)行限制。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,步驟402可以包括如下子步驟:
子步驟S31,接收父進(jìn)程對(duì)象發(fā)送的預(yù)先創(chuàng)建的socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),其中,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;
子步驟S32,根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),獲取到對(duì)應(yīng)的socket結(jié)構(gòu)體;
在具體實(shí)現(xiàn)中,父進(jìn)程對(duì)象可以預(yù)先創(chuàng)建每個(gè)子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的socket fd,并調(diào)用另一個(gè)封裝的API接口,如AddFd(subPID,fd),將該socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的SubPID發(fā)送至操作系統(tǒng)內(nèi)核層,當(dāng)父進(jìn)程對(duì)象調(diào)用AddFD(subPID,fd)時(shí),這個(gè)接口可以通過(guò)linux系統(tǒng)提供的setsockopt方法,根據(jù)socket fd找到tcp連接在內(nèi)核網(wǎng)絡(luò)層對(duì)應(yīng)的Sock結(jié)構(gòu),并給該Sock結(jié)構(gòu)打上子進(jìn)程標(biāo)識(shí)的標(biāo)簽。
子步驟S33,接收子進(jìn)程對(duì)象采用所述socket fd輸入或輸出的網(wǎng)絡(luò)數(shù)據(jù)包;
子步驟S34,當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
當(dāng)子進(jìn)程對(duì)象使用socket fd傳送網(wǎng)絡(luò)數(shù)據(jù)包時(shí),網(wǎng)絡(luò)數(shù)據(jù)包經(jīng)過(guò)內(nèi)核網(wǎng)絡(luò)層協(xié)議棧socket結(jié)構(gòu)體的時(shí)候,則為該網(wǎng)絡(luò)數(shù)據(jù)包打上子進(jìn)程標(biāo) 識(shí)的標(biāo)簽。
子步驟S35,基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
如圖2所示,當(dāng)添加SubPID的標(biāo)簽的網(wǎng)絡(luò)數(shù)據(jù)包再經(jīng)過(guò)TC時(shí),則可以根據(jù)這個(gè)標(biāo)簽找到在TC中對(duì)應(yīng)的限流規(guī)則來(lái)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行限流,也即查找與網(wǎng)絡(luò)數(shù)據(jù)包中SubPID相同的限流規(guī)則,基于該限流規(guī)則中所限定的最大I/O帶寬閾值對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,子步驟S35進(jìn)一步可以包括如下子步驟:
子步驟S351,獲取所述網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)際數(shù)據(jù)流量;
子步驟S352,基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得對(duì)應(yīng)的最大I/O帶寬閾值;
子步驟S353,若所述實(shí)際數(shù)據(jù)流量小于所述最大I/O帶寬閾值,則按照所述實(shí)際數(shù)據(jù)流量進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送;
子步驟S354,若所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,則按照所述最大I/O帶寬閾值進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送。
在具體實(shí)現(xiàn)中,當(dāng)網(wǎng)絡(luò)數(shù)據(jù)包關(guān)聯(lián)上限流規(guī)則以后,如果網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)際數(shù)據(jù)流量的速度沒(méi)有超過(guò)限流規(guī)則中設(shè)定的最大I/O帶寬閾值,那么該實(shí)際數(shù)據(jù)流量對(duì)當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)通信基本沒(méi)有影響,此時(shí)可以采用實(shí)際數(shù)據(jù)流量進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的傳送。
如果網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)際數(shù)據(jù)流量的速度超過(guò)限流規(guī)則中設(shè)定的最大I/O帶寬閾值,則將網(wǎng)絡(luò)數(shù)據(jù)包的流量限流在限流規(guī)則中設(shè)定的最大I/O帶寬閾值。
在一種優(yōu)選實(shí)施方式中,本申請(qǐng)實(shí)施例還可以包括如下步驟:
若所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實(shí)際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對(duì)應(yīng)的數(shù)據(jù),放置在預(yù)設(shè)大小的緩存區(qū)域中;若所述緩存區(qū)域中存儲(chǔ)的數(shù)據(jù)量大小為所述預(yù)設(shè) 大小,則向所述子進(jìn)程對(duì)象發(fā)出錯(cuò)誤提示。
在具體實(shí)現(xiàn)中,如果子進(jìn)程對(duì)象的實(shí)際數(shù)據(jù)流量超過(guò)最大I/O帶寬閾值,則可以將超出部分的數(shù)據(jù)作為待發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包放置在預(yù)設(shè)大小的緩存區(qū)域buffer中,一旦實(shí)際數(shù)據(jù)流量降到最大I/O帶寬閾值以下,則優(yōu)先把buffer里面的數(shù)據(jù)發(fā)送出去。
如果實(shí)際數(shù)據(jù)流量持續(xù)超過(guò)設(shè)定的最大I/O帶寬閾值,當(dāng)緩存的待發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包超過(guò)了linux內(nèi)核默認(rèn)的緩存buffer的大小時(shí),可以直接丟棄超出數(shù)據(jù),并向子進(jìn)程對(duì)象發(fā)出錯(cuò)誤提示,該錯(cuò)誤提示為提醒子進(jìn)程該網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送失敗的提示,這種情況下,子進(jìn)程對(duì)象可以選擇重發(fā)數(shù)據(jù)。
例如,linux內(nèi)核默認(rèn)的buffer為50M,某個(gè)子進(jìn)程對(duì)象設(shè)定的最大輸出帶寬閾值為100M/s,一開(kāi)始該子進(jìn)程對(duì)象的實(shí)際數(shù)據(jù)流量沒(méi)有超過(guò)100M/s,則沒(méi)有有任何數(shù)據(jù)緩存到buffer中;若某一時(shí)刻該子進(jìn)程對(duì)象的實(shí)際數(shù)據(jù)流量變成110M/s,那么由于限流規(guī)則的作用,流速最大達(dá)到100M/s,多出來(lái)的10M/s的數(shù)據(jù)則可以緩存到buffer中,若這種情況持續(xù)5s,10M/s*5s=50M,此時(shí)buffer的50M的容量存滿,之后如果實(shí)際數(shù)據(jù)流量還繼續(xù)超過(guò)閾值,那么多出來(lái)的數(shù)據(jù)就沒(méi)有地方放了,內(nèi)核可以直接丟棄。
在一種優(yōu)選實(shí)施方式中,本申請(qǐng)實(shí)施例還可以包括如下步驟:
若檢測(cè)到所述子進(jìn)程對(duì)象被刪除,則刪除對(duì)應(yīng)的限流規(guī)則。
在具體實(shí)現(xiàn)中,每創(chuàng)建一個(gè)子進(jìn)程對(duì)象時(shí),都在內(nèi)核中創(chuàng)建了一條限流規(guī)則,但是內(nèi)核能夠容納的限流規(guī)則的數(shù)量是有限的,因此,回收不用的限流規(guī)則所占的內(nèi)存空間至關(guān)重要。
應(yīng)用于本申請(qǐng)實(shí)施例,操作系統(tǒng)可以在應(yīng)用層限定一個(gè)合理的最大規(guī)則數(shù)量,并在每個(gè)父進(jìn)程對(duì)象中啟動(dòng)一個(gè)后臺(tái)線程專門來(lái)銷毀無(wú)用的限流規(guī)則,一種優(yōu)選實(shí)施方式可以為:查詢處于某一業(yè)務(wù)對(duì)象的所有現(xiàn)有的限流規(guī)則,如果某一個(gè)限流規(guī)則對(duì)應(yīng)的子進(jìn)程對(duì)象子進(jìn)程標(biāo)識(shí)不存在,則可以調(diào)用API銷毀在內(nèi)核中的該限流規(guī)則,通過(guò)這種方式來(lái)回收限流 規(guī)則所占的資源,可以不用考慮子進(jìn)程crash的情況,也能保證資源不泄露,提高系統(tǒng)性能。
在本申請(qǐng)實(shí)施例中,通過(guò)設(shè)置子進(jìn)程對(duì)象的最大I/O帶寬閾值來(lái)精準(zhǔn)的控制每個(gè)進(jìn)程的最大帶寬使用,并且不會(huì)對(duì)網(wǎng)絡(luò)造成穩(wěn)定性的影響,在一臺(tái)機(jī)器上的每個(gè)進(jìn)程可以在閾值范圍內(nèi)公平穩(wěn)定的共享網(wǎng)絡(luò)帶寬。
參照?qǐng)D5,示出了本申請(qǐng)的一種數(shù)據(jù)流量限制的方法實(shí)施例三的步驟流程圖,本申請(qǐng)實(shí)施例結(jié)合圖2說(shuō)明應(yīng)用層與操作系統(tǒng)內(nèi)核層的交互過(guò)程,可以包括如下步驟:
步驟501,在應(yīng)用層確定業(yè)務(wù)對(duì)象對(duì)應(yīng)的一個(gè)或多個(gè)父進(jìn)程對(duì)象;
步驟502,分別采用所述父進(jìn)程對(duì)象創(chuàng)建一個(gè)或多個(gè)對(duì)應(yīng)的子進(jìn)程對(duì)象,并為所述一個(gè)或多個(gè)子進(jìn)程對(duì)象分配最大I/O帶寬閾值;
步驟503,所述父進(jìn)程對(duì)象將所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層;
步驟504,在操作系統(tǒng)內(nèi)核層中,創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則;
步驟505,采用父進(jìn)程對(duì)象預(yù)先創(chuàng)建socket描述符fd,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;
步驟506,采用所述父進(jìn)程對(duì)象將所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進(jìn)程對(duì)象將所述socket fd發(fā)送至對(duì)應(yīng)的子進(jìn)程中;;
步驟507,當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象采用所述socket fd輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),獲取到對(duì)應(yīng)的socket結(jié)構(gòu)體;
步驟508,當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),操作系統(tǒng)內(nèi)核層在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
步驟509,基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大 I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制;
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述509進(jìn)一步可以包括如下子步驟:
子步驟S41,獲取所述網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)際數(shù)據(jù)流量;
子步驟S42,基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則;
子步驟S43,若所述實(shí)際數(shù)據(jù)流量小于所述最大I/O帶寬閾值,則按照所述實(shí)際數(shù)據(jù)流量進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送;
子步驟S44,若所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,則按照所述最大I/O帶寬閾值進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送。
應(yīng)用于本申請(qǐng)實(shí)施例,子進(jìn)程對(duì)象的最大I/O帶寬閾值可以自適應(yīng)調(diào)整。在一種實(shí)施方式中,自適應(yīng)調(diào)整的過(guò)程如下:
A、確定父層級(jí)的最大I/O帶寬閾值,其中,所述父層級(jí)為在所述子進(jìn)程對(duì)象的級(jí)別之上的對(duì)象,包括業(yè)務(wù)對(duì)象或物理機(jī)器;
B、若所述父層級(jí)所包含的子進(jìn)程對(duì)象的最大I/O帶寬閾值的總和大于所述父層級(jí)的最大I/O帶寬閾值,則根據(jù)所述子進(jìn)程對(duì)象的數(shù)量,計(jì)算每個(gè)子進(jìn)程對(duì)象所分配的第一平均帶寬閾值;
C、若所述子進(jìn)程對(duì)象的最大I/O帶寬閾值小于所述第一平均帶寬閾值,則保持所述子進(jìn)程對(duì)象的最大I/O帶寬閾值不變;
D、若所述子進(jìn)程對(duì)象的最大I/O帶寬閾值大于所述第一平均帶寬閾值,則計(jì)算第二平均帶寬閾值,并將所述子進(jìn)程對(duì)象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值。
步驟510,在操作系統(tǒng)內(nèi)核層,若所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實(shí)際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對(duì)應(yīng)的數(shù)據(jù),放置在預(yù)設(shè)大小的緩存區(qū)域中;
步驟511,若所述緩存區(qū)域中存儲(chǔ)的數(shù)據(jù)量大小為所述預(yù)設(shè)大小,則向所述子進(jìn)程對(duì)象發(fā)出錯(cuò)誤提示;
步驟512,若檢測(cè)到所述子進(jìn)程對(duì)象被刪除,則在操作系統(tǒng)內(nèi)核中刪 除對(duì)應(yīng)的限流規(guī)則。
對(duì)于圖5的實(shí)施例而言,由于其與圖1及圖4的實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。
需要說(shuō)明的是,對(duì)于方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)實(shí)施例并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng)實(shí)施例,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作并不一定是本申請(qǐng)實(shí)施例所必須的。
參照?qǐng)D6,示出了本申請(qǐng)一種數(shù)據(jù)流量限制的系統(tǒng)實(shí)施例一的結(jié)構(gòu)框圖,具體可以包括如下模塊:
父進(jìn)程確定模塊601,用于在應(yīng)用層確定業(yè)務(wù)對(duì)象對(duì)應(yīng)的一個(gè)或多個(gè)父進(jìn)程對(duì)象;
子進(jìn)程創(chuàng)建模塊602,用于分別采用所述父進(jìn)程對(duì)象創(chuàng)建一個(gè)或多個(gè)對(duì)應(yīng)的子進(jìn)程對(duì)象,并為所述一個(gè)或多個(gè)子進(jìn)程對(duì)象分配最大輸入輸出I/O帶寬閾值;
第一流量限制模塊603,用于在檢測(cè)到所述子進(jìn)程對(duì)象輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述子進(jìn)程具有子進(jìn)程標(biāo)識(shí),所述系統(tǒng)還包括:
信息發(fā)送模塊,用于采用所述父進(jìn)程對(duì)象將所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,所述限流規(guī)則包括所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述第一流量限制模塊603 可以包括如下子模塊:
描述符獲取子模塊,用于采用父進(jìn)程對(duì)象預(yù)先創(chuàng)建socket描述符fd,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;;
描述符發(fā)送子模塊,用于采用所述父進(jìn)程對(duì)象將所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進(jìn)程對(duì)象將所述socket fd發(fā)送至對(duì)應(yīng)的子進(jìn)程中,當(dāng)檢測(cè)到所述子進(jìn)程對(duì)象采用所述socket fd輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),促使所述操作系統(tǒng)內(nèi)核層完成如下操作:
所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),獲得對(duì)應(yīng)的socket結(jié)構(gòu)體;
當(dāng)所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述系統(tǒng)還包括:
調(diào)整模塊,用于自適應(yīng)調(diào)整所述子進(jìn)程對(duì)象的最大I/O帶寬閾值;
所述調(diào)整模塊進(jìn)一步包括:
父層級(jí)閾值確定子模塊,用于確定父層級(jí)的最大I/O帶寬閾值,其中,所述父層級(jí)為在所述子進(jìn)程對(duì)象的級(jí)別之上的對(duì)象,包括業(yè)務(wù)對(duì)象或物理機(jī)器;
平均值計(jì)算子模塊,用于在所述父層級(jí)所包含的所有子進(jìn)程對(duì)象的最大I/O帶寬閾值的總和大于所述父層級(jí)的最大I/O帶寬閾值時(shí),根據(jù)所述子進(jìn)程對(duì)象的數(shù)量,計(jì)算每個(gè)子進(jìn)程對(duì)象所分配的第一平均帶寬閾值;
閾值保持子模塊,用于在所述子進(jìn)程對(duì)象的最大I/O帶寬閾值小于所述第一平均帶寬閾值時(shí),保持所述子進(jìn)程對(duì)象的最大I/O帶寬閾值不變;
閾值調(diào)整子模塊,用于在所述子進(jìn)程對(duì)象的最大I/O帶寬閾值大于所述第一平均帶寬閾值時(shí),計(jì)算第二平均帶寬閾值,并將所述子進(jìn)程對(duì)象 的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值,其中,所述第二平均帶寬閾值按照如下方式計(jì)算:(所述父層級(jí)的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進(jìn)程對(duì)象的數(shù)量)。
對(duì)于系統(tǒng)實(shí)施例而言,由于其與上述方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。
參照?qǐng)D7,示出了本申請(qǐng)一種數(shù)據(jù)流量限制的系統(tǒng)實(shí)施例二的結(jié)構(gòu)框圖,具體可以包括如下模塊:
閾值接收模塊701,用于在操作系統(tǒng)內(nèi)核層接收父進(jìn)程對(duì)象發(fā)送的與一個(gè)或多個(gè)子進(jìn)程對(duì)象對(duì)應(yīng)的最大輸入輸出I/O帶寬閾值,其中,所述父進(jìn)程對(duì)象與業(yè)務(wù)對(duì)象關(guān)聯(lián),所述子進(jìn)程對(duì)象是采用所述父進(jìn)程對(duì)象創(chuàng)建的進(jìn)程對(duì)象,所述最大I/O帶寬閾值是所述父進(jìn)程對(duì)象創(chuàng)建子進(jìn)程對(duì)象時(shí)為所述子進(jìn)程對(duì)象分配的帶寬閾值;
第二流量限制模塊702,用于在接收到所述子進(jìn)程對(duì)象發(fā)送的輸入或輸出網(wǎng)絡(luò)數(shù)據(jù)包時(shí),依據(jù)所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述子進(jìn)程具有子進(jìn)程標(biāo)識(shí),所述系統(tǒng)還包括:
規(guī)則創(chuàng)建模塊,用于創(chuàng)建與所述子進(jìn)程對(duì)象對(duì)應(yīng)的限流規(guī)則,其中,所述限流規(guī)則包括所述子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí)及對(duì)應(yīng)的最大I/O帶寬閾值。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述第二流量限制模塊702進(jìn)一步可以包括如下子模塊:
信息接收子模塊,用于接收父進(jìn)程對(duì)象發(fā)送的預(yù)先建立的socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的子進(jìn)程標(biāo)識(shí),其中,所述socket fd為所述子進(jìn)程對(duì)象創(chuàng)建網(wǎng)絡(luò)連接socket時(shí)所需的信息;
Socket獲取子模塊,用于根據(jù)所述socket fd及對(duì)應(yīng)的子進(jìn)程對(duì)象的 子進(jìn)程標(biāo)識(shí),獲取到對(duì)應(yīng)的socket結(jié)構(gòu)體;
標(biāo)識(shí)添加子模塊,用于接收子進(jìn)程對(duì)象采用所述socket fd輸入或輸出的網(wǎng)絡(luò)數(shù)據(jù)包,并在所述網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)所述socket結(jié)構(gòu)體時(shí),在所述網(wǎng)絡(luò)數(shù)據(jù)包中添加所述子進(jìn)程標(biāo)識(shí);
限流子模塊,用于基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進(jìn)程對(duì)象對(duì)應(yīng)的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對(duì)所述網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行數(shù)據(jù)流量限制。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述限流子模塊進(jìn)一步可以包括如下單元:
實(shí)際流量獲取單元,用于獲取所述網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)際數(shù)據(jù)流量;
規(guī)則查找單元,用于基于所述子進(jìn)程標(biāo)識(shí),查找與所述網(wǎng)絡(luò)數(shù)據(jù)包相匹配的限流規(guī)則,獲得對(duì)應(yīng)的最大I/O帶寬閾值;
第一傳送單元,用于在所述實(shí)際數(shù)據(jù)流量小于所述最大I/O帶寬閾值時(shí),按照所述實(shí)際數(shù)據(jù)流量進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送;
第二傳送單元,用于在所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值時(shí),按照所述最大I/O帶寬閾值進(jìn)行所述網(wǎng)絡(luò)數(shù)據(jù)包的傳送。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述系統(tǒng)還包括:
緩存模塊,用于在所述實(shí)際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實(shí)際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對(duì)應(yīng)的數(shù)據(jù),放置在預(yù)設(shè)大小的緩存區(qū)域中;
錯(cuò)誤提示發(fā)送模塊,用于在所述緩存區(qū)域中存儲(chǔ)的數(shù)據(jù)量大小為所述預(yù)設(shè)大小時(shí),向所述子進(jìn)程對(duì)象發(fā)出錯(cuò)誤提示。
在本申請(qǐng)實(shí)施例的一種優(yōu)選實(shí)施例中,所述系統(tǒng)還包括:
規(guī)則刪除模塊,用于在檢測(cè)到所述子進(jìn)程對(duì)象被刪除時(shí),刪除對(duì)應(yīng)的限流規(guī)則。
對(duì)于系統(tǒng)實(shí)施例而言,由于其與上述方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。
本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn) 說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)實(shí)施例的實(shí)施例可提供為方法、裝置、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)實(shí)施例可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)實(shí)施例可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請(qǐng)實(shí)施例是參照根據(jù)本申請(qǐng)實(shí)施例的方法、終端設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序操作指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序操作指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器執(zhí)行的操作指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序操作指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的操作指令產(chǎn)生包括操作指令裝置的制造品,該操作指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序操作指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備上,使得在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行的操作指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本申請(qǐng)實(shí)施例的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員 一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)實(shí)施例范圍的所有變更和修改。
最后,還需要說(shuō)明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開(kāi)來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者終端設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者終端設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者終端設(shè)備中還存在另外的相同要素。
以上對(duì)本申請(qǐng)所提供的一種數(shù)據(jù)流量限制的方法及系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。