最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

一種數(shù)據(jù)流量限制的方法及系統(tǒng)與流程

文檔序號:11138288閱讀:1129來源:國知局
一種數(shù)據(jù)流量限制的方法及系統(tǒng)與制造工藝

技術(shù)領(lǐng)域

本申請涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)流量限制的方法,以及一種數(shù)據(jù)流量限制的系統(tǒng)。



背景技術(shù):

隨著互聯(lián)網(wǎng)技術(shù)的普及,產(chǎn)生的數(shù)據(jù)量也呈指數(shù)級增長,數(shù)據(jù)處理需要消耗的資源也日趨龐大,而在云計算平臺大力發(fā)展的今天,資源的高效利用至關(guān)重要,要達到這一目標,資源隔離技術(shù)是其中重要一環(huán)。資源隔離是指為不同任務提供可獨立使用的計算資源,以避免它們之間互相干擾。

現(xiàn)有的資源隔離技術(shù)中,基于進程的Cgroup(Control groups,控制族群)使用得比較廣泛。Cgroup是Linux內(nèi)核提供的一種可以隔離進程物理資源(如CPU,內(nèi)存,IO等)的機制,Cgroup整合了現(xiàn)有的cpuset,Memory,net_cls等子系統(tǒng),使得Cgroups適用于從單個進程的資源控制到實現(xiàn)操作系統(tǒng)層次的虛擬化等多種應用場景。

其中,net_cls子系統(tǒng)用于對單個進程進行網(wǎng)絡帶寬控制,它不會直接控制網(wǎng)絡讀寫,而是使用等級識別符classid標記網(wǎng)絡數(shù)據(jù)包,讓linux流量控制程序Traffic Control(簡稱TC)識別Cgroup中任務生成的數(shù)據(jù)包以進行限流。

然而,net_cls使用前必須先配置linux cgroups和Traffic Control模塊。在一些實驗性的測試中,單純的Cgroup網(wǎng)絡隔離效果并不是很好,網(wǎng)絡帶寬使用波動較大,而且由于Cgroup是內(nèi)核自帶的模塊,因此靈活性有天生的限制,不能很好的滿足網(wǎng)絡資源的多樣化需求。

因此,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題就是:如何提出一種適用性強的網(wǎng)絡隔離方案,用以提高網(wǎng)絡隔離的穩(wěn)定性。



技術(shù)實現(xiàn)要素:

本申請實施例所要解決的技術(shù)問題是提供一種數(shù)據(jù)流量限制的方法,用以提高網(wǎng)絡隔離的穩(wěn)定性。

相應的,本申請實施例還提供了一種數(shù)據(jù)流量限制的系統(tǒng),用以保證上述方法的實現(xiàn)及應用。

為了解決上述問題,本申請實施例公開了一種數(shù)據(jù)流量限制的方法,所述的方法包括:

在應用層確定業(yè)務對象對應的一個或多個父進程對象;

分別采用所述父進程對象創(chuàng)建一個或多個對應的子進程對象,并為所述一個或多個子進程對象分配最大輸入輸出I/O帶寬閾值;

當檢測到所述子進程對象輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述子進程具有子進程標識,在所述當檢測到所述子進程對象輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制的步驟之前,還包括:

采用所述父進程對象將所述子進程對象的子進程標識及對應的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進程對象對應的限流規(guī)則,其中,所述限流規(guī)則包括所述子進程對象的子進程標識及對應的最大I/O帶寬閾值。

優(yōu)選地,所述當檢測到所述子進程對象輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制的步驟包括:

采用父進程對象預先創(chuàng)建socket描述符fd,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;

采用所述父進程對象將所述socket fd及對應的子進程對象的子進程 標識發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進程對象將所述socket fd發(fā)送至對應的子進程中;

當檢測到所述子進程對象采用所述socket fd輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使所述操作系統(tǒng)內(nèi)核層完成如下操作:

所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對應的子進程對象的子進程標識,獲得對應的socket結(jié)構(gòu)體;

當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述方法還包括:

自適應調(diào)整所述子進程對象的最大I/O帶寬閾值,包括:

確定父層級的最大I/O帶寬閾值,其中,所述父層級是在所述子進程對象的級別之上的對象,包括業(yè)務對象或物理機器;

若所述父層級所包含的所有子進程對象的最大I/O帶寬閾值的總和大于所述父層級的最大I/O帶寬閾值,則根據(jù)所述子進程對象的數(shù)量,計算每個子進程對象所分配的第一平均帶寬閾值;

若所述子進程對象的最大I/O帶寬閾值小于所述第一平均帶寬閾值,則保持所述子進程對象的最大I/O帶寬閾值不變;

若所述子進程對象的最大I/O帶寬閾值大于所述第一平均帶寬閾值,則計算第二平均帶寬閾值,并將所述子進程對象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值,其中,所述第二平均帶寬閾值按照如下方式計算:(所述父層級的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進程對象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進程對象的數(shù)量)。

本申請實施例還公開了一種數(shù)據(jù)流量限制的方法,所述的方法包括:

在操作系統(tǒng)內(nèi)核層接收父進程對象發(fā)送的與一個或多個子進程對象對應的最大輸入輸出I/O帶寬閾值,其中,所述父進程對象與業(yè)務對象關(guān)聯(lián),所述子進程對象是采用所述父進程對象創(chuàng)建的進程對象,所述最大I/O帶寬閾值是所述父進程對象創(chuàng)建子進程對象時為所述子進程對象分配的帶寬閾值;

當接收到所述子進程對象發(fā)送的輸入或輸出網(wǎng)絡數(shù)據(jù)包時,依據(jù)所述子進程對象對應的最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述子進程具有子進程標識,在所述當接收到所述子進程對象發(fā)送的輸入或輸出網(wǎng)絡數(shù)據(jù)包時,依據(jù)所述子進程對象對應的最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制的步驟之前,還包括:

創(chuàng)建與所述子進程對象對應的限流規(guī)則,其中,所述限流規(guī)則包括所述子進程對象的子進程標識及對應的最大I/O帶寬閾值。

優(yōu)選地,所述當接收到所述子進程對象發(fā)送的輸入或輸出網(wǎng)絡數(shù)據(jù)包時,依據(jù)所述子進程對象對應的最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制的步驟的步驟包括:

接收父進程對象發(fā)送的預先創(chuàng)建的socket fd及對應的子進程對象的子進程標識,其中,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;

根據(jù)所述socket fd及對應的子進程對象的子進程標識,獲取到對應的socket結(jié)構(gòu)體;

接收子進程對象采用所述socket fd輸入或輸出的網(wǎng)絡數(shù)據(jù)包;

當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配 的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制的步驟包括:

獲取所述網(wǎng)絡數(shù)據(jù)包的實際數(shù)據(jù)流量;

基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得對應的最大I/O帶寬閾值;

若所述實際數(shù)據(jù)流量小于所述最大I/O帶寬閾值,則按照所述實際數(shù)據(jù)流量進行所述網(wǎng)絡數(shù)據(jù)包的傳送;

若所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,則按照所述最大I/O帶寬閾值進行所述網(wǎng)絡數(shù)據(jù)包的傳送。

優(yōu)選地,所述方法還包括:

若所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對應的數(shù)據(jù),放置在預設(shè)大小的緩存區(qū)域中;

若所述緩存區(qū)域中存儲的數(shù)據(jù)量大小為所述預設(shè)大小,則向所述子進程對象發(fā)出錯誤提示。

優(yōu)選地,所述方法還包括:

若檢測到所述子進程對象被刪除,則刪除對應的限流規(guī)則。

本申請實施例還公開了一種數(shù)據(jù)流量限制的系統(tǒng),所述的系統(tǒng)包括:

父進程確定模塊,用于在應用層確定業(yè)務對象對應的一個或多個父進程對象;

子進程創(chuàng)建模塊,用于分別采用所述父進程對象創(chuàng)建一個或多個對應的子進程對象,并為所述一個或多個子進程對象分配最大輸入輸出I/O帶寬閾值;

第一流量限制模塊,用于在檢測到所述子進程對象輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述子進程具有子進程標識,所述系統(tǒng)還包括:

信息發(fā)送模塊,用于采用所述父進程對象將所述子進程對象的子進程標識及對應的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進程對象對應的限流規(guī)則,其中,所述限流規(guī)則包括所述子進程對象的子進程標識及對應的最大I/O帶寬閾值。

優(yōu)選地,所述第一流量限制模塊包括:

描述符獲取子模塊,用于采用父進程對象預先創(chuàng)建socket描述符fd,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;;

描述符發(fā)送子模塊,用于采用所述父進程對象將所述socket fd及對應的子進程對象的子進程標識發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進程對象將所述socket fd發(fā)送至對應的子進程中,當檢測到所述子進程對象采用所述socket fd輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使所述操作系統(tǒng)內(nèi)核層完成如下操作:

所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對應的子進程對象的子進程標識,獲得對應的socket結(jié)構(gòu)體;

當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述系統(tǒng)還包括:

調(diào)整模塊,用于自適應調(diào)整所述子進程對象的最大I/O帶寬閾值;

所述調(diào)整模塊進一步包括:

父層級閾值確定子模塊,用于確定父層級的最大I/O帶寬閾值,其中,所述父層級為在所述子進程對象的級別之上的對象,包括業(yè)務對象或物理機器;

平均值計算子模塊,用于在所述父層級所包含的所有子進程對象的最大I/O帶寬閾值的總和大于所述父層級的最大I/O帶寬閾值時,根據(jù)所述子進程對象的數(shù)量,計算每個子進程對象所分配的第一平均帶寬閾值;

閾值保持子模塊,用于在所述子進程對象的最大I/O帶寬閾值小于所述第一平均帶寬閾值時,保持所述子進程對象的最大I/O帶寬閾值不變;

閾值調(diào)整子模塊,用于在所述子進程對象的最大I/O帶寬閾值大于所述第一平均帶寬閾值時,計算第二平均帶寬閾值,并將所述子進程對象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值,其中,所述第二平均帶寬閾值按照如下方式計算:(所述父層級的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進程對象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進程對象的數(shù)量)。

本申請實施例還公開了一種數(shù)據(jù)流量限制的系統(tǒng),所述的系統(tǒng)包括:

閾值接收模塊,用于在操作系統(tǒng)內(nèi)核層接收父進程對象發(fā)送的與一個或多個子進程對象對應的最大輸入輸出I/O帶寬閾值,其中,所述父進程對象與業(yè)務對象關(guān)聯(lián),所述子進程對象是采用所述父進程對象創(chuàng)建的進程對象,所述最大I/O帶寬閾值是所述父進程對象創(chuàng)建子進程對象時為所述子進程對象分配的帶寬閾值;

第二流量限制模塊,用于在接收到所述子進程對象發(fā)送的輸入或輸出網(wǎng)絡數(shù)據(jù)包時,依據(jù)所述子進程對象對應的最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述子進程具有子進程標識,所述系統(tǒng)還包括:

規(guī)則創(chuàng)建模塊,用于創(chuàng)建與所述子進程對象對應的限流規(guī)則,其中,所述限流規(guī)則包括所述子進程對象的子進程標識及對應的最大I/O帶寬閾值。

優(yōu)選地,所述第二流量限制模塊包括:

信息接收子模塊,用于接收父進程對象發(fā)送的預先建立的socket fd及對應的子進程對象的子進程標識,其中,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;

Socket獲取子模塊,用于根據(jù)所述socket fd及對應的子進程對象的子進程標識,獲取到對應的socket結(jié)構(gòu)體;

標識添加子模塊,用于接收子進程對象采用所述socket fd輸入或輸出的網(wǎng)絡數(shù)據(jù)包,并在所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

限流子模塊,用于基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

優(yōu)選地,所述限流子模塊包括:

實際流量獲取單元,用于獲取所述網(wǎng)絡數(shù)據(jù)包的實際數(shù)據(jù)流量;

規(guī)則查找單元,用于基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得對應的最大I/O帶寬閾值;

第一傳送單元,用于在所述實際數(shù)據(jù)流量小于所述最大I/O帶寬閾值時,按照所述實際數(shù)據(jù)流量進行所述網(wǎng)絡數(shù)據(jù)包的傳送;

第二傳送單元,用于在所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值時,按照所述最大I/O帶寬閾值進行所述網(wǎng)絡數(shù)據(jù)包的傳送。

優(yōu)選地,所述系統(tǒng)還包括:

緩存模塊,用于在所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對應的數(shù)據(jù),放置在預設(shè)大小的緩存區(qū)域中;

錯誤提示發(fā)送模塊,用于在所述緩存區(qū)域中存儲的數(shù)據(jù)量大小為所述預設(shè)大小時,向所述子進程對象發(fā)出錯誤提示。

優(yōu)選地,所述系統(tǒng)還包括:

規(guī)則刪除模塊,用于在檢測到所述子進程對象被刪除時,刪除對應的限流規(guī)則。

與背景技術(shù)相比,本申請實施例包括以下優(yōu)點:

在本申請實施例應用的分布式的多租戶共享集群資源的環(huán)境下,當確定業(yè)務對象對應的一個或多個父進程對象,由父進程對象創(chuàng)建子進程對象來進行業(yè)務對象的處理,并為子進程對象分配最大I/O帶寬閾值,使 得同一臺機器上的各個進程能夠使用的最大網(wǎng)絡輸入輸出帶寬不能超過指定的閾值,否則會進行限流以控制在最大I/O帶寬閾值范圍內(nèi),來達到多進程網(wǎng)絡隔離的目的,且不會對網(wǎng)絡造成穩(wěn)定性的影響,以滿足不同業(yè)務對象的網(wǎng)絡需求。

另外,本申請實施例采用可編程語言(例如C語言)實現(xiàn),因此可以更容易集成到其他系統(tǒng)之中。

附圖說明

圖1是本申請的一種數(shù)據(jù)流量限制的方法實施例一的步驟流程圖;

圖2是本申請的一種數(shù)據(jù)流量限制的方法實施例一中的數(shù)據(jù)流量限制原理示意圖;

圖3是本申請的一種數(shù)據(jù)流量限制的方法實施例一中的多進程帶寬分配示意圖;

圖4是本申請的一種數(shù)據(jù)流量限制的方法實施例二的步驟流程圖;

圖5是本申請的一種數(shù)據(jù)流量限制的方法實施例三的步驟流程圖;

圖6是本申請的一種數(shù)據(jù)流量限制的系統(tǒng)實施例一的結(jié)構(gòu)框圖;

圖7是本申請的一種數(shù)據(jù)流量限制的系統(tǒng)實施例二的結(jié)構(gòu)框圖。

具體實施方式

為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式對本申請作進一步詳細的說明。

參照圖1,示出了本申請的一種數(shù)據(jù)流量限制的方法實施例一的步驟流程圖,本申請實施例從應用層的角度加以說明,可以包括如下步驟:

步驟101,在應用層確定業(yè)務對象對應的一個或多個父進程對象;

在實際的業(yè)務場景中,大部分大型云計算平臺一般部署在多數(shù)據(jù)中心,每個數(shù)據(jù)中心有多個集群,每個集群可以有若干臺物理機器,每臺物理機器可以運行不同的業(yè)務對象,即典型的集群多租戶模式。

應用于本申請實施例,可以首先為業(yè)務對象決策出為其服務的一個或多個父進程對象,其中,父進程對象可以為操作系統(tǒng)預先創(chuàng)建好的進程,如守護進程,守護進程也就是通常說的Daemon進程,是Linux中的后臺服務進程,它是一個生存期較長的進程,通常獨立于控制終端并且周期性地執(zhí)行某種任務或等待處理某些發(fā)生的事件。

步驟102,分別采用所述父進程對象創(chuàng)建一個或多個對應的子進程對象,并為所述一個或多個子進程對象分配最大輸入輸出I/O帶寬閾值;

參照圖2所示的數(shù)據(jù)流量限制原理示意圖,在確定父進程對象以后,父進程對象可以進一步調(diào)用預設(shè)API接口創(chuàng)建create一個或多個子進程對象進行業(yè)務對象的處理,并為創(chuàng)建的子進程對象配置最大I/O帶寬閾值。其中,最大I/O帶寬閾值是指,最大輸出帶寬閾值;或者,最大輸入帶寬閾值;或者,既包括最大輸出帶寬閾值,也包括最大輸入帶寬閾值。

具體來說,分配到一臺物理機器的所有業(yè)務對象可以先分發(fā)到N個(N>0)常駐的系統(tǒng)daemon進程中,這些daemon進程作為父進程對象進一步創(chuàng)建m個(m>0)個子進程對象來運行業(yè)務對象的具體計算邏輯,其中,創(chuàng)建的所有子進程對象都具有對應的子進程標識,本申請實施例中子進程標識可以用SubPID表示。

由于子進程對象中執(zhí)行的用戶邏輯對于系統(tǒng)來說可能是透明的,出于安全和資源隔離的需要,父進程對象可以在創(chuàng)建每個子進程對象時分配最大輸入輸出I/O帶寬閾值,即每個子進程的網(wǎng)絡總帶寬使用一定不會超過指定的分配額,以此來限制其網(wǎng)絡資源使用。如圖3的多進程帶寬分配示意圖所示,在一臺物理機器上有兩個業(yè)務,其中,業(yè)務1的一個父進程對象1創(chuàng)建了三個子進程對象,最大輸入網(wǎng)絡帶寬分別指定為10M/s,40M/s,80M/s;最大輸出網(wǎng)絡帶寬分別指定為40M/s,20M/s,50M/s,假如這臺物理機器的最大輸入輸出帶寬為1000M/s,則這三個子進程對象能夠使用的網(wǎng)絡帶寬閾值就是指定的分配額。

需要說明的是,一個父進程對象理論上可以創(chuàng)建無數(shù)個子進程對象,只要數(shù)量在linux操作系統(tǒng)可以承受的范疇之內(nèi)即可,父進程對象的主要功能 是管理各個子進程對象的生命周期,如創(chuàng)建銷毀子進程對象,分配網(wǎng)絡帶寬和監(jiān)控每個子進程對象網(wǎng)絡使用情況等。

在本申請實施例中,還可以包括如下步驟:

采用所述父進程對象將所述子進程對象的子進程標識及對應的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進程對象對應的限流規(guī)則,其中,所述限流規(guī)則包括所述子進程對象的子進程標識及對應的最大I/O帶寬閾值。

具體來說,在本申請實施例中,父進程對象在創(chuàng)建子進程對象時,還可以將子進程對象的子進程標識SubPID及對應的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層。在具體實現(xiàn)中,如圖2所示,父進程對象每次創(chuàng)建一個子進程對象時,可以調(diào)用在操作系統(tǒng)應用層封裝的API接口,如AddGroup(GroupInfo)接口,以通過GroupInfo將子進程對象的SubPID、對應的最大I/O帶寬閾值等信息傳送至操作系統(tǒng)內(nèi)核層,促使操作系統(tǒng)內(nèi)核層根據(jù)子進程對象的SubPID及對應的最大I/O帶寬閾值創(chuàng)建對應的限流規(guī)則,關(guān)于操作系統(tǒng)內(nèi)核層的具體處理方式將在下一實施例中加以詳細說明。

步驟103,當檢測到所述子進程對象輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

在本申請的一種優(yōu)選實施例中,步驟103可以包括如下子步驟:

子步驟S11,采用父進程對象預先創(chuàng)建socket描述符fd,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;

子步驟S12,采用所述父進程對象將所述socket fd及對應的子進程對象的子進程標識發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進程對象將所述socket fd發(fā)送至對應的子進程中;

子步驟S13,當檢測到所述子進程對象采用所述socket fd輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使所述操作系統(tǒng)內(nèi)核層完成如下操作:

所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對應的子進程對象的子進 程標識,獲得對應的socket結(jié)構(gòu)體;

當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

具體來說,父進程對象可以預先創(chuàng)建每個子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的socket fd,并調(diào)用另一個封裝的API接口,如AddFd(subPID,fd),將該socket fd及對應的子進程對象的SubPID發(fā)送至操作系統(tǒng)內(nèi)核層,同時,將該socket fd發(fā)送至對應的子進程中,當檢測到子進程對象采用所述socket fd輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使操作系統(tǒng)內(nèi)核層完成如下操作:所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對應的子進程對象的SubPID,獲得對應的socket結(jié)構(gòu)體;當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述SubPID;基于所述SubPID,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。關(guān)于操作系統(tǒng)內(nèi)核層的上述操作將在下一實施例中進行詳述。

在本申請實施例的一種優(yōu)選實施例中,還可以包括如下步驟:

自適應調(diào)整所述子進程對象的最大I/O帶寬閾值,具體可以包括如下子步驟:

子步驟S21,確定父層級的最大I/O帶寬閾值,其中,所述父層級為在所述子進程對象的級別之上的對象,包括業(yè)務對象或物理機器;

本申請實施例設(shè)置的限流規(guī)則是有層級關(guān)系的,子層級的限流規(guī)則受到父層級的限流規(guī)則約束。其中,子層級可以為子進程對象,父層級可以為業(yè)務對象,或為,物理機器。

若父層級為物理機器,則父層級的最大I/O帶寬閾值為該物理機器的總帶寬。

若父層級為業(yè)務對象,則父層級的最大I/O帶寬閾值為該業(yè)務對象的最大I/O帶寬閾值,具體來說,在某些場景下,可能需要限定一個業(yè)務對象在一臺物理機器上所有子進程對象所能使用的最大I/O帶寬閾值,以防干擾其他業(yè)務對象的網(wǎng)絡使用。在這種情況下,可以先采用相同的API創(chuàng)建一個父Group(父分組),指定業(yè)務對象能使用的最大I/O帶寬閾值,然后創(chuàng)建該業(yè)務對象下的子進程對象,指定父Group的ID即可,那么該業(yè)務下的所有子進程將共享該業(yè)務對象指定的最大I/O帶寬閾值。

根據(jù)指定的父層級的最大I/O帶寬閾值的不同,調(diào)整得到的子進程對象的最大I/O帶寬閾值也是不同的。例如,物理機器的總帶寬為200M/s,然后設(shè)定了一個限流規(guī)則r1,最大輸出帶寬閾值為100M/s,之后又建立了兩條限流規(guī)則r2、r3,設(shè)定的最大輸出帶寬閾值都為80M/s;如果r2、r3在創(chuàng)建的時候沒有指定屬于哪個父層級,那么和r1一樣,父層級默認是物理機器,父層級的最大輸出帶寬閾值為200M/s;如果r2、r3創(chuàng)建的時候指定屬于r1規(guī)則,那么r2和r3的父層級是r1,父層級的最大輸出帶寬閾值為100M/s。

子步驟S22,若所述父層級所包含的所有子進程對象的最大I/O帶寬閾值的總和大于所述父層級的最大I/O帶寬閾值,則根據(jù)所述子進程對象的數(shù)量,計算每個子進程對象所分配的第一平均帶寬閾值;

在確定父層級的最大I/O帶寬閾值以后,可以進一步判斷該父層級所包含的所有子進程對象的最大I/O帶寬閾值之和是否大于該父層級的最大I/O帶寬閾值,如果判定結(jié)果為否定,則表示當前父層級的資源能夠滿足各子進程對象的最大I/O帶寬閾值所需;如果判定結(jié)果為肯定,則表示當前父層級的資源不能夠滿足各子進程對象的最大I/O帶寬閾值所需,此時進一步計算各子進程對象所占的平均帶寬閾值(第一平均帶寬閾值)。

例如,一臺物理機器最大輸出總帶寬是100M/s,依次按順序創(chuàng)建子進程對象1,2,3,4,5,分配的最大輸出帶寬依次是10M/s,20M/s,40M/s,80M/s,120M/s,由于五個子進程對象的最大輸出帶寬閾值之和(10M/s+20M/s+40M/s+80M/s+120M/s=270M/s),大于物理機器最大輸 出總帶寬是100M/s,此時可以進一步計算每個子進程對象所占的第一平均帶寬閾值為100/5=20M/s。

子步驟S23,若所述子進程對象的最大I/O帶寬閾值小于所述第一平均帶寬閾值,則保持所述子進程對象的最大I/O帶寬閾值不變;

子步驟S24,若所述子進程對象的最大I/O帶寬閾值大于所述第一平均帶寬閾值,則計算第二平均帶寬閾值,并將所述子進程對象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值。

具體來說,對于最大I/O帶寬閾值小于第一平均帶寬閾值的子進程對象,可以保持其最大I/O帶寬閾值不變,對于最大I/O帶寬閾值大于第一平均帶寬閾值的子進程對象,則進一步計算第二平均帶寬閾值,其中,第二平均帶寬閾值可以按照如下方式計算:(所述父層級的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進程對象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進程對象的數(shù)量)。

例如,在上例中,對于依次創(chuàng)建子進程對象1,2,3,4,5,那么每次新創(chuàng)建一個子進程對象后,所有的進程能達到的最大輸出帶寬閾值自適應調(diào)整的過程為:

創(chuàng)建子進程對象1時,由于分配的最大輸出帶寬10M/s并沒有超過物理機器最大輸出總帶寬是100M/s,則子進程對象1的最大輸出帶寬保持不變,為(10M/s);

繼續(xù)創(chuàng)建子進程對象2,由于子進程對象1和子進程對象2的最大輸出帶寬總和(10+20=30M/s)沒有超過物理機器最大輸出總帶寬是100M/s,則子進程對象1和子進程對象2的最大輸出帶寬保持不變,為(10M/s,20M/s);

繼續(xù)創(chuàng)建子進程對象3,由于子進程對象1至子進程對象3的最大輸出帶寬總和(10+20+40=70M/s)沒有超過物理機器最大輸出總帶寬是100M/s,則子進程對象1至子進程對象3的最大輸出帶寬保持不變,為(10M/s,20M/s,40M/s);

繼續(xù)創(chuàng)建子進程對象4,由于子進程對象1至子進程對象4的最大輸 出帶寬總和(10+20+40+80=150M/s)超過了物理機器最大輸出總帶寬是100M/s,則最大輸出帶寬小于或等于第一平均帶寬閾值的子進程對象的最大輸出帶寬保持不變,即子進程對象1和子進程對象2的最大輸出帶寬保持不變,對于最大輸出帶寬大于第一平均帶寬閾值的子進程對象的最大輸出帶寬,調(diào)整為第二平均帶寬閾值,第二平均帶寬閾值的計算方法為:(100-10-20)/2=35,即子進程1-4的調(diào)整后的最大輸出帶寬閾值為:(10M/s,20M/s,35M/s,35M/s);

繼續(xù)創(chuàng)建子進程對象5,由于子進程對象1至子進程對象5的最大輸出帶寬總和(10+20+40+80+120=270M/s)超過了物理機器最大輸出總帶寬是100M/s,則最大輸出帶寬小于或等于第一平均帶寬閾值的子進程對象的最大輸出帶寬保持不變,即子進程對象1和子進程對象2的最大輸出帶寬保持不變,對于最大輸出帶寬大于第一平均帶寬閾值的子進程對象的最大輸出帶寬,調(diào)整為第二平均帶寬閾值,第二平均帶寬閾值的計算方法為:(100-10-20)/3=23,即子進程1-5的調(diào)整后的最大輸出帶寬閾值為:(10M/s,20M/s,23M/s,23M/s,23M/s)。

需要說明的是,在實際中,上述得到的每個子進程對象自適應調(diào)整結(jié)果可以有5%左右的微小波動誤差,但總的來說所有進程都是在閾值范圍內(nèi)共享輸出/輸入帶寬的。

通過上述自適應調(diào)整子進程對象的最大I/O帶寬閾值,可以達到靈活且精準控制進程的最大輸入輸出帶寬的目標。

需要說明的是,在本申請實施例中,操作系統(tǒng)可以采用可插拔的方式對于線上已經(jīng)運行的進程進行升級,并且升級過程不會影響進程正常運行。在一種實施方式中,可以使用dlopen函數(shù)(其主要功能是打開一個動態(tài)鏈接庫,并返回動態(tài)鏈接庫的句柄)動態(tài)加載本申請實施例的代碼,來升級進程,可使運行中的進程透明的加載和卸載本申請實施例的代碼。

在本申請實施例應用的分布式的多租戶共享集群資源的環(huán)境下,當確定業(yè)務對象對應的一個或多個父進程對象,由父進程對象創(chuàng)建子進程對 象來進行業(yè)務對象的處理,并為子進程對象分配最大I/O帶寬閾值,使得同一臺機器上的各個進程能夠使用的最大網(wǎng)絡輸入輸出帶寬不能超過指定的閾值,否則會進行限流以控制在最大I/O帶寬閾值范圍內(nèi),來達到多進程網(wǎng)絡隔離的目的,且不會對網(wǎng)絡造成穩(wěn)定性的影響,以滿足不同業(yè)務對象的網(wǎng)絡需求。

另外,本申請實施例采用可編程語言(例如C語言)實現(xiàn),因此可以更容易集成到其他系統(tǒng)之中。

參照圖4,示出了本申請的一種數(shù)據(jù)流量限制的方法實施例二的步驟流程圖,本申請實施例從操作系統(tǒng)內(nèi)核層的角度加以說明,可以包括如下步驟:

步驟401,在操作系統(tǒng)內(nèi)核層接收父進程對象發(fā)送的與一個或多個子進程對象對應的最大輸入輸出I/O帶寬閾值;

應用于本申請實施例,父進程對象與業(yè)務對象關(guān)聯(lián),兩者的關(guān)系為多對多的關(guān)系;子進程對象是采用父進程對象創(chuàng)建的進程對象,一個父進程對象可以創(chuàng)建一個或多個子進程對象;最大I/O帶寬閾值是所述父進程對象創(chuàng)建子進程對象時為所述子進程對象分配的帶寬閾值,其中,最大I/O帶寬閾值是指,最大輸出帶寬閾值;或者,最大輸入帶寬閾值;或者,既包括最大輸出帶寬閾值,也包括最大輸入帶寬閾值。

具體來說,在確定業(yè)務對象的父進程對象以后,父進程對象可以進一步調(diào)用預設(shè)API接口創(chuàng)建create一個或多個子進程對象來進行業(yè)務對象的處理,并為創(chuàng)建的子進程對象配置最大I/O帶寬閾值。

父進程對象每次創(chuàng)建一個子進程對象時,還可以調(diào)用在操作系統(tǒng)應用層封裝的API接口,如AddGroup(GroupInfo)接口,以通過GroupInfo將子進程對象的SubPID、對應的最大I/O帶寬閾值等信息傳送至操作系統(tǒng)內(nèi)核層。

在操作系統(tǒng)內(nèi)核層,可以通過內(nèi)核自帶的流量控制器Traffic Control(簡稱TC)來接收父進程對象傳送的子進程對象的SubPID、對應的 最大I/O帶寬閾值等信息。

操作系統(tǒng)內(nèi)核層接收到來自應用層的信息以后,本申請實施例還可以包括如下步驟:

創(chuàng)建與所述子進程對象對應的限流規(guī)則。

具體來說,操作系統(tǒng)內(nèi)核層可以在TC中根據(jù)子進程對象的子進程標識及對應的最大I/O帶寬閾值創(chuàng)建與一條該子進程對象對應的限流規(guī)則,其中,該限流規(guī)則包括子進程對象的子進程標識及對應的最大I/O帶寬閾值。

在實際中,在流量控制器TC中存儲的限流規(guī)則可以采用機器全局唯一的規(guī)則ID進行標識,由于子進程對象的子進程標識也是全局唯一的,因此,可以將子進程對象的子進程標識作為規(guī)則ID,實際上是將TC的classid賦值為子進程標識。

在實際應用中,在一臺物理機器上,不管有多少個父進程對象,以及每個父進程對象創(chuàng)建了多少個子進程對象,每個子進程對象在TC中對應的限流規(guī)則都是公平使用帶寬的。然而,linux內(nèi)核自帶的TC可能存在如下缺陷:同一個父進程對象下的所有子進程對象對應的限流規(guī)則不能完全公平的共享父進程對象所設(shè)置的規(guī)則帶寬,導致有些限流規(guī)則由于分配不到帶寬而被餓死的情況,即帶寬一直被其他限流規(guī)則占用?;诖?,應用于本申請實施例,可以采用hotfix(hotfix是針對某一個具體的系統(tǒng)漏洞或安全問題而發(fā)布的專門解決該漏洞或安全問題的小程序,通常稱為修補程序)技術(shù)修補該缺陷。

具體來說,可以采用hotfix技術(shù)對TC默認實現(xiàn)的HTB和SFQ隊列進行了優(yōu)化,使所有限流規(guī)則都可以平等的共享帶寬。其中,HTB(Hierarchical Token Bucke,分層的令牌桶)隊列是TC可分類隊列的一種,主要配合TC進行流量控制;SFQ(Stochastic Fairness Queueing,隨機公平隊列)是公平隊列算法家族中的一個簡單實現(xiàn),主要針對一個TCP會話或者UDP流,流量被分成相當多數(shù)量的FIFO(First Input First Outpu,先入先出)隊列中,每個隊列對應一個會話,數(shù)據(jù)按照簡單輪轉(zhuǎn)的方式 發(fā)送,每個會話都按順序得到發(fā)送機會,這種方式非常公平,保證了每一個會話都不會被其它會話所淹沒。

步驟402,當接收到所述子進程對象發(fā)送的輸入或輸出網(wǎng)絡數(shù)據(jù)包時,依據(jù)所述子進程對象對應的最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

當在操作系統(tǒng)內(nèi)核層創(chuàng)建了與子進程對象關(guān)聯(lián)的限流規(guī)則以后,接下來可以讓子進程對象創(chuàng)建的所有網(wǎng)絡流關(guān)聯(lián)上在TC中創(chuàng)建的限流規(guī)則,從而使用該限流規(guī)則對網(wǎng)絡流的數(shù)據(jù)流量進行限制。

在本申請實施例的一種優(yōu)選實施例中,步驟402可以包括如下子步驟:

子步驟S31,接收父進程對象發(fā)送的預先創(chuàng)建的socket fd及對應的子進程對象的子進程標識,其中,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;

子步驟S32,根據(jù)所述socket fd及對應的子進程對象的子進程標識,獲取到對應的socket結(jié)構(gòu)體;

在具體實現(xiàn)中,父進程對象可以預先創(chuàng)建每個子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的socket fd,并調(diào)用另一個封裝的API接口,如AddFd(subPID,fd),將該socket fd及對應的子進程對象的SubPID發(fā)送至操作系統(tǒng)內(nèi)核層,當父進程對象調(diào)用AddFD(subPID,fd)時,這個接口可以通過linux系統(tǒng)提供的setsockopt方法,根據(jù)socket fd找到tcp連接在內(nèi)核網(wǎng)絡層對應的Sock結(jié)構(gòu),并給該Sock結(jié)構(gòu)打上子進程標識的標簽。

子步驟S33,接收子進程對象采用所述socket fd輸入或輸出的網(wǎng)絡數(shù)據(jù)包;

子步驟S34,當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

當子進程對象使用socket fd傳送網(wǎng)絡數(shù)據(jù)包時,網(wǎng)絡數(shù)據(jù)包經(jīng)過內(nèi)核網(wǎng)絡層協(xié)議棧socket結(jié)構(gòu)體的時候,則為該網(wǎng)絡數(shù)據(jù)包打上子進程標 識的標簽。

子步驟S35,基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

如圖2所示,當添加SubPID的標簽的網(wǎng)絡數(shù)據(jù)包再經(jīng)過TC時,則可以根據(jù)這個標簽找到在TC中對應的限流規(guī)則來對網(wǎng)絡數(shù)據(jù)包進行限流,也即查找與網(wǎng)絡數(shù)據(jù)包中SubPID相同的限流規(guī)則,基于該限流規(guī)則中所限定的最大I/O帶寬閾值對網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

在本申請實施例的一種優(yōu)選實施例中,子步驟S35進一步可以包括如下子步驟:

子步驟S351,獲取所述網(wǎng)絡數(shù)據(jù)包的實際數(shù)據(jù)流量;

子步驟S352,基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得對應的最大I/O帶寬閾值;

子步驟S353,若所述實際數(shù)據(jù)流量小于所述最大I/O帶寬閾值,則按照所述實際數(shù)據(jù)流量進行所述網(wǎng)絡數(shù)據(jù)包的傳送;

子步驟S354,若所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,則按照所述最大I/O帶寬閾值進行所述網(wǎng)絡數(shù)據(jù)包的傳送。

在具體實現(xiàn)中,當網(wǎng)絡數(shù)據(jù)包關(guān)聯(lián)上限流規(guī)則以后,如果網(wǎng)絡數(shù)據(jù)包的實際數(shù)據(jù)流量的速度沒有超過限流規(guī)則中設(shè)定的最大I/O帶寬閾值,那么該實際數(shù)據(jù)流量對當前網(wǎng)絡數(shù)據(jù)通信基本沒有影響,此時可以采用實際數(shù)據(jù)流量進行網(wǎng)絡數(shù)據(jù)包的傳送。

如果網(wǎng)絡數(shù)據(jù)包的實際數(shù)據(jù)流量的速度超過限流規(guī)則中設(shè)定的最大I/O帶寬閾值,則將網(wǎng)絡數(shù)據(jù)包的流量限流在限流規(guī)則中設(shè)定的最大I/O帶寬閾值。

在一種優(yōu)選實施方式中,本申請實施例還可以包括如下步驟:

若所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對應的數(shù)據(jù),放置在預設(shè)大小的緩存區(qū)域中;若所述緩存區(qū)域中存儲的數(shù)據(jù)量大小為所述預設(shè) 大小,則向所述子進程對象發(fā)出錯誤提示。

在具體實現(xiàn)中,如果子進程對象的實際數(shù)據(jù)流量超過最大I/O帶寬閾值,則可以將超出部分的數(shù)據(jù)作為待發(fā)送網(wǎng)絡數(shù)據(jù)包放置在預設(shè)大小的緩存區(qū)域buffer中,一旦實際數(shù)據(jù)流量降到最大I/O帶寬閾值以下,則優(yōu)先把buffer里面的數(shù)據(jù)發(fā)送出去。

如果實際數(shù)據(jù)流量持續(xù)超過設(shè)定的最大I/O帶寬閾值,當緩存的待發(fā)送網(wǎng)絡數(shù)據(jù)包超過了linux內(nèi)核默認的緩存buffer的大小時,可以直接丟棄超出數(shù)據(jù),并向子進程對象發(fā)出錯誤提示,該錯誤提示為提醒子進程該網(wǎng)絡數(shù)據(jù)包發(fā)送失敗的提示,這種情況下,子進程對象可以選擇重發(fā)數(shù)據(jù)。

例如,linux內(nèi)核默認的buffer為50M,某個子進程對象設(shè)定的最大輸出帶寬閾值為100M/s,一開始該子進程對象的實際數(shù)據(jù)流量沒有超過100M/s,則沒有有任何數(shù)據(jù)緩存到buffer中;若某一時刻該子進程對象的實際數(shù)據(jù)流量變成110M/s,那么由于限流規(guī)則的作用,流速最大達到100M/s,多出來的10M/s的數(shù)據(jù)則可以緩存到buffer中,若這種情況持續(xù)5s,10M/s*5s=50M,此時buffer的50M的容量存滿,之后如果實際數(shù)據(jù)流量還繼續(xù)超過閾值,那么多出來的數(shù)據(jù)就沒有地方放了,內(nèi)核可以直接丟棄。

在一種優(yōu)選實施方式中,本申請實施例還可以包括如下步驟:

若檢測到所述子進程對象被刪除,則刪除對應的限流規(guī)則。

在具體實現(xiàn)中,每創(chuàng)建一個子進程對象時,都在內(nèi)核中創(chuàng)建了一條限流規(guī)則,但是內(nèi)核能夠容納的限流規(guī)則的數(shù)量是有限的,因此,回收不用的限流規(guī)則所占的內(nèi)存空間至關(guān)重要。

應用于本申請實施例,操作系統(tǒng)可以在應用層限定一個合理的最大規(guī)則數(shù)量,并在每個父進程對象中啟動一個后臺線程專門來銷毀無用的限流規(guī)則,一種優(yōu)選實施方式可以為:查詢處于某一業(yè)務對象的所有現(xiàn)有的限流規(guī)則,如果某一個限流規(guī)則對應的子進程對象子進程標識不存在,則可以調(diào)用API銷毀在內(nèi)核中的該限流規(guī)則,通過這種方式來回收限流 規(guī)則所占的資源,可以不用考慮子進程crash的情況,也能保證資源不泄露,提高系統(tǒng)性能。

在本申請實施例中,通過設(shè)置子進程對象的最大I/O帶寬閾值來精準的控制每個進程的最大帶寬使用,并且不會對網(wǎng)絡造成穩(wěn)定性的影響,在一臺機器上的每個進程可以在閾值范圍內(nèi)公平穩(wěn)定的共享網(wǎng)絡帶寬。

參照圖5,示出了本申請的一種數(shù)據(jù)流量限制的方法實施例三的步驟流程圖,本申請實施例結(jié)合圖2說明應用層與操作系統(tǒng)內(nèi)核層的交互過程,可以包括如下步驟:

步驟501,在應用層確定業(yè)務對象對應的一個或多個父進程對象;

步驟502,分別采用所述父進程對象創(chuàng)建一個或多個對應的子進程對象,并為所述一個或多個子進程對象分配最大I/O帶寬閾值;

步驟503,所述父進程對象將所述子進程對象的子進程標識及對應的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層;

步驟504,在操作系統(tǒng)內(nèi)核層中,創(chuàng)建與所述子進程對象對應的限流規(guī)則;

步驟505,采用父進程對象預先創(chuàng)建socket描述符fd,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;

步驟506,采用所述父進程對象將所述socket fd及對應的子進程對象的子進程標識發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進程對象將所述socket fd發(fā)送至對應的子進程中;;

步驟507,當檢測到所述子進程對象采用所述socket fd輸入或輸出網(wǎng)絡數(shù)據(jù)包時,操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對應的子進程對象的子進程標識,獲取到對應的socket結(jié)構(gòu)體;

步驟508,當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,操作系統(tǒng)內(nèi)核層在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

步驟509,基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大 I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制;

在本申請實施例的一種優(yōu)選實施例中,所述509進一步可以包括如下子步驟:

子步驟S41,獲取所述網(wǎng)絡數(shù)據(jù)包的實際數(shù)據(jù)流量;

子步驟S42,基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則;

子步驟S43,若所述實際數(shù)據(jù)流量小于所述最大I/O帶寬閾值,則按照所述實際數(shù)據(jù)流量進行所述網(wǎng)絡數(shù)據(jù)包的傳送;

子步驟S44,若所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,則按照所述最大I/O帶寬閾值進行所述網(wǎng)絡數(shù)據(jù)包的傳送。

應用于本申請實施例,子進程對象的最大I/O帶寬閾值可以自適應調(diào)整。在一種實施方式中,自適應調(diào)整的過程如下:

A、確定父層級的最大I/O帶寬閾值,其中,所述父層級為在所述子進程對象的級別之上的對象,包括業(yè)務對象或物理機器;

B、若所述父層級所包含的子進程對象的最大I/O帶寬閾值的總和大于所述父層級的最大I/O帶寬閾值,則根據(jù)所述子進程對象的數(shù)量,計算每個子進程對象所分配的第一平均帶寬閾值;

C、若所述子進程對象的最大I/O帶寬閾值小于所述第一平均帶寬閾值,則保持所述子進程對象的最大I/O帶寬閾值不變;

D、若所述子進程對象的最大I/O帶寬閾值大于所述第一平均帶寬閾值,則計算第二平均帶寬閾值,并將所述子進程對象的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值。

步驟510,在操作系統(tǒng)內(nèi)核層,若所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對應的數(shù)據(jù),放置在預設(shè)大小的緩存區(qū)域中;

步驟511,若所述緩存區(qū)域中存儲的數(shù)據(jù)量大小為所述預設(shè)大小,則向所述子進程對象發(fā)出錯誤提示;

步驟512,若檢測到所述子進程對象被刪除,則在操作系統(tǒng)內(nèi)核中刪 除對應的限流規(guī)則。

對于圖5的實施例而言,由于其與圖1及圖4的實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。

需要說明的是,對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應該知悉,本申請實施例并不受所描述的動作順序的限制,因為依據(jù)本申請實施例,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本申請實施例所必須的。

參照圖6,示出了本申請一種數(shù)據(jù)流量限制的系統(tǒng)實施例一的結(jié)構(gòu)框圖,具體可以包括如下模塊:

父進程確定模塊601,用于在應用層確定業(yè)務對象對應的一個或多個父進程對象;

子進程創(chuàng)建模塊602,用于分別采用所述父進程對象創(chuàng)建一個或多個對應的子進程對象,并為所述一個或多個子進程對象分配最大輸入輸出I/O帶寬閾值;

第一流量限制模塊603,用于在檢測到所述子進程對象輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使操作系統(tǒng)內(nèi)核層依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

在本申請實施例的一種優(yōu)選實施例中,所述子進程具有子進程標識,所述系統(tǒng)還包括:

信息發(fā)送模塊,用于采用所述父進程對象將所述子進程對象的子進程標識及對應的最大I/O帶寬閾值發(fā)送至操作系統(tǒng)內(nèi)核層,促使所述操作系統(tǒng)內(nèi)核層創(chuàng)建與所述子進程對象對應的限流規(guī)則,其中,所述限流規(guī)則包括所述子進程對象的子進程標識及對應的最大I/O帶寬閾值。

在本申請實施例的一種優(yōu)選實施例中,所述第一流量限制模塊603 可以包括如下子模塊:

描述符獲取子模塊,用于采用父進程對象預先創(chuàng)建socket描述符fd,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;;

描述符發(fā)送子模塊,用于采用所述父進程對象將所述socket fd及對應的子進程對象的子進程標識發(fā)送至操作系統(tǒng)內(nèi)核層,以及,采用所述父進程對象將所述socket fd發(fā)送至對應的子進程中,當檢測到所述子進程對象采用所述socket fd輸入或輸出網(wǎng)絡數(shù)據(jù)包時,促使所述操作系統(tǒng)內(nèi)核層完成如下操作:

所述操作系統(tǒng)內(nèi)核層根據(jù)所述socket fd及對應的子進程對象的子進程標識,獲得對應的socket結(jié)構(gòu)體;

當所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

在本申請實施例的一種優(yōu)選實施例中,所述系統(tǒng)還包括:

調(diào)整模塊,用于自適應調(diào)整所述子進程對象的最大I/O帶寬閾值;

所述調(diào)整模塊進一步包括:

父層級閾值確定子模塊,用于確定父層級的最大I/O帶寬閾值,其中,所述父層級為在所述子進程對象的級別之上的對象,包括業(yè)務對象或物理機器;

平均值計算子模塊,用于在所述父層級所包含的所有子進程對象的最大I/O帶寬閾值的總和大于所述父層級的最大I/O帶寬閾值時,根據(jù)所述子進程對象的數(shù)量,計算每個子進程對象所分配的第一平均帶寬閾值;

閾值保持子模塊,用于在所述子進程對象的最大I/O帶寬閾值小于所述第一平均帶寬閾值時,保持所述子進程對象的最大I/O帶寬閾值不變;

閾值調(diào)整子模塊,用于在所述子進程對象的最大I/O帶寬閾值大于所述第一平均帶寬閾值時,計算第二平均帶寬閾值,并將所述子進程對象 的最大I/O帶寬閾值調(diào)整為所述第二平均帶寬閾值,其中,所述第二平均帶寬閾值按照如下方式計算:(所述父層級的最大I/O帶寬閾值-所有小于所述第一平均帶寬閾值的子進程對象的最大I/O帶寬閾值)/(大于所述第一平均帶寬閾值的子進程對象的數(shù)量)。

對于系統(tǒng)實施例而言,由于其與上述方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。

參照圖7,示出了本申請一種數(shù)據(jù)流量限制的系統(tǒng)實施例二的結(jié)構(gòu)框圖,具體可以包括如下模塊:

閾值接收模塊701,用于在操作系統(tǒng)內(nèi)核層接收父進程對象發(fā)送的與一個或多個子進程對象對應的最大輸入輸出I/O帶寬閾值,其中,所述父進程對象與業(yè)務對象關(guān)聯(lián),所述子進程對象是采用所述父進程對象創(chuàng)建的進程對象,所述最大I/O帶寬閾值是所述父進程對象創(chuàng)建子進程對象時為所述子進程對象分配的帶寬閾值;

第二流量限制模塊702,用于在接收到所述子進程對象發(fā)送的輸入或輸出網(wǎng)絡數(shù)據(jù)包時,依據(jù)所述子進程對象對應的最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

在本申請實施例的一種優(yōu)選實施例中,所述子進程具有子進程標識,所述系統(tǒng)還包括:

規(guī)則創(chuàng)建模塊,用于創(chuàng)建與所述子進程對象對應的限流規(guī)則,其中,所述限流規(guī)則包括所述子進程對象的子進程標識及對應的最大I/O帶寬閾值。

在本申請實施例的一種優(yōu)選實施例中,所述第二流量限制模塊702進一步可以包括如下子模塊:

信息接收子模塊,用于接收父進程對象發(fā)送的預先建立的socket fd及對應的子進程對象的子進程標識,其中,所述socket fd為所述子進程對象創(chuàng)建網(wǎng)絡連接socket時所需的信息;

Socket獲取子模塊,用于根據(jù)所述socket fd及對應的子進程對象的 子進程標識,獲取到對應的socket結(jié)構(gòu)體;

標識添加子模塊,用于接收子進程對象采用所述socket fd輸入或輸出的網(wǎng)絡數(shù)據(jù)包,并在所述網(wǎng)絡數(shù)據(jù)包通過所述socket結(jié)構(gòu)體時,在所述網(wǎng)絡數(shù)據(jù)包中添加所述子進程標識;

限流子模塊,用于基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得所述子進程對象對應的最大I/O帶寬閾值,并依據(jù)所述最大I/O帶寬閾值對所述網(wǎng)絡數(shù)據(jù)包進行數(shù)據(jù)流量限制。

在本申請實施例的一種優(yōu)選實施例中,所述限流子模塊進一步可以包括如下單元:

實際流量獲取單元,用于獲取所述網(wǎng)絡數(shù)據(jù)包的實際數(shù)據(jù)流量;

規(guī)則查找單元,用于基于所述子進程標識,查找與所述網(wǎng)絡數(shù)據(jù)包相匹配的限流規(guī)則,獲得對應的最大I/O帶寬閾值;

第一傳送單元,用于在所述實際數(shù)據(jù)流量小于所述最大I/O帶寬閾值時,按照所述實際數(shù)據(jù)流量進行所述網(wǎng)絡數(shù)據(jù)包的傳送;

第二傳送單元,用于在所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值時,按照所述最大I/O帶寬閾值進行所述網(wǎng)絡數(shù)據(jù)包的傳送。

在本申請實施例的一種優(yōu)選實施例中,所述系統(tǒng)還包括:

緩存模塊,用于在所述實際數(shù)據(jù)流量大于所述最大I/O帶寬閾值,將所述實際數(shù)據(jù)流量中除所述最大I/O帶寬閾值之外的剩余數(shù)據(jù)流量對應的數(shù)據(jù),放置在預設(shè)大小的緩存區(qū)域中;

錯誤提示發(fā)送模塊,用于在所述緩存區(qū)域中存儲的數(shù)據(jù)量大小為所述預設(shè)大小時,向所述子進程對象發(fā)出錯誤提示。

在本申請實施例的一種優(yōu)選實施例中,所述系統(tǒng)還包括:

規(guī)則刪除模塊,用于在檢測到所述子進程對象被刪除時,刪除對應的限流規(guī)則。

對于系統(tǒng)實施例而言,由于其與上述方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。

本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點 說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。

本領(lǐng)域內(nèi)的技術(shù)人員應明白,本申請實施例的實施例可提供為方法、裝置、或計算機程序產(chǎn)品。因此,本申請實施例可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請實施例可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。

本申請實施例是參照根據(jù)本申請實施例的方法、終端設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序操作指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機程序操作指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器執(zhí)行的操作指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序操作指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理終端設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的操作指令產(chǎn)生包括操作指令裝置的制造品,該操作指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序操作指令也可裝載到計算機或其他可編程數(shù)據(jù)處理終端設(shè)備上,使得在計算機或其他可編程終端設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程終端設(shè)備上執(zhí)行的操作指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

盡管已描述了本申請實施例的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員 一旦得知了基本創(chuàng)造性概念,則可對這些實施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本申請實施例范圍的所有變更和修改。

最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者終端設(shè)備中還存在另外的相同要素。

以上對本申請所提供的一種數(shù)據(jù)流量限制的方法及系統(tǒng)進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本申請的限制。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1