陳泳潔, 王 勇, 葉 苗
(1.桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林 541004;2.桂林電子科技大學(xué) 計(jì)算機(jī)與信息安全學(xué)院,廣西 桂林 541004;3.桂林電子科技大學(xué) 廣西云計(jì)算與大數(shù)據(jù)合作創(chuàng)新中心,廣西 桂林 541004)
近年來(lái),隨著互聯(lián)網(wǎng)應(yīng)用的爆發(fā)式增長(zhǎng),網(wǎng)絡(luò)數(shù)據(jù)量也以指數(shù)形式不斷增加?!?019中國(guó)網(wǎng)絡(luò)狀況白皮書(shū)》指出,截至2019年6月,中國(guó)網(wǎng)民規(guī)模達(dá)8.54億,互聯(lián)網(wǎng)普及率為61.2%,人均每周在線時(shí)長(zhǎng)27.9小時(shí)。面對(duì)如此大規(guī)模的網(wǎng)絡(luò)數(shù)據(jù)量,傳統(tǒng)網(wǎng)絡(luò)架構(gòu)面臨部署管理、流量控制困難,設(shè)備不可編程的問(wèn)題。美國(guó)斯坦福大學(xué)Nick McKeown教授和他的團(tuán)隊(duì)在2009年提出的一種新型網(wǎng)絡(luò)創(chuàng)新架構(gòu)——軟件定義網(wǎng)絡(luò)(software defined network,簡(jiǎn)稱SDN)能夠應(yīng)對(duì)由于網(wǎng)絡(luò)數(shù)據(jù)的大量增加而出現(xiàn)的單一廣播域過(guò)于龐大,計(jì)算資源無(wú)法快速上線,網(wǎng)絡(luò)時(shí)延過(guò)大,橫向擴(kuò)展能力不足,業(yè)務(wù)模型流量不清晰等問(wèn)題。SDN將傳統(tǒng)網(wǎng)絡(luò)中的控制平面和數(shù)據(jù)平面分離,由控制層實(shí)施集中式控制,即SDN控制器;轉(zhuǎn)發(fā)層通過(guò)流表進(jìn)行快速轉(zhuǎn)發(fā),即SDN交換機(jī)。SDN控制器作為統(tǒng)一的控制平面,承擔(dān)著舉足輕重的作用,一旦SDN控制器出現(xiàn)故障或者性能無(wú)法滿足交換機(jī)的轉(zhuǎn)發(fā)需求,都會(huì)使整個(gè)網(wǎng)絡(luò)陷入癱瘓。為了解決這些問(wèn)題,很多學(xué)者采用多個(gè)控制器協(xié)同工作來(lái)實(shí)現(xiàn)邏輯集中式控制器的功能[1-3]。然而,受經(jīng)濟(jì)因素的制約,大規(guī)模網(wǎng)絡(luò)中普遍采用低成本的網(wǎng)絡(luò)設(shè)備[4],設(shè)備故障的情況依舊時(shí)有發(fā)生。一旦控制器發(fā)生故障,其管理域下的交換機(jī)便不能實(shí)時(shí)更新流表,以至于無(wú)法應(yīng)對(duì)網(wǎng)絡(luò)的快速變化,輕則網(wǎng)絡(luò)擁堵,重則網(wǎng)絡(luò)癱瘓[5]。針對(duì)控制層故障問(wèn)題,以往的研究方向主要包括設(shè)置備用控制器和交換機(jī)遷移2種。Fonseca等[6]設(shè)計(jì)了CPRecovery組件,用于控制器間的信息同步,盡可能地減少網(wǎng)絡(luò)開(kāi)銷(xiāo)和時(shí)延,以保證網(wǎng)絡(luò)具有足夠的可靠性。Heller等[7]按每3個(gè)控制器部署一個(gè)備份控制器的方法來(lái)解決控制器故障問(wèn)題。該方法雖然能夠解決控制器故障帶來(lái)的網(wǎng)絡(luò)癱瘓問(wèn)題,但占用網(wǎng)絡(luò)資源過(guò)多,對(duì)于恢復(fù)后控制器的生存性也未考慮。Zhang等[8]提出了一種基于生存性模型的控制器備份方法。該方法考慮了網(wǎng)絡(luò)延遲,為每個(gè)主控制器選擇備用控制器,以提高控制器故障恢復(fù)后多控制器網(wǎng)絡(luò)的生存力,不僅保證了控制器故障能夠有效恢復(fù),且可以減少網(wǎng)絡(luò)故障帶來(lái)的鏈路損失。這種設(shè)置備份控制器的方法雖然能夠有效解決故障問(wèn)題,但增加了運(yùn)營(yíng)成本,同時(shí)也必然導(dǎo)致控制層與數(shù)據(jù)層之間連接鏈路的增加,鏈路故障率隨之升高[9]。為了在不過(guò)多增加成本的情況下提高網(wǎng)絡(luò)的可靠性,學(xué)者們提出了在不需要部署更多備用控制器的情況下處理控制器故障問(wèn)題[10]的方法。Zhang等[11]將已有的控制器分為重要控制器和普通控制器2級(jí),對(duì)重要控制器實(shí)施專(zhuān)用保護(hù),并提出一種模擬退火算法,用于普通控制器從其他域(包括重要控制器和普通控制器)選擇備用控制器,當(dāng)故障發(fā)生后,將故障控制器下的交換機(jī)遷移至其他控制器域內(nèi)。AL-Tam等[12]針對(duì)數(shù)據(jù)流提出一種動(dòng)態(tài)的分?jǐn)?shù)級(jí)遷移分配模型,允許多個(gè)控制器處理來(lái)自交換機(jī)的流,實(shí)驗(yàn)結(jié)果表明,該模型與傳統(tǒng)模型相比,交換機(jī)控制器分配的穩(wěn)定性提高了約91%。Chan等[13]提出一種多域SDN的控制器故障恢復(fù)機(jī)制,利用循環(huán)心跳包檢測(cè)控制器是否有故障,一旦檢出故障,則以最小化時(shí)延為目標(biāo)選擇接替的控制器,并將故障控制器域下的交換機(jī)遷移至接替控制器域下。
綜上所述,現(xiàn)有的多域SDN控制器故障處理策略大多粗放,方法雖然不少,但目標(biāo)過(guò)于單一,應(yīng)綜合考慮多種指標(biāo)來(lái)選取目標(biāo)控制器,并保證控制層恢復(fù)后仍具有良好的整體性能。因此,為了提高多控制器SDN的網(wǎng)絡(luò)服務(wù)可靠性,通過(guò)擴(kuò)展SDN控制器的北向接口,設(shè)計(jì)了一個(gè)基于FPGA的動(dòng)態(tài)資源協(xié)調(diào)平臺(tái),以集中管理SDN控制器。利用該平臺(tái)對(duì)控制器的狀態(tài)進(jìn)行判斷,并提出一種改進(jìn)的隨機(jī)森林(improved random forest,簡(jiǎn)稱IRF)算法,對(duì)故障控制器域下交換機(jī)的接替控制器進(jìn)行選擇。
基于FPGA的SDN多控制器協(xié)同模型如圖1所示。該模型使用了層次化設(shè)計(jì),將一個(gè)大型網(wǎng)絡(luò)劃分為多個(gè)域,每個(gè)域中的交換機(jī)由一個(gè)控制器控制,每個(gè)控制器分別獲取所在子網(wǎng)的網(wǎng)絡(luò)拓?fù)?,控制層的北向接口與FPGA相連,并與FPGA保持連接和心跳,不僅可以同步全局網(wǎng)絡(luò)拓?fù)洌疫€能減少控制器間的通信開(kāi)銷(xiāo),提高控制器的工作效率。
圖1 基于FPGA的SDN多控制器協(xié)同模型
SDN控制器故障恢復(fù)的主要思路[14]是更換控制器與交換機(jī)之間的映射關(guān)系。為適應(yīng)網(wǎng)絡(luò)數(shù)據(jù)量的增長(zhǎng)速度,在SDN網(wǎng)絡(luò)的控制層部署多個(gè)控制器,當(dāng)某控制器發(fā)生故障,將其域下的交換機(jī)遷移至其余工作控制器域下,繼續(xù)完成交換機(jī)數(shù)據(jù)的轉(zhuǎn)發(fā)工作。該策略流程如圖2所示。
圖2 控制器故障處理策略框架
FPGA和各個(gè)控制器之間采用心跳包的方式檢測(cè)故障,通過(guò)以固定時(shí)間的周期向?qū)Ψ桨l(fā)送心跳數(shù)據(jù)包來(lái)檢測(cè)對(duì)方是否存活[15],設(shè)定每3 s發(fā)送一次心跳報(bào)文,用于確定控制器是否正常工作。心跳報(bào)文格式如圖3所示,后56 bit為數(shù)據(jù)部分,其中type=4′b0001,data_len為數(shù)據(jù)長(zhǎng)度,padding全為零,用于數(shù)據(jù)占位,Controller_ID為控制器序號(hào)標(biāo)識(shí)。若FPGA未能在規(guī)定時(shí)間內(nèi)收到某個(gè)控制器的心跳包,則判斷該控制器發(fā)生故障,此時(shí)轉(zhuǎn)至故障恢復(fù)模塊,若在規(guī)定時(shí)間內(nèi)收到了該控制器的心跳包,則重置定時(shí)器。
圖3 心跳報(bào)文格式
該模塊采用IRF算法對(duì)故障控制器域下的交換機(jī)進(jìn)行重新分配。隨機(jī)森林是一種靈活、便于使用的機(jī)器學(xué)習(xí)算法,它由多個(gè)二叉決策樹(shù)(binary decision trees,簡(jiǎn)稱BDTs)組成,常被用來(lái)進(jìn)行分類(lèi)和回歸任務(wù)。在訓(xùn)練過(guò)程中,每個(gè)決策樹(shù)都是由同一訓(xùn)練集的不同子抽樣數(shù)據(jù)建立的。算法流程如下:
1)從原始數(shù)據(jù)集X中放回地隨機(jī)抽取x個(gè)樣本。
2)每個(gè)樣本有M個(gè)特征,從中抽取m個(gè)特征。
3)建立決策樹(shù)。決策樹(shù)的每個(gè)分支都從m個(gè)特征中選擇1個(gè)特征,作為該分支的分裂特征,直至m個(gè)特征全部用完,得到每棵樹(shù)的匹配標(biāo)簽ci。
4)重復(fù)步驟1)~3),建立n個(gè)決策樹(shù)。
5)對(duì)每棵決策樹(shù)的匹配標(biāo)簽進(jìn)行投票,票數(shù)最高的作為分類(lèi)結(jié)果,輸出Ci。
利用這一過(guò)程,為交換機(jī)選擇接替控制器,同時(shí)為適應(yīng)多控制器SDN網(wǎng)絡(luò)的應(yīng)用場(chǎng)景,修改最后的投票機(jī)制,將每棵數(shù)的分類(lèi)結(jié)果都進(jìn)行輸出,并通過(guò)累加得到每個(gè)分類(lèi)結(jié)果的出現(xiàn)次數(shù),從大至小依次排列,當(dāng)一個(gè)控制器發(fā)生故障,便可以另外選擇一個(gè)出現(xiàn)次數(shù)接近的控制器接管。另一方面,由于FPGA能夠并行地實(shí)現(xiàn)定制流水線任務(wù)[16],對(duì)于擁有多棵不同決策樹(shù)的隨機(jī)森林來(lái)說(shuō),F(xiàn)PGA可以快速地計(jì)算出結(jié)果。IRF算法偽代碼如下。
算法1交換機(jī)遷移
輸入:交換機(jī)特征{f1,f2,f3,f4};輸出:目標(biāo)控制器{c0,…,ck,cn}∈C
主程序:
1.cal(tree[0,1,…,m],node[0]);
2.if(left[0,1,…,m]==1)
{cal(tree[0,1,…,m],node[1]);goto 3}
if(right[0,1,…,m]==1)
{cal(tree[0,…,m],node[2]);goto 4}
3.if(left[0,…,m]==1)
{cal(tree[0,…,m],node[3]);}
if(right[0,…,m]==1)
{cal(tree[0,…,m],node[4]);}
4.if(left[0,…,m]==1)
{cal(tree[0,…,m],node[5]);}
if(right[0,…,m]==1)
{cal(tree[0,…,m],node[6]);}
子程序:
cal(tree_id,node_id)
if(fi≤condition[tree_id][node_id])
{if(left_end==1)
{result[tree_id]=class[tree_id][node_id][left]};
else{left=1;}}
else{
if(right_end==1)
{result[tree_id]=class[tree_id][node_id][right]};
else{right=1;}}
交換機(jī)特征信息按如圖4所示的格式輸入,前56 bit與心跳報(bào)文數(shù)據(jù)部分格式一致,type=4′b0100;后128 bit中Switch_ID為交換機(jī)序號(hào),feature_0~feature_3分別代表交換機(jī)的x坐標(biāo)、y坐標(biāo)、故障率及吞吐量。由于時(shí)延與節(jié)點(diǎn)間的地理位置有關(guān),用交換機(jī)到控制器之間的距離替代時(shí)延[13]。模型參數(shù)按如圖5所示格式輸入,type=4′b0010,tree_id為樹(shù)的序號(hào),node_id為節(jié)點(diǎn)號(hào),node_left_right用以判斷決策樹(shù)是否結(jié)束,feature_num表示當(dāng)前節(jié)點(diǎn)采用的是哪個(gè)分類(lèi)特征,condition_value為該特征在當(dāng)前節(jié)點(diǎn)的判斷條件,left_class、right_class分別表示當(dāng)分類(lèi)終止時(shí)左右分支的分類(lèi)結(jié)果。
圖4 交換機(jī)特征信息
圖5 模型參數(shù)
為驗(yàn)證算法的有效性,分別使用Python 3.6和ModelSim 10.6進(jìn)行仿真驗(yàn)證。實(shí)驗(yàn)拓?fù)鋄17]通過(guò)MATLAB仿真軟件采用改進(jìn)的Salama網(wǎng)絡(luò)拓?fù)潆S機(jī)生成算法生成,其抽象結(jié)構(gòu)示意圖如圖6所示。該網(wǎng)絡(luò)拓?fù)湎薅ㄔ?0 km×10 km的范圍內(nèi),節(jié)點(diǎn)數(shù)為25,用于部署控制器和交換機(jī)。設(shè)置節(jié)點(diǎn)故障率為[0.02,0.04]區(qū)間內(nèi)的隨機(jī)數(shù),節(jié)點(diǎn)吞吐量為[30,100]區(qū)間內(nèi)的隨機(jī)數(shù)。Salama模型綜合考慮網(wǎng)絡(luò)的連通性和平均節(jié)點(diǎn)度,通過(guò)概率Pl決定2個(gè)節(jié)點(diǎn)i、j之間是否存在一條直接相連的鏈路。整個(gè)拓?fù)涔灿?2條鏈路。
圖6 網(wǎng)絡(luò)拓?fù)涫疽鈭D
(1)
其中:α、β為網(wǎng)絡(luò)特征參數(shù),α為短邊相對(duì)長(zhǎng)邊的比例,β為邊的密度,均設(shè)定為5;li,j為i、j之間的幾何距離;L為拓?fù)鋱D中所有節(jié)點(diǎn)距離的最大值。
在4個(gè)SDN管理域?qū)DN控制器進(jìn)行故障監(jiān)控和故障恢復(fù)。實(shí)驗(yàn)環(huán)境配置如表1所示。
表1 實(shí)驗(yàn)環(huán)境配置
使用Wireshark[18]抓包軟件進(jìn)行心跳報(bào)文的抓取,以驗(yàn)證故障檢測(cè)模塊的有效性。一條完整的心跳報(bào)文如圖7所示,其中每個(gè)字段大小都為一個(gè)字節(jié),Controller_ID=0x01,表示該條心跳報(bào)文是由控制器C1發(fā)送的。
圖7 Wireshark抓包
使用ModelSim仿真軟件進(jìn)行硬件仿真,分別設(shè)置樹(shù)的個(gè)數(shù)為5、10、20,并在軟件端使用Python語(yǔ)言編寫(xiě)程序進(jìn)行仿真。軟件端算法的執(zhí)行時(shí)間可以利用代碼直接輸出,硬件端算法的執(zhí)行時(shí)間由系統(tǒng)時(shí)鐘頻率決定,并用時(shí)間加速比衡量硬件端的加速效果,即
(2)
其中:TS為軟件端算法的執(zhí)行時(shí)間;TH為硬件端算法的執(zhí)行時(shí)間。軟硬件算法執(zhí)行時(shí)間對(duì)比如表2所示。從表2可看出,算法的執(zhí)行時(shí)間與決策樹(shù)個(gè)數(shù)成正比,硬件端算法比軟件端算法平均執(zhí)行時(shí)間降低2個(gè)數(shù)量級(jí),能更好地適應(yīng)高速網(wǎng)絡(luò)傳輸?shù)男枰?。因此,該基于FPGA的動(dòng)態(tài)資源協(xié)調(diào)平臺(tái)高速有效。
表2 軟硬件算法執(zhí)行時(shí)間對(duì)比 μs
針對(duì)已有的多管理域SDN故障處理算法目標(biāo)主要針對(duì)鏈路且多是從軟件方面對(duì)算法進(jìn)行驗(yàn)證的現(xiàn)狀,設(shè)計(jì)了基于FPGA的多控制器協(xié)同平面,采用固定時(shí)間間隔發(fā)送心跳信息的方式對(duì)控制器的狀態(tài)進(jìn)行監(jiān)測(cè),當(dāng)控制器出現(xiàn)故障后,通過(guò)提出的綜合考慮交換機(jī)-控制器時(shí)延、交換機(jī)故障率、交換機(jī)吞吐量的故障恢復(fù)算法進(jìn)行故障處理。仿真結(jié)果表明,本算法能及時(shí)發(fā)現(xiàn)故障,并對(duì)其域下的交換機(jī)進(jìn)行快速遷移,恢復(fù)網(wǎng)絡(luò)的正常運(yùn)行。