本發(fā)明屬于網(wǎng)絡功能虛擬化和帶寬保障的虛擬機部署技術領域,尤其涉及一種帶寬保障的虛擬網(wǎng)絡功能部署方法。
背景技術:
公有云數(shù)據(jù)中心對外向租戶提供計算資源、存儲資源和網(wǎng)絡資源來滿足其需求,而云計算與NFV(Network Function Virtualization,即網(wǎng)絡功能虛擬化)的興起也使得企業(yè)將自己的虛擬網(wǎng)絡功能(VNF)部署在云數(shù)據(jù)中心中以降低成本并提高效率。在NFV場景下,租戶的請求通常是SFC(Service Function Chaining,即服務功能鏈),如何對租戶的SFC請求進行合理的帶寬保障的部署,是當前網(wǎng)絡研究的重要研究問題。
現(xiàn)有的VNF部署方法多采用彈性部署的策略,即數(shù)據(jù)中心動態(tài)的調節(jié)VNF實例的數(shù)量和放置位置來滿足不同流量負載情況下的CPU和帶寬需求。但是彈性部署策略存在兩個問題。第一,彈性放置的策略很容易浪費大量的計算和帶寬資源。因為VNF實例的放置位置是由當前流量負載決定,放置位置是不可預測的。不良的放置會使得流量需要走更長的路徑,因此可能浪費更多的帶寬。第二,彈性擴展策略會導致更多的虛擬機操作開銷,包括虛擬機的啟動、終止、遷移以及狀態(tài)同步等。由于維持狀態(tài)一致性的開銷較大,虛擬機的遷移往往需要多達幾秒鐘的時間,這不僅引入了更多的流量而且增加了任務的完成時間。數(shù)據(jù)中心多變的流量負載會導致頻繁的虛擬機擴展與遷移,因而不可避免的加劇了網(wǎng)絡開銷。
技術實現(xiàn)要素:
針對上述問題,本發(fā)明提出了一種帶寬保障的虛擬網(wǎng)絡功能部署方法,包括如下步驟:
步驟1:根據(jù)SFC和帶寬需求建立虛擬網(wǎng)絡功能實例通信圖;
步驟2:基于生成的所述虛擬網(wǎng)絡功能實例通信圖,建立對應的帶寬保障的虛擬網(wǎng)絡功能實例部署方案。
所述步驟1具體包括:
步驟1.1:根據(jù)SFC請求中的每一個虛擬網(wǎng)絡功能計算所需虛擬網(wǎng)絡功能實例的個數(shù);
步驟1.2:計算每個所述虛擬網(wǎng)絡功能實例的帶寬需求;
步驟1.3:分析虛擬網(wǎng)絡功能實例放置的帶寬節(jié)約原理;
步驟1.4:根據(jù)SFC請求的連接情況和虛擬網(wǎng)絡功能實例的數(shù)目,建立虛擬網(wǎng)絡功能實例通信圖。
所述步驟1.3具體包括:
步驟1.3.1:計算上下級虛擬網(wǎng)絡功能之間的內部帶寬需求;
步驟1.3.2:計算每個虛擬網(wǎng)絡功能的外部帶寬需求;
步驟1.3.3:計算跨子樹的總流量和子樹內部的總流量;
步驟1.3.4:將所有的屬于同數(shù)據(jù)中心拓撲層的外部流量相加;
步驟1.3.5:根據(jù)相加結果,對每一個子樹最小化外部帶寬、最大化內部帶寬。
所述步驟2具體包括:
步驟2.1:從最底層開始選定目標層中的一棵子樹作為目標子樹;
步驟2.2:計算子樹中的剩余虛擬機槽資源,如果虛擬網(wǎng)絡功能實例通信圖中的虛擬網(wǎng)絡功能實例個數(shù)大于子樹剩余虛擬機槽個數(shù),則選擇當前層的下一棵子樹,繼續(xù)步驟2.2,否則轉步驟2.3;
步驟2.3:根據(jù)虛擬網(wǎng)絡功能實例通信圖G,選定的虛擬網(wǎng)絡功能實例集合St和選定的子樹t對帶寬資源進行分配;
步驟2.4:如果分配成功,則返回成功并得到分配的結果值,否則進入步驟2.5;
步驟2.5:若當前層中有子樹并未分配,則選擇所述子樹的下一棵子樹作為目標子樹,進入步驟2.2;否則進入步驟2.6;
步驟2.6:若沒有搜索根節(jié)點子樹,則上移一層進入步驟2.1,否則無法接受此請求,返回失敗。
所述步驟2.3具體包括:
步驟2.3.1:如果當前層數(shù)為最底層,則直接將SFC請求中的虛擬網(wǎng)絡功能實例部署到此子樹上;
步驟2.3.2:如果當前層數(shù)不是最底層,則對子樹t的所有子樹按照可用資源的多少進行降序排列,所述可用資源包括虛擬機槽的數(shù)量和可用的出口帶寬;
步驟2.3.3:對子樹t的子樹v進行分配,首先賦值cnt為虛擬網(wǎng)絡功能實例集合St中未使用的虛擬網(wǎng)絡功能實例數(shù)量和子樹v中剩余的虛擬機槽數(shù)量的較小值;
步驟2.3.4:設置具有最大聚合帶寬的虛擬網(wǎng)絡功能實例集合Sv為空集,選擇St中沒有使用過的具有最大聚合帶寬的虛擬網(wǎng)絡功能實例放入Sv中;
步驟2.3.5:若Sv中的虛擬網(wǎng)絡功能實例的個數(shù)小于等于cnt,且子樹v的所有入流量總和Cvin和子樹v的所有出流量總和Cvout都不超過子樹v的預留帶寬,則從虛擬網(wǎng)絡功能實例集合St中選擇使得跨子樹的總流量最小而子樹內部的總流量最大的虛擬網(wǎng)絡功能實例放入具有最大聚合帶寬的虛擬網(wǎng)絡功能實例Sv中;
步驟2.3.6:將虛擬網(wǎng)絡功能實例通信圖G,具有最大聚合帶寬的虛擬網(wǎng)絡功能實例Sv,子數(shù)v作為輸入?yún)?shù),返回步驟2.3;
步驟2.3.7:若對子樹v分配成功,則為子樹v預留出口鏈路的帶寬,標記Sv中的虛擬網(wǎng)絡功能實例為已使用;若虛擬網(wǎng)絡功能實例集合St中還有未分配的且子樹t還有子樹沒有考慮,進入子樹t的下一棵子樹,并轉入步驟2.3.3,否則轉入步驟2.3.8;
步驟2.3.8:如果在考慮了所有的子樹之后虛擬網(wǎng)絡功能實例集合St中仍然有未分配的子樹,則去掉以前分配的資源;否則轉步驟2.3.9;
步驟2.3.9:返回分配的結果。
本發(fā)明的有益效果在于:
本發(fā)明采用帶寬保障式的VNF部署策略,可以根據(jù)用戶提供的帶寬信息,并結合當前全局的資源使用情況,做出更為全局優(yōu)化的VNF部署。VNF實例通信模型和啟發(fā)算的VNF部署算法,一方面保障了用戶的帶寬需求,另一方面集中式的放置用戶的虛擬機,從而減少不必要的帶寬損耗,接受更多的實例。
附圖說明
圖1是VNF實例通信圖;
圖2是VNF實例部署流程圖。
具體實施方式
下面結合附圖,對實施例作詳細說明。
本發(fā)明主要提出一種基于帶寬保障的SFC請求模型以及相應的在數(shù)據(jù)中心網(wǎng)絡中的VNF放置方案,目的是節(jié)約網(wǎng)絡帶寬資源并且減少虛擬機開銷。數(shù)據(jù)中心租戶提出SFC的請求并且指定帶寬總量需求。我們保障租戶提出的帶寬需求并決定如何將其SFC請求部署到數(shù)據(jù)中心網(wǎng)絡中,即保障了租戶的性能,又節(jié)約了全局的帶寬。
如圖1所示,三個虛線框表示三個VNF(虛擬網(wǎng)絡功能),其中的方框1-9表示不同的VNF實例,不同的虛擬網(wǎng)絡功能需要的VNF實例個數(shù)不同。箭頭以及標注的數(shù)字表示不同的VNF需要負載的網(wǎng)絡流量。當租戶提出的一個SFC請求,800的流量首先經(jīng)過VNF1,然后分成兩支,500的流量經(jīng)過VNF2,300的流量經(jīng)過VNF3。用戶的請求包含SFC的連接情況,以及各個VNF之間的帶寬需求。我們首先估計每種類型的VNF實例可以承擔的最大的負載流量,然后算出所需要的VNF實例個數(shù),即得到了包含VNF實例的通信圖。我們需要將其部署到數(shù)據(jù)中心中去。由于數(shù)據(jù)中心的帶寬資源非常稀缺,尤其是上層帶寬資源存在著較高的超額認購比,因此我們在部署過程中需要盡量節(jié)約帶寬。在設計算法的時候,我們考慮將通信量大的VNF實例盡可能的放置在同一棵子樹中去,使得流量更加內聚,這樣就減少了跨子樹的流量,從而節(jié)約帶寬資源,尤其是上層網(wǎng)絡帶寬。我們的部署算法采用啟發(fā)式的思想,首先自底向上的搜索可能容納下整個SFC的子樹,一旦找到了可能的子樹,則對其進行自頂向下的遞歸的部署。即把VNF實例通信圖分割開來放置到該子樹的不同子樹中去。通過此遞歸的搜索,最終所有的VNF實例都會放置在物理機上,并且為每條鏈路預留合適的帶寬以保障通信需求。
具體步驟如下:
1.根據(jù)SFC和帶寬需求建立VNF實例通信圖。具體步驟如下:
步驟1.1:計算所需VNF實例的個數(shù)。
對于SFC請求中的每一個VNF,我們需要提供足夠的處理能力來完成其流量處理需求。我們假設每一個VNFi的實例具有的最大流量處理能力是Ubi(可以通過進行壓力測試來獲得),因此我們可以算出對于VNFi最少需要的VNF實例數(shù)量是:
Biin和Biout分別代表VNFi的總入帶寬需求和總出帶寬需求。
Ubi表示單個屬于VNFi的實例可以支持的最大流量負載。
Ni表示VNFi總共具有的實例個數(shù)。
步驟1.2:計算每個VNF實例的帶寬需求。
根據(jù)負載均衡原則,每一個實例所需要的帶寬是相等的,可以算出每一個實例的帶寬需求。
Biin和Biout分別代表VNFi的總入帶寬需求和總出帶寬需求。
步驟1.3:分析VNF實例放置的帶寬節(jié)約原理
VNF的放置過程實際上就是把各個VNF的實例遞歸的放置到數(shù)據(jù)中心的每個子樹中,直到所有的實例都被放置在物理機上。對于每一個分配了VNF實例的子樹而言,我們需要預留內部帶寬(保障子樹內部的實例的通信需求)和外部帶寬(保障子樹內外實例之間的通信需求)。
步驟1.3.1:計算上下級VNF之間的內部帶寬需求。
顯然的,每一個VNF實例都優(yōu)先將流量傳送給同一個子樹內部的下級VNF實例而不是跨子樹的實例。于是我們可以計算出內部帶寬需求:
步驟1.3.2:計算每個VNF的外部帶寬需求:
步驟1.3.3:計算跨子樹的總流量和子樹內部的總流量:
步驟1.3.4:將所有的屬于同數(shù)據(jù)中心拓撲層l的外部流量相加,我們得到下面的式子:
步驟1.3.5:從步驟1.3.4中我們可以知道是一個常量,因此得到推論:如果我們想最小化整體的鏈路帶寬損耗,對于每一個子樹來說我們應該最小化外部帶寬而最大化內部帶寬。
步驟1.4:根據(jù)SFC請求的連接情況和VNF實例的數(shù)目,建立VNF實例通信圖。
VNF實例通信圖由租戶請求的VNF(包括根據(jù)帶寬需求計算出來的實例個數(shù))以及各個VNF實例之間的帶寬需求組合而成。反應了租戶需要處理的流量的流向情況和流經(jīng)每個VNF的流量大小。
2.基于生成的VNF實例通信圖,本發(fā)明設計了對應的帶寬保障的VNF實例部署方案。我們假設數(shù)據(jù)中心拓撲為樹型結構,具體步驟如下:
步驟2.1:選定目標層中的一棵子樹作為目標子樹(初始從最底層開始)。
步驟2.2:計算子樹中的剩余虛擬機槽資源,如果VNF實例通信圖中的VNF實例個數(shù)超過了子樹剩余虛擬機槽個數(shù),則選擇該層的下一棵子樹,繼續(xù)步驟2.2,否則轉2.3。
步驟2.3:Alloc過程,本過程是一個自頂向下遞歸放置的過程,輸入的參數(shù)有VNF實例通信圖G,選定的VNF實例集合St,以及選定的子樹t。
步驟2.3.1:如果當前層數(shù)為最底層,則直接將SFC請求中的VNF實例部署到此子樹(即物理機)上。
步驟2.3.2:如果當前層數(shù)不是最底層,則對于t來說,將其所有的子樹按照可用資源的多少進行降序排列,可用資源包括虛擬機槽的數(shù)量和可用的出口帶寬。
步驟2.3.3:假設對于t的子樹v進行分配,首先賦值cnt為St中未使用的VNF實例數(shù)量和v中剩余的虛擬機槽數(shù)量的較小值。
步驟2.3.4:設置Sv為空集,選擇St中沒有使用過的具有最大聚合帶寬的VNF實例放入Sv中。
步驟2.3.5:若Sv中的VNF實例的個數(shù)小于等于cnt,且Cvin和Cvout都不超過子樹v的預留帶寬,則從St中選擇滿足步驟1.3.3中使得Ct最小而Tt最大的VNF實例放入Sv中。
步驟2.3.6:將G,Sv,v作為輸入?yún)?shù),繼續(xù)步驟2.3過程。
步驟2.3.7:若對子樹v的分配成功,則為子樹v預留出口鏈路的帶寬,標記Sv中的VNF實例為已使用。若St中還有為分配的且t還有子樹沒有考慮,進入t的下一棵子樹,并轉步驟2.3.3,否則轉2.3.8。
步驟2.3.8:如果在考慮了所有的子樹之后St中仍然有未分配的子樹,則去掉以前分配的資源。否則轉步驟2.3.9。
步驟2.3.9:返回分配的結果。
步驟2.4:如果分配成功,則返回成功并得到分配的結果值。否則進入步驟2.5。
步驟2.5:若該層中還有子樹沒有考慮過,則選擇該子樹的下一棵子樹作為目標子樹,進入步驟2.2;否則進入步驟2.6。
步驟2.6:若還沒有搜索根節(jié)點子樹,則上移一層進入2.1步驟,否則無法接受此請求,返回失敗。
我們進行了仿真實驗將本發(fā)明方案和現(xiàn)有的彈性部署方案對比,結果表明我們的發(fā)明方案能夠有效的節(jié)約更多的帶寬資源,并且接受更多的租戶請求。說明本發(fā)明達到了預期的目的,具有較好的效果。
本發(fā)明的SFC請求中的每個VNF提供保障的帶寬,并且通過估計每個VNF實例的最大處理流量來計算總共需要的VNF實例的個數(shù),然后建立每個VNF實例之間的通信模型圖。根據(jù)此模型,采用啟發(fā)式算法將VNF實例部署到數(shù)據(jù)中心中。部署算法采用本地化的方法,盡可能的減少跨子樹的流量并且增大內部傳輸?shù)牧髁?,以此來達到節(jié)省帶寬的目的。
此實施例僅為本發(fā)明較佳的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應該以權利要求的保護范圍為準。