石 峰,藺婧娜
(1.太原學(xué)院 計算機(jī)科學(xué)與技術(shù)系,山西 太原 030032;2.山西工程科技職業(yè)大學(xué) 信息工程學(xué)院,山西 太原 030031)
對于企業(yè)用戶而言,大規(guī)模網(wǎng)絡(luò)功能部署面臨以下幾方面的挑戰(zhàn):網(wǎng)絡(luò)功能數(shù)量繁多、網(wǎng)絡(luò)功能種類多樣、網(wǎng)絡(luò)功能處理邏輯復(fù)雜。網(wǎng)絡(luò)功能的日常運(yùn)維工作包括網(wǎng)絡(luò)功能升級、監(jiān)控診斷、配置調(diào)試等多種復(fù)雜操作[1-3]。
考慮到本地部署的高昂開銷以及復(fù)雜操作,越來越多的中小型企業(yè)將網(wǎng)絡(luò)功能外包到云平臺,在云服務(wù)提供商內(nèi)部署虛擬網(wǎng)絡(luò)功能服務(wù)。目前已經(jīng)有大量的云服務(wù)提供商為中小型企業(yè)提供豐富的網(wǎng)絡(luò)功能服務(wù),包括運(yùn)營商(例如:AT&T)以第三方云服務(wù)提供商(例如:Akamai,Amazon)等[4,5]。
NFV技術(shù)是云計算催生的下一代網(wǎng)絡(luò)變革。NFV技術(shù)可以有效地在云平臺進(jìn)行部署實現(xiàn),實現(xiàn)虛擬網(wǎng)絡(luò)功能的按需訂購、靈活調(diào)度以及便捷管理。目前已經(jīng)有大量的研究工作致力于實現(xiàn)基于NFV的云平臺網(wǎng)絡(luò)功能高效部署[6-8]。
網(wǎng)絡(luò)功能調(diào)度管理的基本要求是:按照服務(wù)功能鏈信息,實現(xiàn)網(wǎng)絡(luò)功能連接關(guān)系的靈活配置。然而,目前大部分的NFV系統(tǒng)[9,10]均在單一數(shù)據(jù)中心場景下進(jìn)行設(shè)計,以網(wǎng)絡(luò)功能為獨立單元,在通用數(shù)據(jù)平面上利用控制器的集中調(diào)度管理實現(xiàn)服務(wù)功能鏈部署。
為了實現(xiàn)數(shù)據(jù)中心靈活連接,用戶必須手動建立一個轉(zhuǎn)發(fā)表確保數(shù)據(jù)包在數(shù)據(jù)中心之間得到正確轉(zhuǎn)發(fā)。除此之外,如FlowTag[11]所分析,現(xiàn)實部署存在大量的網(wǎng)絡(luò)功能在完成數(shù)據(jù)處理之后輸出一些必要的標(biāo)簽,用于保證數(shù)據(jù)包在之后的正確轉(zhuǎn)發(fā)。
本文提出了一個跨數(shù)據(jù)中心的網(wǎng)絡(luò)功能連接管理機(jī)制——NFVMP(network function virtualization for multiple providers)。NFVMP將每一個數(shù)據(jù)中心的子鏈視作一個單元,在每個數(shù)據(jù)中心內(nèi)建立與其它數(shù)據(jù)中心的連接關(guān)系,支持跨數(shù)據(jù)中心服務(wù)功能鏈自動靈活部署,有效提高了網(wǎng)絡(luò)功能調(diào)度管理的靈活性。
NFVMP系統(tǒng)的基礎(chǔ)功能是保障正確性,確保數(shù)據(jù)包按照服務(wù)功能鏈以正確的轉(zhuǎn)發(fā)路徑被多個網(wǎng)絡(luò)功能處理。在本文中,對多數(shù)據(jù)中心場景下的數(shù)據(jù)流進(jìn)行理論建模,并且與傳統(tǒng)單一數(shù)據(jù)中心場景的數(shù)據(jù)流進(jìn)行對比分析,從而得出NFVMP系統(tǒng)的設(shè)計原則。
(1)
(2)
…
(3)
因此,獲得了如下等式
(4)
企業(yè)網(wǎng)用戶將網(wǎng)絡(luò)功能f1,f2,…,fn部署在p1,p2,…,pm數(shù)據(jù)中心。根據(jù)系統(tǒng)正確性,NFVMP必須與傳統(tǒng)NFV系統(tǒng)產(chǎn)生相同的數(shù)據(jù)包處理結(jié)果。因此,總結(jié)得出了以下的等式
(5)
其中,等式左邊代表了NFVMP的數(shù)據(jù)包結(jié)果,等式右邊代表傳統(tǒng)NFV系統(tǒng)生成的數(shù)據(jù)包結(jié)果。傳統(tǒng)的NFV系統(tǒng)將每個網(wǎng)絡(luò)功能視作獨立單元,并致力于解決網(wǎng)絡(luò)功能部署以及網(wǎng)絡(luò)功能連接問題。為了讓上述公式成立,NFVMP需要將每個數(shù)據(jù)中心的子鏈視作獨立單元,并且實現(xiàn)以下兩步操作:①每一個數(shù)據(jù)中心生成各自的子鏈,使得數(shù)據(jù)包在數(shù)據(jù)中心內(nèi)部能夠正確地進(jìn)行處理和轉(zhuǎn)發(fā);②實現(xiàn)子鏈之間的正確連接。
在本文節(jié),分別對子鏈生成、子鏈連接以及子鏈更新機(jī)制進(jìn)行具體介紹,其中第2.1節(jié)介紹了子鏈生成機(jī)制,第2.2節(jié)展示了子鏈連接機(jī)制,第2.3節(jié)展示了子鏈更新機(jī)制。
全局服務(wù)功能鏈被分解為兩個部分:數(shù)據(jù)中心A的服務(wù)功能子鏈以及數(shù)據(jù)中心B的服務(wù)功能子鏈。子鏈生成算法計算得到的子鏈需要滿足兩個要求:①表明數(shù)據(jù)中心內(nèi)部實現(xiàn)的網(wǎng)絡(luò)功能及其轉(zhuǎn)發(fā)關(guān)系;②表明與其它子鏈的連接關(guān)系。設(shè)計了一個子鏈生成算法,以全局服務(wù)功能鏈為輸入信息,計算生成所有相關(guān)數(shù)據(jù)中心的子鏈。除此之外,為了方便描述輸入以及輸出信息,設(shè)計了一個服務(wù)功能鏈描述語言,能夠兼容多數(shù)據(jù)中心場景。
2.1.1 服務(wù)功能鏈描述語言
在之前的工作中,E2[13]已經(jīng)設(shè)計了一個服務(wù)功能鏈描述語言,能夠有效描述所有網(wǎng)絡(luò)功能以及它們之間的連接關(guān)系。然而,出于以下兩點考慮,它并不能直接應(yīng)用在NFVMP系統(tǒng)中:①未說明數(shù)據(jù)中心相關(guān)信息;②未能表達(dá)與其它服務(wù)功能鏈之間的連接關(guān)系。
這里設(shè)計了一種新的服務(wù)功能鏈描述語言,能夠有效兼容多數(shù)據(jù)中心場景。下面展示了服務(wù)功能鏈描述語言的示例。
NF_set: NF1 {DC А}, NF2 {DC B},
NF3 {DC B}, NF4 {DC B};
rule-set { input->NF1,
NF1[cl]-> NF2,
NF2[c2]->NF3,
NF3[c3]->NF4,
NF2->NF4,
NF3->NF4,
NF4->output;]
服務(wù)功能鏈描述語言主要由兩個部分組成:NF_set以及rule_set。NF_set包含了所有的網(wǎng)絡(luò)功能以及它們對應(yīng)的數(shù)據(jù)中心信息。rule_set 描述了網(wǎng)絡(luò)功能之間或者與上流、下流數(shù)據(jù)中心之間的轉(zhuǎn)發(fā)關(guān)系。每一條rule都通過以下的格式進(jìn)行定義:src_node[condition]->dst_node。
與傳統(tǒng)描述語言相比,src_node/dst_node可能是上流或者下流數(shù)據(jù)中心,從而描述與其它數(shù)據(jù)中心之間的連接關(guān)系。例如:“dc A[c1]->NF2”表示從數(shù)據(jù)中心A發(fā)出并且攜帶cl標(biāo)簽的數(shù)據(jù)包發(fā)送到NF2進(jìn)行后續(xù)處理。如果condition為空,那么表示在默認(rèn)情況下并不需要對數(shù)據(jù)包進(jìn)行過濾處理。
2.1.2 子鏈生成算法
算法1展示了提出的子鏈生成算法。根據(jù)輸入的全局服務(wù)功能鏈,該算法為所有相關(guān)數(shù)據(jù)中心生成各自的子鏈。其中第(2)行~第(3)行用來生成所有數(shù)據(jù)中心的NF_sets。剩下的部分用于生成rule_sets。對于rule_set中的規(guī)則符合以下任何一個條件:①src_node以及dst_node隸屬于同一個數(shù)據(jù)中心;②src_node是input;③dst_node是output,則直接添加該規(guī)則到唯一存在的數(shù)據(jù)中心的子鏈中。如果src_node與dst_node不隸屬于同一個數(shù)據(jù)中心,那么將產(chǎn)生兩條規(guī)則并分配到兩個子鏈中。第一條規(guī)則加入到src_node的數(shù)據(jù)中心子鏈中,dst_node被dst_node的數(shù)據(jù)中心代替。第二條規(guī)則加入到dst_node的數(shù)據(jù)中心子鏈中,src_node被src_node的數(shù)據(jù)中心代替。
客戶端通過上述子鏈生成算法得到所有相關(guān)數(shù)據(jù)中心的子鏈,并將其通過特定的接口下發(fā)到各個數(shù)據(jù)中心進(jìn)行后續(xù)子鏈部署。
算法1:子鏈生成算法
輸入:全局服務(wù)功能鏈描述(NF_set and rule_set);
輸出:每個數(shù)據(jù)中心的子鏈描述(NF_set and rule_set);
初始化:每個數(shù)據(jù)中心子鏈:NF_set, rule_set?,?;
(1)functionChainPartition(NF_set, rule_set)
(2)forNF∈NF_ENF_setdo
(3) 添加NF到NF.dc的NF_set;
(4)forrule∈rule_setdo
(5) src_node, dst_node←rule.src_node, rule.dst node;
(6)ifsrc_node = input or src_node.dc= dst_node.dcthen
(7) 添加rule 到dst_node.dc的rule_set;
(8)elseifdstNode = outputthen
(9) 添加rule 到src_node.dc的rule_set;
(10)else
(11) 添加(src_node[rule.condition]→dst_node.dc)到
(12) src_node.dc 的rule_set;
(13) 添加(src_node.dc[rule.condition]→dst_node)到
(14) dst_node.dc 的 rule_set;
(15)return每個數(shù)據(jù)中心的NF_set and rule_set;
對于傳統(tǒng)的NFV系統(tǒng),網(wǎng)絡(luò)功能全部部署在通用數(shù)據(jù)平面上,控制器通過數(shù)據(jù)平面交換機(jī)配置網(wǎng)絡(luò)功能之間的連接關(guān)系。然而,在多數(shù)據(jù)中心場景下,獨立自治的數(shù)據(jù)中心使得通用數(shù)據(jù)平面以及集中控制器均無法實現(xiàn)。除此之外,現(xiàn)實部署中存在大量狀態(tài)相關(guān)的網(wǎng)絡(luò)功能,其輸出的狀態(tài)信息決定后續(xù)的數(shù)據(jù)包轉(zhuǎn)發(fā)路徑。這類網(wǎng)絡(luò)功能使得子鏈連接更加復(fù)雜。下面小節(jié),將對以上兩個挑戰(zhàn)進(jìn)行具體分析,并提出相應(yīng)的解決方案。
2.2.1 數(shù)據(jù)中心間轉(zhuǎn)發(fā)策略
由于缺乏集中控制器以及通用數(shù)據(jù)平面,無法采用集中式的方法實現(xiàn)子鏈連接。采取分布式的方法將此問題分解為兩個子問題:①上流數(shù)據(jù)中心將數(shù)據(jù)包轉(zhuǎn)發(fā)到正確的下流數(shù)據(jù)中心;②下流數(shù)據(jù)中心將數(shù)據(jù)包轉(zhuǎn)發(fā)到正確的網(wǎng)絡(luò)功能。下面,將分別對兩個子問題進(jìn)行具體說明。
當(dāng)上流數(shù)據(jù)中心內(nèi)的所有網(wǎng)絡(luò)功能完成數(shù)據(jù)包處理之后,數(shù)據(jù)中心需要將數(shù)據(jù)包轉(zhuǎn)發(fā)到下流數(shù)據(jù)中心進(jìn)行后續(xù)處理。因此,在出口處安裝轉(zhuǎn)發(fā)器來建立數(shù)據(jù)包標(biāo)簽與下流數(shù)據(jù)中心的轉(zhuǎn)發(fā)關(guān)系。數(shù)據(jù)包標(biāo)簽?zāi)軌蛭ㄒ淮_定下一個網(wǎng)絡(luò)功能,也就可以唯一確定下流數(shù)據(jù)中心。當(dāng)數(shù)據(jù)中心從網(wǎng)卡收到數(shù)據(jù)包時,在入口處安裝分類器,從而正確地將數(shù)據(jù)包轉(zhuǎn)發(fā)到下一個網(wǎng)絡(luò)功能。分類器建立了上流數(shù)據(jù)中心、數(shù)據(jù)標(biāo)簽與下一個網(wǎng)絡(luò)功能之間的綁定關(guān)系。上流數(shù)據(jù)中心與數(shù)據(jù)標(biāo)簽?zāi)軌蛭ㄒ坏貙ο乱粋€網(wǎng)絡(luò)功能進(jìn)行確認(rèn)。
算法2:分類表和轉(zhuǎn)發(fā)表生成算法
輸入:子鏈描述(NF_set and rule_set);
輸出:分類表和轉(zhuǎn)發(fā)表;
(1)functionTableGeneration(NF_set, rule_set)
(2)forrule∈rule_setdo
(3)ifrule.src_node ?NF_setthen
(4) 添加(rule.src_node, rule.condition, rule.dst_node)到分類表;
(5)elseifrule.dst_node?NF_setthen
(6) 添加規(guī)則(condition, rule.dst_node)到轉(zhuǎn)發(fā)表;
(7)else
(8) 跳過這條規(guī)則;
(9)return分類表和轉(zhuǎn)發(fā)表;
算法2展示了分類表和轉(zhuǎn)發(fā)表生成算法。該算法根據(jù)下發(fā)的子鏈信息,生成每個數(shù)據(jù)中心的分類表和轉(zhuǎn)發(fā)表。其中,第(3)行~第(4)行用于分類表的生成,第(5)行~第(6)行用于轉(zhuǎn)發(fā)表的生成。如果一條規(guī)則的src_node不屬于本地數(shù)據(jù)中心并且dst_node屬于本地數(shù)據(jù)中心,那么一條分類表的表項生成。上流數(shù)據(jù)中心由src_node的地址表示,標(biāo)簽通過規(guī)則的condition信息生成,網(wǎng)絡(luò)功能由dst_node生成。同理,如果一條規(guī)則的dst_node不屬于本地數(shù)據(jù)中心并且src_node屬于本地數(shù)據(jù)中心,則生成一條轉(zhuǎn)發(fā)表的表項。其中,標(biāo)簽由規(guī)則的condition生成,下流數(shù)據(jù)中心由dst_node生成。
2.2.2 數(shù)據(jù)包標(biāo)簽處理策略
如FlowTag所述,現(xiàn)實部署中存在大量的網(wǎng)絡(luò)功能在對數(shù)據(jù)包處理之后生成一些標(biāo)簽信息,用于指導(dǎo)數(shù)據(jù)包的后續(xù)轉(zhuǎn)發(fā)路徑。對于NFVMP,生成的數(shù)據(jù)包標(biāo)簽可能會影響到數(shù)據(jù)包在其它數(shù)據(jù)中心內(nèi)的轉(zhuǎn)發(fā)路徑。本文基于FlowTags設(shè)計了數(shù)據(jù)包標(biāo)簽處理策略,從而支持多數(shù)據(jù)中心場景。
數(shù)據(jù)包標(biāo)簽需要考慮以下3個方面的問題:①網(wǎng)絡(luò)功能生成狀態(tài)標(biāo)簽;②網(wǎng)絡(luò)標(biāo)簽對網(wǎng)絡(luò)功能數(shù)據(jù)處理的影響;③網(wǎng)絡(luò)標(biāo)簽對轉(zhuǎn)發(fā)策略的影響。對于第一個方面,NFVMP采用了FlowTags類似的策略進(jìn)行標(biāo)簽存儲。對于IPv6協(xié)議,利用20比特的flow label字段來存儲;對于IPv4協(xié)議,利用8比特的TOS字段進(jìn)行存儲。對于第二個方面,生成的網(wǎng)絡(luò)功能可能對下流網(wǎng)絡(luò)功能的數(shù)據(jù)處理產(chǎn)生影響。因為,在整個數(shù)據(jù)處理的流水線中,生成的數(shù)據(jù)包標(biāo)簽始終保存并且不會刪除。對于第三個方面,數(shù)據(jù)包的標(biāo)簽信息可能對數(shù)據(jù)中心之間的轉(zhuǎn)發(fā)產(chǎn)生影響。在NFVMP設(shè)計中,在分類器和轉(zhuǎn)發(fā)器中包含標(biāo)簽信息,從而支持?jǐn)?shù)據(jù)中心之間根據(jù)狀態(tài)信息進(jìn)行轉(zhuǎn)發(fā)。
上述子鏈生成與子鏈連接策略均基于靜態(tài)不變的服務(wù)功能鏈進(jìn)行實現(xiàn)。然而,在現(xiàn)實部署中,服務(wù)功能鏈會隨著時間動態(tài)變化,從而滿足用戶的不同時刻需求。NFV系統(tǒng)設(shè)計需要支持靈活變化的服務(wù)功能鏈,包括動態(tài)增加或者刪減的網(wǎng)絡(luò)功能或者轉(zhuǎn)發(fā)關(guān)系變化。
一種簡單直白的解決方案是按照更新的服務(wù)功能鏈,將所有網(wǎng)絡(luò)功能重新在底層進(jìn)行部署,重復(fù)之前的子鏈部署與子鏈連接過程。然而,這種方式導(dǎo)致大量的時間消耗與資源浪費。在本文,設(shè)計了一種增量策略更新方法,計算每個數(shù)據(jù)中心需要變更的策略,包括刪除的規(guī)則以及增加的規(guī)則等??蛻舳烁鶕?jù)新舊服務(wù)功能鏈分析計算子鏈更新內(nèi)容并進(jìn)行下發(fā),數(shù)據(jù)中心則對接收到的更新策略進(jìn)行實際部署。下面部分,將從這兩方面進(jìn)行具體分析。
2.3.1 子鏈更新策略分析
客戶端負(fù)責(zé)分析所有子鏈的更新策略,也即網(wǎng)絡(luò)功能集變更NF_set(包括added_NF_set和expired_NF_set),以及規(guī)則集變更rule_set(包括added_rule_set和expired_rule_set)。算法3展示了子鏈更新算法,輸入是兩個服務(wù)功能鏈(原服務(wù)功能鏈與新服務(wù)功能鏈)的子鏈更新策略算法,輸出是所有相關(guān)數(shù)據(jù)中心的增量更新策略。其中第(2)行~第(5)行根據(jù)算法1生成兩個服務(wù)功能鏈的子鏈。第(7)行~第(11)行通過GetExpiredAddedSet函數(shù)生成所有數(shù)據(jù)中心的子鏈更新信息。其中GetExpiredAddedSet函數(shù)的功能是通過old_set與new_set的對比,生成expired_set與added_set。GetExpiredAddedSet通過如下的方法進(jìn)行計算(見算法3的A1至A18行):首先,old_set與new_set分別按照字典序進(jìn)行排序,然而對其中的每一條規(guī)則同步進(jìn)行瀏覽。如果old_rule與new_rule相同,那么做跳過處理,將兩條規(guī)則都在集合中刪除。如果old_rule小于new_rule,那么將old_rule添加到expired_set中。否則,將new_rule添加到added_set中。
2.3.2 子鏈更新策略部署
上述算法生成了所有數(shù)據(jù)中心的子鏈更新策略,包括add_NF_set、expired_NF_set、add_rule_set以及expired_rule_set。每個數(shù)據(jù)中心基于接收到的子鏈更新策略進(jìn)行增量部署,包括以下幾方面:①添加或者移除網(wǎng)絡(luò)功能;②修改網(wǎng)絡(luò)功能之間的轉(zhuǎn)發(fā)關(guān)系;③修改與其它數(shù)據(jù)中心之間的轉(zhuǎn)發(fā)關(guān)系。如果src_node與dst_node全部是網(wǎng)絡(luò)功能類型,那么做第一類或者第二類重新配置,在每個數(shù)據(jù)中心內(nèi)進(jìn)行完成配置。如果src_node屬于input、output或者dc類信息,那么需要進(jìn)行第三類更新配置,對分類表和轉(zhuǎn)發(fā)表進(jìn)行修改,改變與鄰居數(shù)據(jù)中心之間的數(shù)據(jù)包轉(zhuǎn)發(fā)關(guān)系。
算法3:子鏈更新算法
輸入:舊服務(wù)功能鏈描述(old_NF_set and old_rule_set);
新服務(wù)功能鏈描述(new_NF_set and new_rule_set);
輸出:每個數(shù)據(jù)中心的增量更新子鏈
(expired_NF_set, expired_rule_set, added_NF_set, added_rule_set);
初始化:每個數(shù)據(jù)中心的增量子鏈:
expired_NF_set, expired rule_set, added_NF_set, added_rule_set←?, ?, ?, ?;
(1)functionChainUpdate(old_NF_set,old_rule_set,new_NF_set, new_rule_set)
(2) ChainPartition(old_NF_set, old_rule_set)
獲得dc_set_old以及子鏈;
(3) ChainPartition(new_NF_set, new_rule_set)
獲得dc_set_new以及子鏈;
(4) dc_set←(dc_set_old)∪(dc_ set_ new);
(5)fordc∈dc_ setdo
(6) dc.expired_NF_set, dc.added_NF_set ←
(7) Comparison(dc.old_NF_set, dc.new_NF_set);
(8) dc.expired_rule_set, dc.added_rule_ set)←
(9) Comparison(dc.old_rule_set, dc.new_rule_set);
(10)return每個數(shù)據(jù)中心:expired_NF_set, added_ NF_ set,
(11) expired_rule_set, added_rule_set;
A1:functionComparison(old_set, new_set)
A2: expired_set, added_set←?, ?
A3: old_sorted_queue = SortInLexicographicOrder(old_set);
A4: new_sorted_queue = SortInLexicographicOrder(new_set);
A5:while(old_sorted_queue != ?)and
(new_sorted_queue!= ?)do
A6: old, new←old_sorted_queue.first,
new_sorted_queue.first
A7:ifold == newthen
A8: 從old_sorted_queue 移除old;
A9: 從new_sorted_queue 移除new;
A10:elseifold < newthen
A11: 添加old 到expired_set;
A12: 從old_sorted_queue 移除old;
A13:else
A14: 添加new到added_set;
A15: 從new_sorted_queue移除new;
A16: 將old_sorted_queue的所以規(guī)則添加到expired_set;
A17: 將new_sorted_queue 的所以規(guī)則添加到added_set;
A18:returnexpired_set, added_set;
在DPDK[16]以及OpenNetVM[14]的基礎(chǔ)上,對NFVMP進(jìn)行了原型系統(tǒng)實現(xiàn)。在一系列的服務(wù)器上進(jìn)行了開發(fā)部署,以下是每個服務(wù)器的硬件信息:兩塊Intel(R)Xeon(R)E5-2620v3 CPU(2.40 GHz,12核),64 G RAM以及兩個10 G網(wǎng)卡。這些服務(wù)器都運(yùn)行在Linux操作系統(tǒng),其內(nèi)核版本為3.10.0。
在實現(xiàn)的原型系統(tǒng)中,每一個服務(wù)器作為一個單獨的數(shù)據(jù)中心,與其它的數(shù)據(jù)中心進(jìn)行直連。在每一個數(shù)據(jù)中心內(nèi),基于OpenNetVM運(yùn)行一個單獨的NFV系統(tǒng)。在每個NFV系統(tǒng)內(nèi),采用Docker[14]技術(shù)進(jìn)行網(wǎng)絡(luò)功能實現(xiàn),從而保證每一個網(wǎng)絡(luò)功能在單獨的核內(nèi)運(yùn)行。除此之外,將分類器和轉(zhuǎn)發(fā)器也在Docker內(nèi)運(yùn)行,分別占用一個物理核。Docker方式能夠保障物理核不會被操作系統(tǒng)等其它任務(wù)所占用。
針對原型系統(tǒng)性能測試,基于MoonGen[15]進(jìn)行流量生成。MoonGen是一個基于DPDK的流量生成器,在單獨的服務(wù)器上運(yùn)行并且與其它服務(wù)器進(jìn)行直連。流量生成器發(fā)送與接收生成的數(shù)據(jù)包,從而對系統(tǒng)的性能包括時延和吞吐量進(jìn)行測量。
為了驗證NFVMP原型系統(tǒng)的性能,對以下4個網(wǎng)絡(luò)功能進(jìn)行了實現(xiàn):虛擬專用網(wǎng)絡(luò)、深度包檢測、網(wǎng)絡(luò)緩存以及網(wǎng)絡(luò)監(jiān)控。上述網(wǎng)絡(luò)功能采用圖1的方式進(jìn)行部署與連接。其中數(shù)據(jù)中心A負(fù)責(zé)前兩個網(wǎng)絡(luò)功能,數(shù)據(jù)中心B負(fù)責(zé)后面兩個網(wǎng)絡(luò)功能。從數(shù)據(jù)中心A流出的數(shù)據(jù)包如果目的端口是80,那么發(fā)送到網(wǎng)絡(luò)緩存,否則發(fā)送到網(wǎng)絡(luò)監(jiān)控進(jìn)行后續(xù)處理。
圖1 NFVMP原型系統(tǒng)部署的服務(wù)功能鏈
將NFVMP系統(tǒng)與OpenNetVM進(jìn)行對比。對于OpenNetVM系統(tǒng)而言,所有的網(wǎng)絡(luò)功能在一個數(shù)據(jù)中心內(nèi)運(yùn)行,可以作為最佳模式。通過對比,可以得知NFVMP系統(tǒng)與最佳模式之間的差距。
在本文中,從以下幾個方面對NFVMP系統(tǒng)進(jìn)行了性能評價:
驗證了NFVMP可以跨數(shù)據(jù)中心實現(xiàn)數(shù)據(jù)包的正確轉(zhuǎn)發(fā),與傳統(tǒng)的NFV系統(tǒng)產(chǎn)生相同的數(shù)據(jù)包處理結(jié)果。
評估NFVMP加入的3種算法運(yùn)行時間開銷,包括子鏈生成算法、分類表和轉(zhuǎn)發(fā)表生成算法和子鏈更新算法。
評估NFVMP在數(shù)據(jù)層的性能開銷,包括變化的數(shù)據(jù)包大小、網(wǎng)絡(luò)功能數(shù)量以及數(shù)據(jù)中心數(shù)量對性能結(jié)果的影響。
驗證NFVMP系統(tǒng)在數(shù)據(jù)中心真實流量條件下的系統(tǒng)性能,包括數(shù)據(jù)包處理時延和吞吐量。
生成一系列的數(shù)據(jù)包,并且在數(shù)據(jù)包負(fù)載中標(biāo)記序列數(shù)字。將生成的流量分別發(fā)送到NFVMP以及OpenNetVM系統(tǒng)中,并且將最終的數(shù)據(jù)包結(jié)果進(jìn)行對比分析。最終結(jié)果表明,NFVMP與OpenNetVM系統(tǒng)能夠得到相同的數(shù)據(jù)包結(jié)果,符合正確性準(zhǔn)則,有效地提高了網(wǎng)絡(luò)功能跨數(shù)據(jù)中心調(diào)度的靈活性。
在本節(jié),對3種算法運(yùn)行時間進(jìn)行了評估,包括子鏈生成算法、分類和轉(zhuǎn)發(fā)表生成算法以及子鏈更新算法。
圖2展示了上述3種算法的運(yùn)行時間與連接數(shù)之間的對應(yīng)關(guān)系。兩種算法的運(yùn)行時間均在毫秒數(shù)量級。例如:對于一個1000條連接數(shù)的服務(wù)功能鏈,子鏈生成算法消耗1.69 ms進(jìn)行服務(wù)功能鏈分解,分類表和轉(zhuǎn)發(fā)表生成算法花費1.21 ms進(jìn)行表生成,子鏈更新算法則花費6.45 ms來生成所有子鏈的增量更新策略。除此之外,網(wǎng)絡(luò)連接數(shù)與運(yùn)行時間呈現(xiàn)線性增加的趨勢。上述時間開銷均發(fā)生在系統(tǒng)運(yùn)行之前。對于NFV系統(tǒng)若干分鐘啟動時間而言,毫秒級別的時間是微不足道并且可以忽略不計的。
圖2 控制層算法性能
相比于傳統(tǒng)的NFV架構(gòu),NFVMP系統(tǒng)在數(shù)據(jù)層帶來調(diào)度管理靈活性優(yōu)勢,使得服務(wù)功能鏈跨數(shù)據(jù)中心靈活部署。但是,NFVMP方案也給數(shù)據(jù)層性能帶來了一定的負(fù)載,并主要體現(xiàn)在以下兩方面:①數(shù)據(jù)中心間的數(shù)據(jù)包轉(zhuǎn)發(fā);②數(shù)據(jù)中心內(nèi)的表查詢。第一點的主要決定因素在于數(shù)據(jù)中心間的網(wǎng)絡(luò)通信資源,與NFVMP機(jī)制的設(shè)計無關(guān),必須通過改良網(wǎng)間通信資源來提升性能。第二點的主要決定因素則是NFVMP設(shè)計帶來的分類器和轉(zhuǎn)發(fā)器。因此,在本文節(jié),對表查詢造成的性能負(fù)載進(jìn)行測量,并與最佳模式進(jìn)行性能對比分析。
4.3.1 數(shù)據(jù)包大小的性能影響
使用64字節(jié)到1500字節(jié)的數(shù)據(jù)包來測試數(shù)據(jù)包大小對系統(tǒng)性能的影響,包括數(shù)據(jù)包處理時延和吞吐量。圖3的實驗結(jié)果表明:對于任意數(shù)據(jù)包大小,NFVMP均只引入極小的時延大約1.8μs。圖4表明了數(shù)據(jù)包大小與吞吐量之間的對應(yīng)關(guān)系。隨著數(shù)據(jù)包大小的增加,NFVMP引入的網(wǎng)絡(luò)擁塞被緩解,與最佳模式的性能越來越接近。對于最差的結(jié)果(對應(yīng)于64字節(jié)),吞吐量下降比例是2.24%。如果數(shù)據(jù)包大小超過512字節(jié),NFVMP與最佳模式的性能幾乎相同。
圖3 數(shù)據(jù)包大小對時延的影響
圖4 數(shù)據(jù)包大小對吞吐量的影響
4.3.2 網(wǎng)絡(luò)功能數(shù)量的性能影響
在此實驗中,采用了2個~6個相同的網(wǎng)絡(luò)功能,分布在兩個數(shù)據(jù)中心內(nèi)進(jìn)行部署。所有的網(wǎng)絡(luò)功能全部都是網(wǎng)絡(luò)緩存,并且數(shù)據(jù)包大小全部采用256字節(jié)。如果網(wǎng)絡(luò)功能的總數(shù)是偶數(shù),兩個數(shù)據(jù)中心進(jìn)行均勻分布,如果是奇數(shù),那么數(shù)據(jù)中心A比數(shù)據(jù)中心B多部署一個網(wǎng)絡(luò)功能。圖5和圖6分別展示了網(wǎng)絡(luò)功能數(shù)量與時延、吞吐量之間的對應(yīng)關(guān)系。在時延方面,對于所有的功能數(shù)量,NFVMP的時延開銷均為1.8μs。在網(wǎng)絡(luò)功能數(shù)量為4時,吞吐量下降率為3.51%。隨著網(wǎng)絡(luò)功能數(shù)量的增加,NFVMP與最佳模式的性能越來越接近。網(wǎng)絡(luò)功能數(shù)量越多,系統(tǒng)性能瓶頸在于多個網(wǎng)絡(luò)功能的數(shù)據(jù)處理,而不是分類器和轉(zhuǎn)發(fā)器造成的數(shù)據(jù)查詢工作。
圖5 網(wǎng)絡(luò)功能數(shù)量對時延的影響
圖6 網(wǎng)絡(luò)功能數(shù)量對吞吐量的影響
在此實驗中,驗證了NFVMP向多個數(shù)據(jù)中心擴(kuò)展的能力,并測試了數(shù)據(jù)中心數(shù)量變化帶來的性能開銷。采用圖1的服務(wù)功能鏈,以及256字節(jié)的數(shù)據(jù)包進(jìn)行實驗測量。對于4個網(wǎng)絡(luò)功能的服務(wù)功能鏈,最小的數(shù)據(jù)中心數(shù)量是1,最大的數(shù)據(jù)中心數(shù)量是4。圖7和圖8展示了網(wǎng)絡(luò)功能數(shù)量與時延、吞吐量之間的關(guān)系。每增加一個數(shù)據(jù)中心,系統(tǒng)時延增加1.8μs,吞吐量下降0.82%~26%。對于NFV系統(tǒng)而言,為了更好地滿足用戶需求提高網(wǎng)絡(luò)功能調(diào)度靈活性,這些微小的性能負(fù)載是可以忽略不計的。
圖7 數(shù)據(jù)中心數(shù)量對時延的影響
圖8 數(shù)據(jù)中心數(shù)量對吞吐量的影響
4.3.3 真實網(wǎng)絡(luò)流量測試
在本文節(jié),在數(shù)據(jù)中心的真實網(wǎng)絡(luò)流量上進(jìn)行了性能測試以及性能比較。根據(jù)數(shù)據(jù)中心測量工作中分析的數(shù)據(jù)包大小分布情況,生成大量符合真實數(shù)據(jù)包大小分布的流量進(jìn)行測試。與最佳模式系統(tǒng)相比,NFVMP僅僅引入了1.8μs的網(wǎng)絡(luò)時延,對于真實系統(tǒng)部署是可以忽略不計的。兩個系統(tǒng)的吞吐量幾乎相同,并沒有帶來明顯性能下降。
綜上所述,對NFVMP系統(tǒng)從幾個方面進(jìn)行了驗證工作:
正確性:NFVMP實現(xiàn)了數(shù)據(jù)包在多個數(shù)據(jù)中心之間的正確路徑轉(zhuǎn)發(fā),有效地提高了網(wǎng)絡(luò)功能調(diào)度靈活性;
系統(tǒng)性能:與最佳模式相比,NFVMP在控制層以及數(shù)據(jù)層引入的性能負(fù)載極小,幾乎可以忽略不計。
本文設(shè)計了一個跨數(shù)據(jù)中心的網(wǎng)絡(luò)功能連接管理機(jī)制——NFVMP。通過理論分析,得出NFVMP的設(shè)計原則是將每個數(shù)據(jù)中心的子鏈視為一個獨立單元,并且實現(xiàn)子鏈生成、子鏈連接與子鏈更新。對于子鏈生成,NFVMP設(shè)計了一個子鏈生成算法用來計算所有相關(guān)數(shù)據(jù)中心的子鏈。對于子鏈連接,考慮到?jīng)]有集中控制器以及通用數(shù)據(jù)平面實現(xiàn)網(wǎng)絡(luò)功能連接,采用了分布式方法進(jìn)行網(wǎng)絡(luò)功能靈活連接。每個數(shù)據(jù)中心通過分類器和轉(zhuǎn)發(fā)器建立與上流、下流數(shù)據(jù)中心之間的連接關(guān)系。除此之外,設(shè)計了一個增量式的策略更新算法來動態(tài)地對子鏈進(jìn)行更新?;贠penNetVM系統(tǒng)對NFVMP進(jìn)行原型系統(tǒng)實現(xiàn)。實驗結(jié)果表明,NFVMP在多數(shù)據(jù)中心場景下能夠?qū)崿F(xiàn)網(wǎng)絡(luò)功能靈活連接,其帶來的性能開銷非常微小,幾乎可以忽略不計。