白 雪,楊桂芹
(蘭州交通大學 電子與信息工程學院,蘭州 730070)
龐大的SDN數(shù)據(jù)中心網(wǎng)絡中,存在兩種數(shù)據(jù)流量:一種為生存時間短的老鼠流,攜帶信息量小;另一種為生存時間長的大象流,攜帶信息量大[1],當有大量的大象流出現(xiàn)在數(shù)據(jù)中心網(wǎng)絡中會產(chǎn)生擁塞等現(xiàn)象,對網(wǎng)絡的性能產(chǎn)生影響,因此對于大象流的識別以及大象流的路由轉發(fā)至關重要,如果對大象流不采用適當?shù)穆酚刹呗裕瑢е戮W(wǎng)絡負載不均衡,所以對于出現(xiàn)的每一條大象流,均需要精確檢測,并將檢測出的大象流運用適當?shù)霓D發(fā)策略,使流的傳輸不影響網(wǎng)絡正常運營.在數(shù)據(jù)中心網(wǎng)絡中,最被廣泛應用的負載均衡算法為ECMP(equal-cost-multi-path)[2],其核心是將不同的數(shù)據(jù)流通過哈希算法隨機映射到一條可以被選擇的最短路徑上,但在ECMP算法映射時沒有考慮當前網(wǎng)絡中鏈路的實時負載情況,是一種靜態(tài)負載均衡方式[3],因此會造成網(wǎng)絡發(fā)生擁塞,不能動態(tài)協(xié)調全局網(wǎng)絡及實現(xiàn)全局網(wǎng)絡的負載均衡.
本文針對以上數(shù)據(jù)中心網(wǎng)絡出現(xiàn)的問題,提出一種基于SDN的數(shù)據(jù)中心網(wǎng)絡大象流負載均衡策略,在大象流識別第一階段通過設定一個自適應動態(tài)接受數(shù)據(jù)包閾值來判定可疑大象流;第二階段根據(jù)流的持續(xù)時間,判定真實大象流;最后設計整體負載均衡框架,將大象流檢測階段嵌入到整體負載均衡框架中,實現(xiàn)網(wǎng)絡的動態(tài)負載均衡,以提高網(wǎng)絡的傳輸性能.
通過鏈路層發(fā)現(xiàn)協(xié)議(link layer discovery protocol,簡稱LLDP)識別全局網(wǎng)絡拓撲[4],在交換機與控制器連接成功之后,Ryu控制器通過發(fā)送LLDP報文與交換機之間進行信息交換,當交換機收到發(fā)來的LLDP報文消息時,交換機會向控制器發(fā)送相應的端口信息,此時Ryu庫中的鏈路層發(fā)現(xiàn)協(xié)議模塊收集到交換機發(fā)來的端口消息,并對端口信息進行匯總,繪制整體的網(wǎng)絡拓撲結構,若網(wǎng)絡拓撲發(fā)生變化,則需要不斷更新控制器中拓撲發(fā)現(xiàn)的收集信息,因此交換機需要周期的向網(wǎng)絡發(fā)送LLDP報文協(xié)議,當網(wǎng)絡發(fā)生變化的時候,第一時間對拓撲進行感知、更新,實現(xiàn)此階段的關鍵模塊在Ryu控制器下的topology模塊,該模塊文件下的switches.py文件主要負責交換機的監(jiān)測部分,目錄下的dumper.py文件負責調用switches.py文件的監(jiān)測內(nèi)容,并傳遞到控制器進行分析操作.
通過sFlow檢測網(wǎng)絡狀態(tài),sFlow由sFlow Agent和sFlow Collector組成,兩部分協(xié)同工作共同實現(xiàn)網(wǎng)絡狀態(tài)的收集,主要通過采樣的方式統(tǒng)計數(shù)據(jù)流中數(shù)據(jù)包的數(shù)量,能夠很好的減小網(wǎng)絡開銷.此處需要用到基礎設施Mininet,其中內(nèi)嵌有sFlow Agent模塊,需在開啟網(wǎng)絡拓撲之后進行端口配置[5],并在終端中開啟sFlow Agent模塊,與sFlow Collector端口6343連接,將sFlow Agent中獲取到的接口統(tǒng)計信息和數(shù)據(jù)信息封裝成sFlow報文,發(fā)送給sFlow Collector上進行分析,sFlow Collector負責對sFlow報文分析、匯總、生成流量報告,最后將收集以及統(tǒng)計完成的網(wǎng)絡狀態(tài)信息上傳給控制器進行其他操作.
規(guī)定若流量的比例超過總流量θ(θ=0.1%)的數(shù)據(jù)流,將超過的數(shù)據(jù)流定義為大象流.假定在時間T內(nèi)檢測到的流量為t,用N表示接收到的數(shù)據(jù)包數(shù)量,用pi表示流i接收到的數(shù)據(jù)包,用ti表示流i的字節(jié)大小;若數(shù)據(jù)流i的流量大于所設定的總流量的數(shù)據(jù)流比重θ,則判斷當ti≥t·θ時數(shù)據(jù)流i為可疑大象流.但僅根據(jù)流量大小判定大象流不能精確的檢測出大象流,因此還需使用sFlow對網(wǎng)絡的數(shù)據(jù)流進行檢測,利用隨機采樣數(shù)據(jù)包的方式對網(wǎng)絡數(shù)據(jù)流實時檢測,若按照預先設定好的數(shù)據(jù)包閾值PT進行大象流的檢測,可能會出現(xiàn)錯誤的檢測,即可能將老鼠流誤認為是大象流,出現(xiàn)的這種錯誤識別稱之為誤檢率[6],簡稱FPR(false positive rate),見公式(1);若在檢測大象流的過程中存在漏檢的大象流,這種漏檢的概率稱之為漏檢率,簡稱FNR(false negative rate),見公式(2),且誤檢率與漏檢率的選取直接影響大象流的檢測效率.
FPRi=P[pi≥PT|ti (1) FNRi=P[pi (2) 在文獻[7]中,提到一種兩階段自適應大象流檢測系統(tǒng).在檢測的第一階段,若發(fā)現(xiàn)一個流的數(shù)據(jù)包數(shù)量超過設定的閾值PT,則將該流暫定為可疑大象流,在此階段檢測過程中可能將老鼠流誤檢為大象流,也可能存在部分漏檢的大象流,因此導致第一階段得到自適應的大象流檢測系統(tǒng)發(fā)生漏檢的概率較高,如若將大量誤檢的大象流按老鼠流的方式轉發(fā),會致使網(wǎng)絡發(fā)生堵塞,所以在第一階段大象流檢測方法中需要嚴格控制大象流漏檢率的出現(xiàn),將誤檢率與漏檢率綜合考慮,而不僅僅追求最小的平均誤檢率,因此可總結出數(shù)據(jù)包數(shù)量的閾值PT如式(3)所示. (3) 式中:ε的值為根據(jù)網(wǎng)絡實時狀態(tài)所設置的流量監(jiān)測值.SDN數(shù)據(jù)中心網(wǎng)絡的流量體系規(guī)模大、種類多、具有廣泛性,在文獻[8]中提到在數(shù)據(jù)中心網(wǎng)絡中流量的分布呈雙峰分布,其可定義為 (4) 其中:μ為數(shù)據(jù)流的平均長度;σ為數(shù)據(jù)流的長度標準差.由于老鼠流與大象流均服從雙峰分布,根據(jù)這一特點可得到老鼠流與大象流的流量密度分布如圖1所示,左邊曲線為老鼠流,右邊曲線為大象流,左邊陰影部分的面積為FNR,右邊陰影部分的面積為FPR,因此可得到FNR和FPR計算公式如下: (5) (6) 結合式(3)和式(4),可得最終的優(yōu)化閾值PT,其計算公式為 (7) 其中:μe表示漏檢率最大時流的平均長度;σe表示漏檢率的長度標準差. 設網(wǎng)絡數(shù)據(jù)包的字節(jié)數(shù)為PB(packet byte),若PB的值大于設定的字節(jié)數(shù)閾值時,則認定該流可能為真實大象流,當字節(jié)數(shù)PB的值小于閾值時,引出參數(shù)count,用來計數(shù)PB有幾次沒有超過規(guī)定的閾值.不斷檢測PB的值,若PB字節(jié)數(shù)沒有超過閾值,即可能存在變質可疑,利用count值進行計數(shù),若達到N時則認定第一階段檢測的大象流變質.具體的算法步驟如下: 1) 對第一階段識別出的可疑大象流進行判別,第一步需要統(tǒng)計出以上可疑大象流的字節(jié)數(shù)PB,計算某一時刻字節(jié)數(shù)公式如式(8)所示.設定一個初始化變量count,用于記錄字節(jié)數(shù)小于一定閾值時的次數(shù). PBt=BCt-BCt-1. (8) 式中:BC表示計數(shù)器統(tǒng)計的流累計字節(jié)數(shù);BCt表示在t時刻接受的字節(jié)數(shù);BCt-1表示在t-1時刻接收的字節(jié)數(shù);PBt表示在t時刻單位時間內(nèi)接收的數(shù)據(jù)包字節(jié)數(shù). 2) 將計算出的PBt值與設定的平均字節(jié)數(shù)閾值T進行比較,其中T的值設定為超過總字節(jié)數(shù)的0.1%,若PBt≤T,則此時該流可能變質,將count值加1,進入步驟3);若PBt>T,則該大象流無變質現(xiàn)象[9],重置count值為0,重新計算PBt值,返回步驟1)繼續(xù)進行監(jiān)測. 3) 將得到count的值與設定的最大容忍次數(shù)N對比,若count SDN控制器接收來自網(wǎng)絡的數(shù)據(jù)流,利用LLDP獲取網(wǎng)絡拓撲結構,并利用sFlow檢測網(wǎng)絡狀態(tài),對接收的數(shù)據(jù)流進行分析.將上兩節(jié)所提到的大象流檢測模塊嵌入到整體的負載均衡框架中[10-11],若檢測為真實大象流,則進行大象流調度算法;若為老鼠流,則用常規(guī)的ECMP算法,減少控制器開銷.總的負載均衡流程如圖3所示. 利用兩階段大象流識別模塊識別出大象流,進入路徑?jīng)Q策模塊.利用Yen-KSP算法從可行路徑中計算k條最優(yōu)路徑作為備選路徑,根據(jù)當前的網(wǎng)絡狀態(tài)計算出最佳轉發(fā)路徑,轉發(fā)大象流;不斷檢測網(wǎng)絡狀態(tài),檢測網(wǎng)絡擁塞狀態(tài)[12].若出現(xiàn)網(wǎng)絡擁塞,則在k條路徑中選取次優(yōu)先級最佳轉發(fā)路徑,轉發(fā)數(shù)據(jù)流;而對于識別出的老鼠流,老鼠流流量少、數(shù)量多,并對實時性要求較高.因此本文將檢測出的老鼠流用靜態(tài)ECMP負載均衡算法,避免持續(xù)調用控制器帶來額外負荷,提高網(wǎng)絡的傳輸速率;并在OpenFlow交換機中根據(jù)接收到的數(shù)據(jù)流進行分析,查看路由表中是否存在該條路徑的轉發(fā)路徑.若存在則直接進行轉發(fā),不需向控制器發(fā)送請求消息;若在路徑表中查詢不到轉發(fā)路徑,則OpenFlow交換機需向控制器發(fā)送Packet-in消息[13],請求控制器來尋找最短路徑,然后調用控制器中的負載均衡算法,對發(fā)送來的流進行計算;計算完畢后,控制器發(fā)送Packet-out下發(fā)消息給OpenFlow交換機,OpenFlow交換機再進行流表的安裝工作[14];安裝完畢后,將安裝的流表規(guī)則下發(fā)到Mininet基礎設施層進行流的轉發(fā),完成數(shù)據(jù)傳輸;與此同時,實時檢測網(wǎng)絡當前的狀態(tài),并不斷更新流表,根據(jù)網(wǎng)絡實時狀態(tài)調用不同模塊進行負載均衡. 在ubuntu系統(tǒng)環(huán)境下利用Ryu控制器,以Mininet為基礎設置層搭建胖樹拓撲圖(見圖4),完成大象流負載均衡的搭建以及驗證工作[15].同時,測量網(wǎng)絡的傳輸時延以及鏈路利用率,將SDN網(wǎng)絡中基于大象流識別的網(wǎng)絡負載均衡策略與ECMP算法、Hedera算法進行對比. 網(wǎng)絡的傳輸時延是指網(wǎng)絡在傳輸過程中數(shù)據(jù)包的傳輸時間,即發(fā)送的數(shù)據(jù)報文從源主機到目的主機之間的傳輸時間.網(wǎng)絡的傳輸時延越小,則說明網(wǎng)絡傳輸性能越強.本文通過利用Mininet中的pingall指令來獲取路徑的傳輸時延,然后進行累加統(tǒng)計,計算出胖樹網(wǎng)絡中各路徑的傳輸時延.計算平均傳輸時延的公式如式(9)所示. (9) 通過不同程度增加流量負載的方式觀察各條路徑的時延,并在網(wǎng)絡基本穩(wěn)定時計算平均傳輸時延,測量時延結果如圖5所示. 從圖5中可以看出,網(wǎng)絡的傳輸時延隨負載的增加而增加.當流量負載低于300 Mbit/s時,三種算法時延相差不大,但當負載超過300 Mbit/s之后,三種算法的平均時延的上升趨勢都較為明顯.是因為隨著流量負載不斷的增加,網(wǎng)絡鏈路的負載會出現(xiàn)擁塞等情況,因此在流量傳輸過程中會出現(xiàn)網(wǎng)絡時延增加的現(xiàn)象,但從整體來看隨著負載的增加,提出的大象流負載均衡算法更能實現(xiàn)鏈路的負載分擔,有效地降低了網(wǎng)絡中的平均時延. 網(wǎng)絡中鏈路的平均利用率是指各傳輸鏈路數(shù)據(jù)流實際帶寬與傳輸鏈路最大可用帶寬的比值[16].鏈路的平均利用率越大,表明網(wǎng)絡傳輸能力越強.獲取實際端口占用帶寬的方法通過統(tǒng)計交換機的端口信息來實現(xiàn),并且將統(tǒng)計得到的占用帶寬與鏈路最大可用帶寬進行比較,即可得到網(wǎng)絡鏈路的利用率.將得到的帶寬進行累加求得平均鏈路利用率,如公式(10)所示. (10) 依然根據(jù)流量負載檢測網(wǎng)絡中的鏈路平均利用率,然后計算出平均的鏈路利用率,如圖6所示. 從圖6中可以看出,當流量負載低于400 Mbit/s時,三種算法的平均鏈路利用率十分相似,并且變化不大,這是由于低于400 Mbit/s時鏈路中剩余的帶寬較大,并有足夠的帶寬傳輸數(shù)據(jù)流,因此網(wǎng)絡中鏈路很少會出現(xiàn)擁塞;但當流量負載處于400 Mbit/s~900 Mbit/s之間時,三種算法的平均鏈路利用率均處于上升趨勢,并且上升趨勢較為明顯,此時的平均鏈路利用率顯出優(yōu)勢來.可看出,提出的算法在一定程度上較ECMP算法和Hedera算法更為提高了平均鏈路利用率;當流量負載超過900 Mbit/s后,三種算法的平均鏈路利用率變化趨于平穩(wěn)并稍有下降趨勢.但從整體來看,大象流負載均衡算法較其他兩種算法降低了產(chǎn)生擁塞的概率,增加了帶寬利用率. 針對目前數(shù)據(jù)中心網(wǎng)絡存在的大象流識別效率低,網(wǎng)絡擁塞以及負載不均衡等現(xiàn)象,提出一種大象流負載均衡策略;在大象流的檢測算法中重點突出大象流漏檢率的檢測,第二階段通過設定數(shù)據(jù)包閾值對第一階段的大象流繼續(xù)進行檢測,進一步提高大象流的檢測效率,并構建整體框架,調用不同模塊實現(xiàn)整體網(wǎng)絡的負載均衡;搭建仿真平臺,使用網(wǎng)絡時延和鏈路利用率兩個指標來驗證提出的大象流負載均衡策略.實驗結果表明,較之前常用的ECMP算法和Hedera算法相比,提出的大象流負載均衡策略可以實時監(jiān)控網(wǎng)絡狀態(tài),將網(wǎng)絡實時狀態(tài)傳輸?shù)娇刂破鬟M行處理,通過實驗對比驗證了提出的大象流負載均衡策略減少了時間延遲,提高了大象流的識別效率,并且提高了鏈路利用率,為數(shù)據(jù)中心網(wǎng)絡的傳輸提供一個更好的傳輸策略.

1.4 大象流第二階段識別
1.5 大象流負載均衡整體流程
2 實驗結果分析
3 結論