鄧澤平,曾旺,劉暢
(懷化學(xué)院,湖南 懷化 418000)
對(duì)比云計(jì)算領(lǐng)域的數(shù)據(jù)中心(Data Center,DC) ,邊緣計(jì)算網(wǎng)絡(luò)更靠近底層用戶,因而能通過(guò)提供低延遲的服務(wù)來(lái)滿足工農(nóng)業(yè)物聯(lián)網(wǎng)實(shí)時(shí)控制的需求。不同層次的邊緣計(jì)算(如移動(dòng)邊緣計(jì)算和微云)通常用于協(xié)助處理高帶寬或低延遲的任務(wù),并將高性能計(jì)算卸載到云,從而形成從設(shè)備、邊緣網(wǎng)絡(luò)到數(shù)據(jù)中心的多級(jí)服務(wù)模型[1]。當(dāng)下,網(wǎng)絡(luò)功能虛擬化(Network Function Virtualization,NFV) 框架下的服務(wù)鏈(Service Function Chain,SFC) 作為一種高效靈活的網(wǎng)絡(luò)流處理模型受到了工業(yè)界廣泛的關(guān)注和研究?;诘乩砀綦x的多DC 網(wǎng)絡(luò),學(xué)界提出了許多針對(duì)不同約束條件和優(yōu)化目標(biāo)SFC 部署模型與算法[2],但較少討論在邊緣網(wǎng)絡(luò)的實(shí)現(xiàn)。不同于現(xiàn)代DC廣泛采用的Clos網(wǎng)絡(luò)架構(gòu),邊緣網(wǎng)絡(luò)具有故障率高、延遲敏感和用戶流量難以預(yù)測(cè)等特點(diǎn)[3]。軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN) 通過(guò)分離控制層和數(shù)據(jù)層為網(wǎng)絡(luò)的實(shí)時(shí)精細(xì)化管理提供了技術(shù)支持。筆者擬針對(duì)邊緣環(huán)境,研究如何將SDN 關(guān)鍵技術(shù)嵌入NFV 框架內(nèi),從而實(shí)現(xiàn)統(tǒng)一和可靠的服務(wù)鏈部署。
系統(tǒng)參考ETSI 架構(gòu)[4]自上而下分為服務(wù)管理層、操作層和基礎(chǔ)設(shè)施層(如圖1) 。管理層根據(jù)一定策略發(fā)出SFC請(qǐng)求,操作層進(jìn)行解析并實(shí)現(xiàn)。其中節(jié)點(diǎn)監(jiān)控模塊部署各VNF,網(wǎng)絡(luò)管理模塊隨后完成流量引導(dǎo)。SFC 代理模塊(SFC Agent) 作為安裝在每個(gè)邊緣物理主機(jī)內(nèi)的代理服務(wù),管理和監(jiān)控本地虛擬計(jì)算和網(wǎng)絡(luò)資源,并通過(guò)定義遠(yuǎn)程過(guò)程調(diào)用(Remote Process Call,RPC) 協(xié)議對(duì)上層提供統(tǒng)一的基礎(chǔ)設(shè)施管理操作??刂破鞣植加诟鬟吘壴O(shè)備之中,連同其中的專有應(yīng)用和北向接口共同輔助SFC 網(wǎng)絡(luò)的構(gòu)建。需要強(qiáng)調(diào)的是,圖1中所示路徑均同時(shí)包含南向控制和北向監(jiān)測(cè)信息,如SFC Agent向上返回的服務(wù)器內(nèi)部信息。除SFC Agent 綁定本地接口外,其余模塊都采用松耦合的遠(yuǎn)程調(diào)用與控制,使得整個(gè)系統(tǒng)能支持不同類型的網(wǎng)絡(luò)接入,亦有利于水平方向的擴(kuò)展。
圖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 信道等。由于控制模塊之間均為松耦合,且對(duì)時(shí)延和帶寬不太敏感,所以管理網(wǎng)絡(luò)只要求三層可達(dá)。
圖2 網(wǎng)絡(luò)架構(gòu)
私有網(wǎng)絡(luò)和公共網(wǎng)絡(luò)均承載了業(yè)務(wù)流量,并與管理網(wǎng)互不交叉,故而保證了系統(tǒng)控制和流量波動(dòng)互不影響。地理位置靠近且易搭建物理信道的邊緣服務(wù)器之間依靠私有網(wǎng)絡(luò)進(jìn)行通信。私有網(wǎng)絡(luò)是一個(gè)用若干交換機(jī)組成的二層交換網(wǎng),并獨(dú)立地分布在不同位置,保證了其內(nèi)部高速低延遲的通信。公共網(wǎng)絡(luò)是一個(gè)三層路由網(wǎng),是所有邊緣節(jié)點(diǎn)相互通信最后保障。
服務(wù)鏈整合了不同服務(wù)器的資源,但也導(dǎo)致其業(yè)務(wù)流量和風(fēng)險(xiǎn)的集中,因此必須對(duì)不同業(yè)務(wù)流量進(jìn)行隔離。在物理服務(wù)器內(nèi)部,所有VNF 端口均以access模式連接于虛擬網(wǎng)橋br-int,并被分配了不同的VID(Virtual Local Area Network Identifier) 。進(jìn)入私有網(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ò)并分配了獨(dú)立ID,以保證系統(tǒng)的穩(wěn)定性。
1) 服務(wù)器內(nèi)部通信。如圖2 所示,VNF_01 的幀從指定虛擬端口進(jìn)入br-int 后會(huì)被加上“VID=11”標(biāo)記,再受網(wǎng)絡(luò)模塊預(yù)設(shè)流表項(xiàng)(flow entry) 指示替換成標(biāo)記“VID=21”,最后發(fā)送到VNF_02指定的端口。
2) 跨私有網(wǎng)絡(luò)的通信。主機(jī)1 內(nèi)的br-int 根據(jù)VID 和目的MAC 地址將來(lái)自VNF_01 的幀經(jīng)由trunk模式下的patch port 轉(zhuǎn)發(fā)至br-eth1。br-eth1將其VID從10 替換為100,目的MAC 替換成主機(jī)2 的br-eth1相應(yīng)端口地址,并從物理網(wǎng)卡eth1 發(fā)送至私有網(wǎng)絡(luò)。主機(jī)2 上br-eth1 網(wǎng)橋被設(shè)置為允許接收VID 為100的幀,并根據(jù)自身流表替換VID 和MAC 并送入brint,并經(jīng)由指定端口進(jìn)入VNF_03。
3) 跨公共網(wǎng)絡(luò)的通信。當(dāng)兩個(gè)不同服務(wù)器內(nèi)的VNF間無(wú)私有交換網(wǎng)絡(luò)相互可達(dá)時(shí),系統(tǒng)會(huì)為其在公共網(wǎng)絡(luò)中構(gòu)建獨(dú)立的VXLAN隧道用于流量傳輸。如圖2,來(lái)自VNF_02 的幀在進(jìn)入br-tun 后,會(huì)根據(jù)目的MAC 分配到相應(yīng)的隧道(VNI=100) ,并封裝成UDP 數(shù)據(jù)包發(fā)送到HOST2上的隧道對(duì)端,待解封成幀后發(fā)送到VNF_04對(duì)應(yīng)端口。
當(dāng)系統(tǒng)被部署到若干服務(wù)器并啟動(dòng)時(shí),管理機(jī)會(huì)嘗試連接各控制器和SFC Agent來(lái)獲取相關(guān)信息。例如,SFC Agent需要返回服務(wù)器的CPU、內(nèi)存、虛擬化支持狀況以及公共網(wǎng)絡(luò)拓?fù)?、帶寬和延遲測(cè)試結(jié)果等。同時(shí),管理機(jī)會(huì)嘗試進(jìn)行一些基礎(chǔ)組件安裝、虛擬網(wǎng)絡(luò)骨架的構(gòu)建和鏡像遷移等準(zhǔn)備工作,并反復(fù)驗(yàn)證直至全部通過(guò),隨后正式進(jìn)入SFC部署流程(如圖3) 。
圖3 SFC部署流程
用戶SFC 請(qǐng)求采用YAML 格式,管理層會(huì)對(duì)其進(jìn)行合法性檢查并在部署過(guò)程中根據(jù)環(huán)境和策略不斷添加對(duì)用戶透明的相關(guān)內(nèi)部信息(如VNF 位置、鏈接配置等)。例如圖4展示了一條由兩個(gè)位于不同服務(wù)器的節(jié)點(diǎn)構(gòu)成的SFC。vnfs和links分別代表該SFC的節(jié)點(diǎn)和鏈路信息,in_aps和out_aps分別代表起始和終止位置。顯然,由于使用了接口和流表來(lái)區(qū)分進(jìn)出VNF的流,系統(tǒng)天然支持SFC有向圖的部署。
圖4 SFC配置示例
系統(tǒng)完成SFC 部署和路由調(diào)整均需實(shí)時(shí)獲取各物理節(jié)點(diǎn)和鏈路狀態(tài),這主要依賴于控制器和SFC Agent 模塊??刂破鞑捎肦yu[5]作為框架,通過(guò)Open-Flow 信道的packet_in 和packet_out 實(shí)現(xiàn)鏈路發(fā)現(xiàn),并給所有交換機(jī)注入自學(xué)習(xí)轉(zhuǎn)發(fā)的流表項(xiàng)。監(jiān)控模塊是Ryu中的一個(gè)協(xié)程,并在控制器啟動(dòng)后獨(dú)立地監(jiān)控鏈路信息、保存到本地字典和提供查詢接口(如圖5) 。SFC Agent 是一個(gè)開機(jī)自啟的systemd 服務(wù),其調(diào)用Docker、libvirt、OVS、Bash 和系統(tǒng)調(diào)用等接口,在此基礎(chǔ)上定義和封裝了計(jì)算和網(wǎng)絡(luò)資源的遠(yuǎn)程管理函數(shù)。
邊緣的異構(gòu)性對(duì)服務(wù)鏈部署的影響有:(1) 對(duì)服務(wù)延遲非常敏感,進(jìn)一步要求快速收斂的線上策略;(2) 用戶需求和網(wǎng)絡(luò)拓?fù)洳环€(wěn)定,流量規(guī)模和方向較難預(yù)測(cè);(3) 流量規(guī)模和算力需求遠(yuǎn)小于DC,對(duì)計(jì)算資源的消耗幾乎與包速成正比[6]。本文考慮一個(gè)由分布在一個(gè)地理區(qū)域的若干主機(jī)節(jié)點(diǎn)構(gòu)成的獨(dú)立邊緣網(wǎng)絡(luò),節(jié)點(diǎn)間的鏈路延遲差異較大。限于某些特定的物理?xiàng)l件或安全策略,不相鄰主機(jī)間通信依賴中間節(jié)點(diǎn)的中轉(zhuǎn)。每條到來(lái)的SFC請(qǐng)求會(huì)規(guī)定最大服務(wù)時(shí)延、長(zhǎng)度(VNF數(shù)量)、起始和終止物理節(jié)點(diǎn)。每個(gè)VNF會(huì)消耗一定量的CPU 資源,但在服務(wù)部署前未知。在SFC請(qǐng)求不可預(yù)測(cè)的情況下,我們希望在滿足時(shí)延約束的同時(shí)盡量為后續(xù)SFC請(qǐng)求保留CPU資源,以提高系統(tǒng)容量。
本文利用SDN 架構(gòu)實(shí)現(xiàn)了對(duì)鏈路狀況的全局實(shí)時(shí)監(jiān)測(cè),并能細(xì)粒度地調(diào)整VNF間流量路徑。根據(jù)前述網(wǎng)絡(luò)架構(gòu),每個(gè)物理節(jié)點(diǎn)單獨(dú)分配核心用于包轉(zhuǎn)發(fā),與VNF的資源消耗無(wú)關(guān)。對(duì)于一條路徑上的每個(gè)節(jié)點(diǎn),可以在滿足資源約束下部署任意數(shù)量的VNF。多個(gè)VNF位于一個(gè)主機(jī)時(shí),其內(nèi)部數(shù)據(jù)交換延遲相比于SFC時(shí)延約束可以忽略不計(jì)。當(dāng)不映射VNF時(shí),該物理節(jié)點(diǎn)僅轉(zhuǎn)發(fā)流量,因而更具靈活性。
整個(gè)線上服務(wù)鏈部署過(guò)程如下:
1) 估算SFC 請(qǐng)求的CPU 消耗。假設(shè)各VNF 對(duì)CPU消耗相同,且與入口包速成正比。我們實(shí)際測(cè)算每臺(tái)主機(jī)的包速-CPU 線性關(guān)系,再根據(jù)入口位置歷史流量分布預(yù)測(cè)此次SFC請(qǐng)求的包速。
2) 路徑選擇。為了簡(jiǎn)化問(wèn)題以降低響應(yīng)時(shí)間,只搜索從起點(diǎn)到終點(diǎn)的簡(jiǎn)單路徑。定義某路徑的CPU余量如下:
路徑中包含s個(gè)主機(jī),ACi為從SFC代理模塊獲取的第i個(gè)主機(jī)的實(shí)時(shí)剩余CPU余量即為在第i個(gè)主機(jī)上可映射的VNF數(shù)量。當(dāng)ACi其小于C時(shí),對(duì)應(yīng)的求和項(xiàng)為0,即不映射VNF。借助控制器監(jiān)測(cè)模塊搜索出所有滿足時(shí)延約束的簡(jiǎn)單路徑,并選擇其中具有最大CPU 余量的路徑作為部署路徑。若找不到時(shí)延滿足的路徑,或CPU余量均為0,則拒絕部署。
3) 確定VNF 映射。VNF 與主機(jī)間關(guān)系為N-1,N可取從0開始的任意整數(shù)。因此,在確定物理節(jié)點(diǎn)后,VNF 映射轉(zhuǎn)化為裝箱問(wèn)題。為了給未來(lái)的SFC 請(qǐng)求盡量保留CPU資源,本系統(tǒng)采用簡(jiǎn)單的貪婪算法。采用最大堆算法選擇具有最大CPU 余量的主機(jī)部署VNF,直至所有VNF部署完畢。
我們?cè)? 臺(tái)全連接的服務(wù)器(32C/64T,64GB) 內(nèi)建立KVM虛擬機(jī)來(lái)模擬NSFNet 拓?fù)洌ㄈ鐖D6) 。每個(gè)虛擬機(jī)綁定到4 個(gè)物理內(nèi)核,節(jié)點(diǎn)間連通性由Open-Flow流表控制,鏈路延遲通過(guò)物理主機(jī)內(nèi)核流量控制模塊進(jìn)行調(diào)節(jié)。
考慮到SFC請(qǐng)求和規(guī)模的隨機(jī)性,為了測(cè)試系統(tǒng)能否均衡各節(jié)點(diǎn)負(fù)載以提高容量,我們進(jìn)行了20輪測(cè)試,每輪測(cè)試嘗試連續(xù)部署100 條SFC。每條SFC 請(qǐng)求的長(zhǎng)度、負(fù)載和端點(diǎn)都是按照均勻分布隨機(jī)選取。通過(guò)取所有測(cè)試的平均值得到成功率與SFC 請(qǐng)求次數(shù)的關(guān)系(如圖7) 。對(duì)比測(cè)試為限制物理節(jié)點(diǎn)路徑長(zhǎng)度不大于VNF數(shù)量,這對(duì)應(yīng)于流量通過(guò)公共網(wǎng)絡(luò)跳轉(zhuǎn)的一般情形,而并非本系統(tǒng)直接利用中間節(jié)點(diǎn)進(jìn)行轉(zhuǎn)發(fā)??梢钥闯觯到y(tǒng)的SFC 數(shù)量小于某一臨界值(最大系統(tǒng)容量)時(shí)可以將部署成功率可以維持在較高水平附近。系統(tǒng)較之于對(duì)比測(cè)試能取得更大的系統(tǒng)容量,同時(shí)在正常工作區(qū)間的部署成功率也提高了約10%。
圖7 部署成功率-SFC數(shù)量關(guān)系
針對(duì)邊緣環(huán)境,文章設(shè)計(jì)了一個(gè)基于SDN的虛擬功能服務(wù)鏈部署系統(tǒng)。所有控制層均互相松耦合,能夠較好地適應(yīng)復(fù)雜和不穩(wěn)定拓?fù)洹8鶕?jù)用戶需求獨(dú)立選擇三種網(wǎng)絡(luò)之一傳輸任意兩個(gè)節(jié)點(diǎn)間流量。通過(guò)對(duì)鏈路的全局實(shí)時(shí)監(jiān)控,實(shí)現(xiàn)了對(duì)VNF部署和路徑選擇的細(xì)粒度管理。全局策略對(duì)會(huì)消耗控制節(jié)點(diǎn)較多計(jì)算資源,有必要進(jìn)一步針對(duì)更大規(guī)模拓?fù)浜土髁窟M(jìn)行改進(jìn)。