鄧澤平,曾旺,劉暢
(懷化學(xué)院,湖南 懷化 418000)
對比云計算領(lǐng)域的數(shù)據(jù)中心(Data Center,DC) ,邊緣計算網(wǎng)絡(luò)更靠近底層用戶,因而能通過提供低延遲的服務(wù)來滿足工農(nóng)業(yè)物聯(lián)網(wǎng)實時控制的需求。不同層次的邊緣計算(如移動邊緣計算和微云)通常用于協(xié)助處理高帶寬或低延遲的任務(wù),并將高性能計算卸載到云,從而形成從設(shè)備、邊緣網(wǎng)絡(luò)到數(shù)據(jù)中心的多級服務(wù)模型[1]。當下,網(wǎng)絡(luò)功能虛擬化(Network Function Virtualization,NFV) 框架下的服務(wù)鏈(Service Function Chain,SFC) 作為一種高效靈活的網(wǎng)絡(luò)流處理模型受到了工業(yè)界廣泛的關(guān)注和研究。基于地理隔離的多DC 網(wǎng)絡(luò),學(xué)界提出了許多針對不同約束條件和優(yōu)化目標SFC 部署模型與算法[2],但較少討論在邊緣網(wǎng)絡(luò)的實現(xiàn)。不同于現(xiàn)代DC廣泛采用的Clos網(wǎng)絡(luò)架構(gòu),邊緣網(wǎng)絡(luò)具有故障率高、延遲敏感和用戶流量難以預(yù)測等特點[3]。軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN) 通過分離控制層和數(shù)據(jù)層為網(wǎng)絡(luò)的實時精細化管理提供了技術(shù)支持。筆者擬針對邊緣環(huán)境,研究如何將SDN 關(guān)鍵技術(shù)嵌入NFV 框架內(nèi),從而實現(xiàn)統(tǒng)一和可靠的服務(wù)鏈部署。
系統(tǒng)參考ETSI 架構(gòu)[4]自上而下分為服務(wù)管理層、操作層和基礎(chǔ)設(shè)施層(如圖1) 。管理層根據(jù)一定策略發(fā)出SFC請求,操作層進行解析并實現(xiàn)。其中節(jié)點監(jiān)控模塊部署各VNF,網(wǎng)絡(luò)管理模塊隨后完成流量引導(dǎo)。SFC 代理模塊(SFC Agent) 作為安裝在每個邊緣物理主機內(nèi)的代理服務(wù),管理和監(jiān)控本地虛擬計算和網(wǎng)絡(luò)資源,并通過定義遠程過程調(diào)用(Remote Process Call,RPC) 協(xié)議對上層提供統(tǒng)一的基礎(chǔ)設(shè)施管理操作。控制器分布于各邊緣設(shè)備之中,連同其中的專有應(yīng)用和北向接口共同輔助SFC 網(wǎng)絡(luò)的構(gòu)建。需要強調(diào)的是,圖1中所示路徑均同時包含南向控制和北向監(jiān)測信息,如SFC Agent向上返回的服務(wù)器內(nèi)部信息。除SFC Agent 綁定本地接口外,其余模塊都采用松耦合的遠程調(diào)用與控制,使得整個系統(tǒng)能支持不同類型的網(wǎng)絡(luò)接入,亦有利于水平方向的擴展。

圖1 系統(tǒng)架構(gòu)
為了平衡成本和復(fù)雜度,系統(tǒng)網(wǎng)絡(luò)(如圖2) 被劃分為管理網(wǎng)絡(luò)、私有網(wǎng)絡(luò)和公共網(wǎng)絡(luò)。管理網(wǎng)絡(luò)承載了所有的控制流,如RPC 和OpenFlow 信道等。由于控制模塊之間均為松耦合,且對時延和帶寬不太敏感,所以管理網(wǎng)絡(luò)只要求三層可達。

圖2 網(wǎng)絡(luò)架構(gòu)
私有網(wǎng)絡(luò)和公共網(wǎng)絡(luò)均承載了業(yè)務(wù)流量,并與管理網(wǎng)互不交叉,故而保證了系統(tǒng)控制和流量波動互不影響。地理位置靠近且易搭建物理信道的邊緣服務(wù)器之間依靠私有網(wǎng)絡(luò)進行通信。私有網(wǎng)絡(luò)是一個用若干交換機組成的二層交換網(wǎng),并獨立地分布在不同位置,保證了其內(nèi)部高速低延遲的通信。公共網(wǎng)絡(luò)是一個三層路由網(wǎng),是所有邊緣節(jié)點相互通信最后保障。
服務(wù)鏈整合了不同服務(wù)器的資源,但也導(dǎo)致其業(yè)務(wù)流量和風險的集中,因此必須對不同業(yè)務(wù)流量進行隔離。在物理服務(wù)器內(nèi)部,所有VNF 端口均以access模式連接于虛擬網(wǎng)橋br-int,并被分配了不同的VID(Virtual Local Area Network Identifier) 。進入私有網(wǎng)絡(luò)的幀被虛擬網(wǎng)橋br-eth1重新分配了VID,而公共網(wǎng)絡(luò)的數(shù)據(jù)包因?qū)儆诓煌琕XLAN(Virtual Extensible Local Area Network) 隧道而相互隔離。在SFC的部署階段,網(wǎng)絡(luò)模塊統(tǒng)一為所有VNF 構(gòu)建了虛擬網(wǎng)絡(luò)并分配了獨立ID,以保證系統(tǒng)的穩(wěn)定性。
1) 服務(wù)器內(nèi)部通信。如圖2 所示,VNF_01 的幀從指定虛擬端口進入br-int 后會被加上“VID=11”標記,再受網(wǎng)絡(luò)模塊預(yù)設(shè)流表項(flow entry) 指示替換成標記“VID=21”,最后發(fā)送到VNF_02指定的端口。
2) 跨私有網(wǎng)絡(luò)的通信。主機1 內(nèi)的br-int 根據(jù)VID 和目的MAC 地址將來自VNF_01 的幀經(jīng)由trunk模式下的patch port 轉(zhuǎn)發(fā)至br-eth1。br-eth1將其VID從10 替換為100,目的MAC 替換成主機2 的br-eth1相應(yīng)端口地址,并從物理網(wǎng)卡eth1 發(fā)送至私有網(wǎng)絡(luò)。主機2 上br-eth1 網(wǎng)橋被設(shè)置為允許接收VID 為100的幀,并根據(jù)自身流表替換VID 和MAC 并送入brint,并經(jīng)由指定端口進入VNF_03。
3) 跨公共網(wǎng)絡(luò)的通信。當兩個不同服務(wù)器內(nèi)的VNF間無私有交換網(wǎng)絡(luò)相互可達時,系統(tǒng)會為其在公共網(wǎng)絡(luò)中構(gòu)建獨立的VXLAN隧道用于流量傳輸。如圖2,來自VNF_02 的幀在進入br-tun 后,會根據(jù)目的MAC 分配到相應(yīng)的隧道(VNI=100) ,并封裝成UDP 數(shù)據(jù)包發(fā)送到HOST2上的隧道對端,待解封成幀后發(fā)送到VNF_04對應(yīng)端口。
當系統(tǒng)被部署到若干服務(wù)器并啟動時,管理機會嘗試連接各控制器和SFC Agent來獲取相關(guān)信息。例如,SFC Agent需要返回服務(wù)器的CPU、內(nèi)存、虛擬化支持狀況以及公共網(wǎng)絡(luò)拓撲、帶寬和延遲測試結(jié)果等。同時,管理機會嘗試進行一些基礎(chǔ)組件安裝、虛擬網(wǎng)絡(luò)骨架的構(gòu)建和鏡像遷移等準備工作,并反復(fù)驗證直至全部通過,隨后正式進入SFC部署流程(如圖3) 。

圖3 SFC部署流程
用戶SFC 請求采用YAML 格式,管理層會對其進行合法性檢查并在部署過程中根據(jù)環(huán)境和策略不斷添加對用戶透明的相關(guān)內(nèi)部信息(如VNF 位置、鏈接配置等)。例如圖4展示了一條由兩個位于不同服務(wù)器的節(jié)點構(gòu)成的SFC。vnfs和links分別代表該SFC的節(jié)點和鏈路信息,in_aps和out_aps分別代表起始和終止位置。顯然,由于使用了接口和流表來區(qū)分進出VNF的流,系統(tǒng)天然支持SFC有向圖的部署。

圖4 SFC配置示例
系統(tǒng)完成SFC 部署和路由調(diào)整均需實時獲取各物理節(jié)點和鏈路狀態(tài),這主要依賴于控制器和SFC Agent 模塊。控制器采用Ryu[5]作為框架,通過Open-Flow 信道的packet_in 和packet_out 實現(xiàn)鏈路發(fā)現(xiàn),并給所有交換機注入自學(xué)習(xí)轉(zhuǎn)發(fā)的流表項。監(jiān)控模塊是Ryu中的一個協(xié)程,并在控制器啟動后獨立地監(jiān)控鏈路信息、保存到本地字典和提供查詢接口(如圖5) 。SFC Agent 是一個開機自啟的systemd 服務(wù),其調(diào)用Docker、libvirt、OVS、Bash 和系統(tǒng)調(diào)用等接口,在此基礎(chǔ)上定義和封裝了計算和網(wǎng)絡(luò)資源的遠程管理函數(shù)。
邊緣的異構(gòu)性對服務(wù)鏈部署的影響有:(1) 對服務(wù)延遲非常敏感,進一步要求快速收斂的線上策略;(2) 用戶需求和網(wǎng)絡(luò)拓撲不穩(wěn)定,流量規(guī)模和方向較難預(yù)測;(3) 流量規(guī)模和算力需求遠小于DC,對計算資源的消耗幾乎與包速成正比[6]。本文考慮一個由分布在一個地理區(qū)域的若干主機節(jié)點構(gòu)成的獨立邊緣網(wǎng)絡(luò),節(jié)點間的鏈路延遲差異較大。限于某些特定的物理條件或安全策略,不相鄰主機間通信依賴中間節(jié)點的中轉(zhuǎn)。每條到來的SFC請求會規(guī)定最大服務(wù)時延、長度(VNF數(shù)量)、起始和終止物理節(jié)點。每個VNF會消耗一定量的CPU 資源,但在服務(wù)部署前未知。在SFC請求不可預(yù)測的情況下,我們希望在滿足時延約束的同時盡量為后續(xù)SFC請求保留CPU資源,以提高系統(tǒng)容量。
本文利用SDN 架構(gòu)實現(xiàn)了對鏈路狀況的全局實時監(jiān)測,并能細粒度地調(diào)整VNF間流量路徑。根據(jù)前述網(wǎng)絡(luò)架構(gòu),每個物理節(jié)點單獨分配核心用于包轉(zhuǎn)發(fā),與VNF的資源消耗無關(guān)。對于一條路徑上的每個節(jié)點,可以在滿足資源約束下部署任意數(shù)量的VNF。多個VNF位于一個主機時,其內(nèi)部數(shù)據(jù)交換延遲相比于SFC時延約束可以忽略不計。當不映射VNF時,該物理節(jié)點僅轉(zhuǎn)發(fā)流量,因而更具靈活性。
整個線上服務(wù)鏈部署過程如下:
1) 估算SFC 請求的CPU 消耗。假設(shè)各VNF 對CPU消耗相同,且與入口包速成正比。我們實際測算每臺主機的包速-CPU 線性關(guān)系,再根據(jù)入口位置歷史流量分布預(yù)測此次SFC請求的包速。
2) 路徑選擇。為了簡化問題以降低響應(yīng)時間,只搜索從起點到終點的簡單路徑。定義某路徑的CPU余量如下:
路徑中包含s個主機,ACi為從SFC代理模塊獲取的第i個主機的實時剩余CPU余量即為在第i個主機上可映射的VNF數(shù)量。當ACi其小于C時,對應(yīng)的求和項為0,即不映射VNF。借助控制器監(jiān)測模塊搜索出所有滿足時延約束的簡單路徑,并選擇其中具有最大CPU 余量的路徑作為部署路徑。若找不到時延滿足的路徑,或CPU余量均為0,則拒絕部署。
3) 確定VNF 映射。VNF 與主機間關(guān)系為N-1,N可取從0開始的任意整數(shù)。因此,在確定物理節(jié)點后,VNF 映射轉(zhuǎn)化為裝箱問題。為了給未來的SFC 請求盡量保留CPU資源,本系統(tǒng)采用簡單的貪婪算法。采用最大堆算法選擇具有最大CPU 余量的主機部署VNF,直至所有VNF部署完畢。
我們在4 臺全連接的服務(wù)器(32C/64T,64GB) 內(nèi)建立KVM虛擬機來模擬NSFNet 拓撲(如圖6) 。每個虛擬機綁定到4 個物理內(nèi)核,節(jié)點間連通性由Open-Flow流表控制,鏈路延遲通過物理主機內(nèi)核流量控制模塊進行調(diào)節(jié)。
考慮到SFC請求和規(guī)模的隨機性,為了測試系統(tǒng)能否均衡各節(jié)點負載以提高容量,我們進行了20輪測試,每輪測試嘗試連續(xù)部署100 條SFC。每條SFC 請求的長度、負載和端點都是按照均勻分布隨機選取。通過取所有測試的平均值得到成功率與SFC 請求次數(shù)的關(guān)系(如圖7) 。對比測試為限制物理節(jié)點路徑長度不大于VNF數(shù)量,這對應(yīng)于流量通過公共網(wǎng)絡(luò)跳轉(zhuǎn)的一般情形,而并非本系統(tǒng)直接利用中間節(jié)點進行轉(zhuǎn)發(fā)。可以看出,系統(tǒng)的SFC 數(shù)量小于某一臨界值(最大系統(tǒng)容量)時可以將部署成功率可以維持在較高水平附近。系統(tǒng)較之于對比測試能取得更大的系統(tǒng)容量,同時在正常工作區(qū)間的部署成功率也提高了約10%。

圖7 部署成功率-SFC數(shù)量關(guān)系
針對邊緣環(huán)境,文章設(shè)計了一個基于SDN的虛擬功能服務(wù)鏈部署系統(tǒng)。所有控制層均互相松耦合,能夠較好地適應(yīng)復(fù)雜和不穩(wěn)定拓撲。根據(jù)用戶需求獨立選擇三種網(wǎng)絡(luò)之一傳輸任意兩個節(jié)點間流量。通過對鏈路的全局實時監(jiān)控,實現(xiàn)了對VNF部署和路徑選擇的細粒度管理。全局策略對會消耗控制節(jié)點較多計算資源,有必要進一步針對更大規(guī)模拓撲和流量進行改進。