鐘九洲
(達(dá)州職業(yè)技術(shù)學(xué)院公共事務(wù)管理系,四川達(dá)州635000)
在互聯(lián)網(wǎng)、云計(jì)算彈性擴(kuò)展,方式靈活的高速推廣下,大量的高流量業(yè)務(wù)快速增長(zhǎng).傳統(tǒng)的組網(wǎng)方式一般是按照業(yè)務(wù)需求增加百分比擴(kuò)充的方式部署整個(gè)網(wǎng)絡(luò)架構(gòu),數(shù)據(jù)中心作為網(wǎng)絡(luò)架構(gòu)的中心位置,起著至關(guān)重要的角色.企業(yè)在今天互聯(lián)網(wǎng)+環(huán)境下,業(yè)務(wù)瞬息萬(wàn)變,業(yè)務(wù)量隨時(shí)在發(fā)生巨大的變化.[1]傳統(tǒng)方式架構(gòu)的數(shù)據(jù)中心一般采用OSPF、BGP等路由協(xié)議多路連接的協(xié)議來增加冗余路徑,通過ECMP進(jìn)行負(fù)載均衡,但實(shí)際運(yùn)用過程中由于不能快速、直接的部署到數(shù)據(jù)中心網(wǎng)絡(luò)上,均衡分布不徹底,多層配置網(wǎng)絡(luò)設(shè)備工作量大等原因?qū)е聜渲g負(fù)載不均衡,網(wǎng)絡(luò)帶寬使用率底等突出問題.[2-5]
軟件定義網(wǎng)絡(luò)(Software Defined Network, SDN)重要的中心思想是將數(shù)據(jù)層和網(wǎng)絡(luò)控制層進(jìn)行分離,然后通過集中可編程的軟件平臺(tái)控制底層設(shè)備,最終靈活實(shí)現(xiàn)網(wǎng)絡(luò)資源按需分布.[6]本文提出利用SDN優(yōu)勢(shì),選擇Ryu作為控制平臺(tái),REST API定義相應(yīng)的模塊來對(duì)網(wǎng)絡(luò)數(shù)據(jù)中心流量的負(fù)載均衡進(jìn)行研究.[7-8]數(shù)據(jù)中心應(yīng)用SDN后,業(yè)務(wù)需求一旦發(fā)生變化,只需要控制平臺(tái)編程定義配置策略,數(shù)據(jù)中心設(shè)備會(huì)自動(dòng)更新運(yùn)行,無(wú)需重新部署網(wǎng)絡(luò)中多個(gè)節(jié)點(diǎn).最后利用仿真模擬平臺(tái)進(jìn)行測(cè)試,結(jié)果表明使用該策略可以有效的提高網(wǎng)絡(luò)流量的利用率,減少網(wǎng)絡(luò)延遲等問題.
SDN即軟件件定義網(wǎng)絡(luò)(Software Defined Network),是互聯(lián)網(wǎng)技術(shù)影響未來十項(xiàng)技術(shù)之一.SDN是一種新型的網(wǎng)絡(luò)架構(gòu),中心思想是將數(shù)據(jù)層和網(wǎng)絡(luò)控制層進(jìn)行分離,然后通過集中可編程的軟件平臺(tái)控制底層設(shè)備,最終靈活實(shí)現(xiàn)網(wǎng)絡(luò)資源按需分布.網(wǎng)絡(luò)中的硬件設(shè)備只是負(fù)責(zé)根據(jù)控制平臺(tái)轉(zhuǎn)發(fā)數(shù)據(jù)包而已,網(wǎng)絡(luò)操作系統(tǒng)以及設(shè)備之間的通訊、更新都通過控制平臺(tái)編程實(shí)現(xiàn).SDN與傳統(tǒng)網(wǎng)絡(luò)對(duì)比如圖1所示.
圖1 SND與傳統(tǒng)網(wǎng)絡(luò)對(duì)比
在SDN網(wǎng)絡(luò)中中有兩個(gè)重要的元素一個(gè)是交換機(jī),一個(gè)是控制平臺(tái),所有的網(wǎng)絡(luò)部署、更新都是通過控制平臺(tái)來編程后完成,網(wǎng)絡(luò)設(shè)備之間沒有任何網(wǎng)絡(luò)協(xié)議,交換機(jī)和控制平臺(tái)進(jìn)行是通過OpenFlow協(xié)議通訊來完成部署.OpenFlow協(xié)議核心思想將原來由交換機(jī)通過協(xié)議轉(zhuǎn)發(fā)的數(shù)據(jù)包,變成由OpenFlow交換機(jī)和控制平臺(tái)分別完成的獨(dú)立過程.OpenFlow交換機(jī)只是通過OpenFlow協(xié)議從控制平臺(tái)接受一個(gè)流表,根據(jù)流表對(duì)應(yīng)項(xiàng)進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),從而實(shí)現(xiàn)數(shù)據(jù)層和網(wǎng)絡(luò)控制層進(jìn)行分離.SDN優(yōu)點(diǎn)可以使得網(wǎng)絡(luò)部署、更新更快捷,降低網(wǎng)絡(luò)組建、升級(jí)成本,同時(shí)SND網(wǎng)絡(luò)開放能力可以更好促進(jìn)網(wǎng)絡(luò)服務(wù)創(chuàng)新和企業(yè)業(yè)務(wù)創(chuàng)新.
數(shù)據(jù)中心網(wǎng)絡(luò)流量主要特點(diǎn)是容量集中、緩存高等,利用SDN技術(shù)建立負(fù)載均衡主要目的是將網(wǎng)絡(luò)中大量的數(shù)據(jù)實(shí)時(shí)分析,同時(shí)根據(jù)策略自動(dòng)的分發(fā)到多臺(tái)設(shè)備進(jìn)行并發(fā)處理,降低響應(yīng)的時(shí)間,提高數(shù)據(jù)中心處理能力.SDN技術(shù)利用控制平臺(tái)配置整個(gè)網(wǎng)絡(luò)策略,不需要增加冗余鏈路和升級(jí)硬件就可以將配置最優(yōu)策略發(fā)布到每個(gè)設(shè)備.
圖2 SND工作流程圖
在SDN中首先要獲取全局網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),是利用Ryu控制器發(fā)送報(bào)文LLDP得到,控制器 Yes-KSP算法計(jì)算最優(yōu)路徑,在利用OpenFlow交換機(jī)、OpenFlow協(xié)議實(shí)時(shí)監(jiān)測(cè)網(wǎng)絡(luò)變化,當(dāng)數(shù)據(jù)中心業(yè)務(wù)出現(xiàn)變動(dòng)更新,控制器自動(dòng)下發(fā)相應(yīng)策略的流表到相應(yīng)交換機(jī),從而實(shí)現(xiàn)網(wǎng)絡(luò)中心流量負(fù)載均衡.流程圖如圖2
SDN的數(shù)據(jù)中心網(wǎng)絡(luò)流量負(fù)載均衡系統(tǒng)主要包括5個(gè)模塊,分別是網(wǎng)絡(luò)拓?fù)涓兄K、網(wǎng)絡(luò)狀態(tài)實(shí)時(shí)監(jiān)測(cè)模塊、k最短路徑計(jì)算模塊、鏈路狀態(tài)評(píng)估模塊、流表分配模塊.網(wǎng)絡(luò)拓?fù)涓兄K主要作用是獲取整個(gè)個(gè)網(wǎng)絡(luò)各個(gè)節(jié)點(diǎn)、鏈路之間的鏈接關(guān)系拓?fù)浣Y(jié)構(gòu);網(wǎng)絡(luò)狀態(tài)實(shí)時(shí)監(jiān)測(cè)模塊作用是監(jiān)測(cè)網(wǎng)絡(luò)帶寬、泛洪、堵塞等參數(shù);k最短路徑計(jì)算模塊主要通過ksp計(jì)算最短路徑;鏈路狀態(tài)評(píng)估模塊對(duì)最短路徑綜合評(píng)估優(yōu)先級(jí);流表分配模塊依照最優(yōu)路徑封裝至OpenFlow交換機(jī),交換機(jī)按對(duì)應(yīng)的流表分配并轉(zhuǎn)發(fā)數(shù)據(jù).
整體架構(gòu)圖如下圖所示.
圖3 SND整體架構(gòu)圖
SDN首先是通過Ryu控制器來學(xué)習(xí)整個(gè)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu), 為異動(dòng)轉(zhuǎn)發(fā)策略奠定基礎(chǔ).本文采用二層鏈路層LLDP協(xié)議將網(wǎng)絡(luò)設(shè)備配置信息封裝在LLDP數(shù)據(jù)包中,Ryu控制器在探測(cè)網(wǎng)絡(luò)主機(jī)、節(jié)點(diǎn)、鏈路狀態(tài)時(shí),會(huì)先LLDP數(shù)據(jù)包中Packet-Out發(fā)送給OpenFlow交換機(jī),各個(gè)OpenFlow交換機(jī)以及鄰居設(shè)備收到數(shù)據(jù)包后,首先對(duì)應(yīng)本設(shè)備流表,在把LLDP數(shù)據(jù)包封裝到Packet-In中發(fā)給Ryu控制器,Ryu控制根據(jù)信息解析后獲取整個(gè)拓?fù)浣Y(jié)構(gòu).獲取后Ryu控制器會(huì)自主學(xué)習(xí)保存整個(gè)網(wǎng)絡(luò)設(shè)備的MAC地址,利用STP生成樹協(xié)議防止二層網(wǎng)絡(luò)因設(shè)備環(huán)路產(chǎn)生廣播風(fēng)暴.
Ryu全局拓?fù)浍@取流程圖如下
圖4 Ryu全局拓?fù)浍@取流程圖
網(wǎng)絡(luò)狀態(tài)主要是通過OpenFlow協(xié)議監(jiān)測(cè)網(wǎng)絡(luò)設(shè)備端口流量變化情況,從而周期性獲取網(wǎng)絡(luò)帶寬流量、延遲等變化情況.流量的計(jì)算是鏈路上行速率和下行速率決定,SDN主要利用端口的最大帶寬減去當(dāng)前帶寬得到剩余帶寬.網(wǎng)絡(luò)延遲是Ryu控制器向OpenFlow交換機(jī)發(fā)送一個(gè)包含時(shí)間節(jié)點(diǎn)的LLDP報(bào)文,交換設(shè)備鄰居之間相互轉(zhuǎn)發(fā),流表中沒有匹配項(xiàng),則發(fā)回Packet-In報(bào)文給Ryu控制器,控制器根據(jù)不同交換機(jī)發(fā)回的數(shù)據(jù)得到延遲參數(shù).網(wǎng)絡(luò)中寬帶利用率以及網(wǎng)絡(luò)延時(shí)是衡量網(wǎng)絡(luò)狀況的重要參照,SDN控制器網(wǎng)絡(luò)監(jiān)測(cè)可以實(shí)時(shí)的獲取網(wǎng)絡(luò)狀況信息,網(wǎng)絡(luò)監(jiān)測(cè)模塊既可以為下一個(gè)鏈路狀況評(píng)估模塊提供相關(guān)的數(shù)據(jù),也能夠幫助流表分配模塊提供決策數(shù)據(jù).
學(xué)習(xí)到全局拓?fù)潢P(guān)系后,數(shù)據(jù)包按單一最短路徑轉(zhuǎn)發(fā),常用的路由算法有Dijkstra(迪杰斯特拉)算法和Floyd-Warshall算法等.但是要負(fù)載均衡在利用單一路由策略來保證性能最優(yōu),同時(shí)也要利用多路徑策略來保證全局負(fù)載均衡.本文通過κ條最短路徑算法來計(jì)算最優(yōu)鏈路負(fù)載均衡路徑.κ最短路徑算法即KSP算法(Top-k-shortest paths),主要由改進(jìn)智能算法,刪除路徑算法,偏離路徑算法,限定無(wú)環(huán)算法等,本文利用Yen算法來計(jì)算κ最短路徑.算法描述如下:
先用Dijkstra算法求出最短路徑κ=1;
這條path中的任意兩節(jié)點(diǎn)構(gòu)成的邊都可以作為偏離邊,此邊的開始節(jié)點(diǎn)為偏離節(jié)點(diǎn)
然后依次將這條path上的偏離邊去掉求最短路徑.去最短的為次短路徑,κ=2;
依次循環(huán),κ求出
function YenKSP(Graph, source, sink, K):
//Determine the shortest path from the source to the sink.
A[0] = Dijkstra(Graph, source, sink);
// Initialize the heap to store the potentialkth shortest path.
B = [];
for k from 1 to K:
//The spur node ranges from the first node to the next to last node in the previous k-shortest path.
for i from 0 to size(A[k-1])-1:
// Spur node is retrieved from the previous k-shortest path, k-1.
spurNode = A[k-1].node(i);
//The sequence of nodes from the source to the spur node of the previous k-shortest path.
rootPath = A[k-1].nodes(0, i);
for each path p in A:
if rootPath == p.nodes(0, i):
// Remove the links that are part of the previous shortest paths which share the same root path.
remove p.edge(i, i + 1) from Graph;
for each node rootPathNode in rootPath except spurNode:
remove rootPathNode from Graph;
//Calculate the spur path from the spur node to the sink.
spurPath = Dijkstra(Graph, spurNode, sink);
// Entire path is made up of the root path and spur path.
totalPath = rootPath + spurPath;
//Add the potential k-shortest path to the heap.
B.append(totalPath);
//Add back the edges and nodes that were removed from the graph.
restore edges to Graph;
restore nodes in rootPath to Graph;
if B is empty:
//This handles the case of there being no spur paths, or no spur paths left.
//This could happen if the spur paths have already been exhausted (added to A),
// or there are no spur paths at all - such as when both the source and sink vertices
// lie along a "dead end".
break;
// Sort the potential k-shortest paths by cost.
B.sort();
//Add the lowest cost path becomes the k-shortest path.
A[k] =B[0];
B.pop();
κ最短路徑算法算出路徑后,需要進(jìn)行綜合測(cè)評(píng)并確定優(yōu)先級(jí)別為流表分配提供策略.路徑優(yōu)先級(jí)主要是路徑跳數(shù)和設(shè)備的流量負(fù)載情況,Ryu控制器進(jìn)行全局拓?fù)涞膶W(xué)習(xí)以及網(wǎng)絡(luò)狀態(tài)實(shí)時(shí)監(jiān)測(cè)提供相應(yīng)的參數(shù),設(shè)備的負(fù)載主要是綜合報(bào)文、字節(jié)數(shù)來分析,端口的轉(zhuǎn)發(fā)率來體現(xiàn)鏈路的負(fù)載情況.不同路徑的評(píng)估,矩陣關(guān)系如下:
歸一變化如下:
rp=1.0/eh
rp=1.0/log(p+0.1)
rp=1.0/log(b+0.1)
rp=1.0/e-r/50.0
設(shè)置權(quán)重向量Q=(a1,a2,…an),a1+a2+…an=1.
評(píng)估結(jié)果可以把Q和R合并計(jì)算
G=(g1,g2,…gn)
最后流表分配根據(jù)實(shí)時(shí)最優(yōu)路由進(jìn)行封裝發(fā)送給OpenFlow交換機(jī),OpenFlow交換機(jī)通過OpenFlow協(xié)議全局同步參數(shù).鏈路上的數(shù)據(jù)包根據(jù)實(shí)時(shí)網(wǎng)絡(luò)情況選擇最優(yōu)路徑發(fā)送數(shù)據(jù)包.
實(shí)驗(yàn)平臺(tái)采用虛擬化網(wǎng)絡(luò)技術(shù)的Mininet,Mininet支持 OpenFlow、OpenvSwith 等各種協(xié)議,方便的模擬一個(gè)完整的網(wǎng)絡(luò)主機(jī)、鏈接和交換機(jī)等網(wǎng)絡(luò)設(shè)備.基于兩個(gè)數(shù)據(jù)中心的網(wǎng)絡(luò)拓?fù)?,如圖5所示
圖5 Mininet數(shù)據(jù)中心的網(wǎng)絡(luò)拓?fù)?/p>
通過Mininet模擬25臺(tái)交換設(shè)備以及20臺(tái)主機(jī)的胖樹網(wǎng)絡(luò),并連接控制器Ryu后,指定源主機(jī)A和目標(biāo)主機(jī)B之間發(fā)送廣播UDP,中間間隔5S,大小128kb,間隔1m收集一次數(shù)據(jù).代碼截圖如下:
圖6 代碼截圖
通過對(duì)20臺(tái)主機(jī)發(fā)送的數(shù)據(jù)流分析,得到的實(shí)驗(yàn)結(jié)果如下:
圖7 數(shù)據(jù)流分析表
從圖中可看到本文采用的多路徑負(fù)載均衡方法,在網(wǎng)絡(luò)中心負(fù)載較小時(shí)網(wǎng)絡(luò)流量影響不明顯,在網(wǎng)絡(luò)中心負(fù)載較大時(shí),負(fù)載分擔(dān)路徑增多,降低了網(wǎng)絡(luò)延時(shí),有效的緩解了數(shù)據(jù)中心的壓力,增強(qiáng)了網(wǎng)絡(luò)利用率.
針對(duì)數(shù)據(jù)中心網(wǎng)絡(luò)流量負(fù)載均衡的問題,提出了基于SDN的多路徑負(fù)載均衡的方法來解決.構(gòu)建了整體架構(gòu),并詳細(xì)解釋了各個(gè)功能模塊.最后通過Mininet仿真實(shí)驗(yàn)結(jié)果表明,利用SDN控制與轉(zhuǎn)發(fā)的理念,能有效的降低網(wǎng)絡(luò)的時(shí)延,提高網(wǎng)絡(luò)利用率,效果滿意.