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