本發(fā)明屬于下一代網(wǎng)絡(luò)控制與管理和軟件定義網(wǎng)絡(luò)領(lǐng)域,是一種新穎的用于對軟件定義網(wǎng)絡(luò)合理分區(qū)以及控制器部署算法,涉及到一種在時延最小的情況下對軟件定義網(wǎng)絡(luò)整片網(wǎng)絡(luò)進(jìn)行分區(qū),并保證每個控制器負(fù)載均衡的控制器部署算法。具體講,涉及sdn中的節(jié)點退火方法。
背景技術(shù):
軟件定義網(wǎng)絡(luò)(software-definednetwork,sdn)是一種新型的網(wǎng)絡(luò)架構(gòu)。它的主要思想是數(shù)據(jù)平面和控制平面的分離,從而支持集中化的網(wǎng)絡(luò)控制。在這種結(jié)構(gòu)下,交換機(jī)只負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),控制邏輯由控制器給出。
在廣泛使用的sdn方案openflow中,數(shù)據(jù)轉(zhuǎn)發(fā)以流為單位,一個流根據(jù)網(wǎng)絡(luò)地址網(wǎng)絡(luò)端口和協(xié)議類型等信息來進(jìn)行定義。openflow交換機(jī)中存儲著多個流表來指導(dǎo)流的轉(zhuǎn)發(fā)。當(dāng)數(shù)據(jù)流進(jìn)入openflow交換機(jī)時,交換機(jī)會按照與該流匹配的流表項來轉(zhuǎn)發(fā)數(shù)據(jù)。如果交換機(jī)的流表中沒有與之匹配的轉(zhuǎn)發(fā)項,則會向控制器發(fā)出查詢??刂破髯龀鰶Q策之后,再將新的流表項下發(fā)到交換機(jī)。這套機(jī)制使得管理者可以更方便地管理整個網(wǎng)絡(luò)。
與此同時,由于控制器負(fù)擔(dān)著整個網(wǎng)絡(luò)的工作,控制器的處理能力以及控制器與交換機(jī)之間通信的時延對整個網(wǎng)絡(luò)的性能有著重要的影響。然而,控制器的容量也是有限的,隨著sdn網(wǎng)絡(luò)的快速發(fā)展,一個控制器已經(jīng)負(fù)擔(dān)不了一個巨大的sdn網(wǎng)絡(luò)的業(yè)務(wù)。這就要求sdn網(wǎng)絡(luò)有分布式的多個控制器來分擔(dān)整個網(wǎng)絡(luò)的壓力。
因此,為了使sdn網(wǎng)絡(luò)能夠正常工作而且效率更高,要在保證負(fù)載均衡的情況下,對整個sdn網(wǎng)絡(luò)進(jìn)行合理的控制器部署。
文獻(xiàn)[1]最早提出了控制器的部署問題,使用平均時延和最大時延作為衡量指標(biāo)來分析控制器的部署問題,并使用貪心算法對其求解。文獻(xiàn)[2]提出了k-critical算法,根據(jù)最大允許時延來計算所需控制器數(shù)量以及部署位置,但該文獻(xiàn)同樣沒有考慮控制器的負(fù)載均衡問題。文獻(xiàn)[3]在使用譜聚類算法來解決這個wan中的控制器部署問題,其算法有一定的負(fù)載均衡效果。文獻(xiàn)[4]使用了粒子群算法來求解sdn的控制器部署問題,同時考慮了時延和負(fù)載均衡。
模擬退火算法[5]是用來求解最優(yōu)化問題的算法。它模擬了熱力學(xué)系統(tǒng)中的退火過程。它以一定的概率來接受一個比當(dāng)前解要差的解,因此有可能會跳出這個局部的最優(yōu)解,達(dá)到全局的最優(yōu)解。受到該算法的啟發(fā),本發(fā)明提出了一種用于解決sdn控制器負(fù)載均衡問題的算法,并將其命名為節(jié)點退火算法。
[1]hellerb,sherwoodr,mckeownn.thecontrollerplacementproblem[c]//proceedingsofthefirstworkshoponhottopicsinsoftwaredefinednetworks.acm,2012:7-12
[2]
[3]xiaop,quw,qih,etal.thesdncontrollerplacementproblemforwan[c]//ieee/cicinternationalconferenceoncommunicationsinchina.ieee,2014:220-224.
[4]gaoc,wangh,zhuf,etal.aparticleswarmoptimizationalgorithmforcontrollerplacementprobleminsoftwaredefinednetwork[c]//internationalconferenceonalgorithmsandarchitecturesforparallelprocessing.springerinternationalpublishing,2015:44-54
[5]bertsimasd,tsitsiklisj.simulatedannealing[j].statisticalscience,1993,8(1):10-15。
技術(shù)實現(xiàn)要素:
為克服現(xiàn)有技術(shù)的不足,本發(fā)明旨在提出一種sdn中的節(jié)點退火算法,保證控制器的負(fù)載均衡。本發(fā)明采用的技術(shù)方案是,sdn中的節(jié)點退火方法,步驟如下:
步驟1:根據(jù)改進(jìn)的k-medoids算法對網(wǎng)絡(luò)進(jìn)行初步的分類,返回分類結(jié)果中心點集合p和每個節(jié)點的標(biāo)簽集合q;
步驟2:設(shè)置迭代次數(shù)并且計算整個網(wǎng)絡(luò)節(jié)點數(shù)的初始方差;
步驟3:遍歷所有的節(jié)點,找到所有邊界節(jié)點;
步驟4:在所有邊界節(jié)點中,找一個沒有操作過的邊界節(jié)點進(jìn)行重新分類操作,將其分給與其相鄰節(jié)點的類;
步驟5:計算此時的方差,與前一次的方差進(jìn)行比較:
若此時方差小于前一次的方差,則接受步驟4中的重新分類;
否則,不接受重新分類,重復(fù)步驟4;
步驟6:判斷此時迭代次數(shù)是否達(dá)到:
若未達(dá)到迭代次數(shù),返回步驟4;
否則,返回此時的分類結(jié)果,結(jié)束。
改進(jìn)的k-medoids算法,步驟如下:
步驟1:從n個節(jié)點中任意選出一個節(jié)點作為初始中心點;
步驟2:根據(jù)k-medoids算法更新中心點;
步驟3:找到每個類中距離中心點最遠(yuǎn)的節(jié)點,將其存在一個集合中,選擇該集合中到所有中心點距離之和最大的點作為一個新的中心點;
步驟4:重復(fù)步驟2,判斷整個網(wǎng)絡(luò)有沒有被分成k個類:
如果沒有分成k個類,重復(fù)步驟3并繼續(xù);
如果分成k個類,就返回分類結(jié)果,結(jié)束算法。
在一個實例中,具體步驟如下:
步驟1:根據(jù)改進(jìn)的k-medoids算法對網(wǎng)絡(luò)進(jìn)行初始分類,分類結(jié)果分別為中心點的集合p和每個點標(biāo)簽的集合q;
步驟2:設(shè)置迭代次數(shù)為d,計算此時整個網(wǎng)絡(luò)交換機(jī)節(jié)點數(shù)的初始方差t0;
步驟3:遍歷q中所有點,找到所有的邊界節(jié)點,將其存儲在集合b中t1;
步驟4:計算此時方差t1,隨機(jī)取一個集合b里面的邊界節(jié)點bi,i=0,1,…,n-1,將bi的標(biāo)簽改變?yōu)橄噜彶煌惞?jié)點的標(biāo)簽,即分到相鄰不同類節(jié)點的類中,計算此時方差t2;
步驟5:計算δt=t2-t1。若δt<0,則接受bi的標(biāo)簽改變,更新q;否則,則不接受bi標(biāo)簽的改變,返回步驟4;
步驟6:判斷是否達(dá)到迭代次數(shù)d:
若未達(dá)到迭代次數(shù)d,返回步驟4;
若已達(dá)到迭代次數(shù)d,返回此時的p和q,結(jié)束。
本發(fā)明的特點及有益效果是:
本發(fā)明優(yōu)點主要是考慮的控制器的負(fù)載均衡問題,可以給出合理的控制器部署結(jié)果。
在對sdn控制器部署的研究中,大部分都是以交換機(jī)到控制器的時延作為部署目標(biāo)。這種方法在控制器容量很大的情況下,是沒有問題的。但是一旦網(wǎng)絡(luò)變得大型,控制器容量是不可避免的問題。本算法使用節(jié)點退火算法對sdn控制器部署問題進(jìn)行求解,保證sdn各子網(wǎng)控制器控制的交換機(jī)數(shù)保持平衡。求解過程復(fù)雜度較低,運行時間極其短。
在求解結(jié)果性能估計方面,本算法用節(jié)點數(shù)方差作為兩個性能的衡量指標(biāo)。結(jié)果如下圖3所示,以美國internet2advancedlayer2services拓?fù)錇槔?,假設(shè)k=3,其中節(jié)點7,16,30分別為中心節(jié)點,每個類的節(jié)點數(shù)分別為13,13,13,方差為0。
附圖說明:
圖1邊界節(jié)點(1,5,6,7,8,9)。
圖2算法流程圖。
圖3部署3個控制器時分類結(jié)果(中心點為7,16,30,方差為0)。
具體實施方式
目前雖然已有學(xué)者開始研究控制器部署問題,但是有效方案卻還是很少。尤其是在控制器的負(fù)載均衡方面,極少有文獻(xiàn)能夠給出合理的解決方案。sdn中每個控制器的容量是有限的,一旦控制器的負(fù)荷超過了其容量,整個網(wǎng)絡(luò)必然無法正常工作。本發(fā)明的目的在于提出一種保證負(fù)載均衡的sdn控制器部署算法,保證控制器部署在合理的位置。
本算法的主要過程是,首先對根據(jù)時延對整個網(wǎng)絡(luò)進(jìn)行初步的分類。再計算整個網(wǎng)絡(luò)每個類的節(jié)點數(shù)方差。然后遍歷所有節(jié)點,找到所有的邊界節(jié)點(即在它自己類的邊界而且與其他類直接相連的節(jié)點,見圖1所示),存在一個集合中。對該集合中的某些節(jié)點進(jìn)行重新分類。若重新分類后的方差小于原來的方差,則接受這種分類;否則不接受。一直重復(fù)上述過程直到達(dá)到迭代次數(shù)。
具體方案如下:
一種sdn中的節(jié)點退火算法:
首先基于時延最小對整個網(wǎng)絡(luò)進(jìn)行初始的分類。采用的是改進(jìn)的k-medoids算法,步驟如下:
步驟1:從n個節(jié)點中任意選出一個節(jié)點作為初始中心點。
步驟2:根據(jù)k-medoids算法更新中心點。
步驟3:找到每個類中距離中心點最遠(yuǎn)的節(jié)點,將其存在一個集合中。選擇該集合中到所有中心點距離之和最大的點作為一個新的中心點。
步驟4:重復(fù)步驟2。判斷整個網(wǎng)絡(luò)有沒有被分成k個類:
如果沒有分成k個類,重復(fù)步驟3并繼續(xù);
如果分成k個類,就返回分類結(jié)果,結(jié)束算法。
sdn中的節(jié)點退火算法:
步驟1:根據(jù)改進(jìn)的k-medoids算法對網(wǎng)絡(luò)進(jìn)行初始分類,分類結(jié)果分別為p(中心點的集合)和q(每個點標(biāo)簽的集合)。
步驟2:設(shè)置迭代次數(shù)為d,計算此時整個網(wǎng)絡(luò)交換機(jī)節(jié)點數(shù)的初始方差t0。
步驟3:遍歷q中所有點,找到所有的邊界節(jié)點,將其存儲在集合b中t1。
步驟4:計算此時方差t1。隨機(jī)取一個集合b里面的邊界節(jié)點bi,i=0,1,…,n-1,將bi的標(biāo)簽改變?yōu)橄噜彶煌惞?jié)點的標(biāo)簽,即分到相鄰不同類節(jié)點的類中。計算此時方差t2。
步驟5:計算δt=t2-t1。若δt<0,則接受bi的標(biāo)簽改變,更新q;否則,則不接受bi標(biāo)簽的改變,返回步驟4。
步驟6:判斷是否達(dá)到迭代次數(shù)d:
若未達(dá)到迭代次數(shù)d,返回步驟4;
若已達(dá)到迭代次數(shù)d,返回此時的p(中心點的集合)和q(每個點標(biāo)簽的集合),結(jié)束算法。