蔣暕青 洪梅 李澤軍
摘要:SDN控制器是SDN網(wǎng)絡(luò)的核心,是決定SDN網(wǎng)絡(luò)效率的關(guān)鍵因素之一。SDN控制器管理網(wǎng)絡(luò)的主要途徑是處理交換設(shè)備發(fā)來的各種消息,因此如何高效的處理消息就成為了設(shè)計(jì)SDN控制器的關(guān)鍵。基于SDN網(wǎng)絡(luò)中消息的特征,該文設(shè)計(jì)了一種基于隊(duì)列樹的高效消息處理機(jī)制: 通過對(duì)不同類型消息的分類處理實(shí)現(xiàn)了控制器對(duì)關(guān)鍵消息的及時(shí)響應(yīng);通過對(duì)相似消息的歸并處理大大降低了控制器的工作量;通過可調(diào)整的線程池實(shí)現(xiàn)了控制器對(duì)不同消息的自適應(yīng)處理。
關(guān)鍵詞:軟件定義網(wǎng)絡(luò);消息處理;隊(duì)列集
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)30-0225-03
A Queue Set based Efficient Message Processing Mechanism for SDN Controller
JIANG Jian-qing, HONG Mei, LI Ze-jun
(National Engineering Research Center for Broadband Networks & Applications, Shanghai 200336, China)
Abstract: SDN Controller is the Core of a SDN network, which mainly determines the efficiency of the network. Since the Controller manages a SDN network mainly by processing the messages of the switches in the network, how to efficiently processing the messages becomes the critical point in designing a SDN Controller. According to the characteristics of messages in the SDN networks, the paper proposes an efficient message processing mechanism based on queue tree, which mainly consist of three methods: message categorization to insure the timely processing for important messages; message merging to reduce the workloads of Controllers; and adjustable thread pool to achieve the adaptivity in processing different messages in various situations.
Key words: SDN; Message Processing; Queue Tree
1 引言
2020年全球近三分之二的總工作負(fù)荷將在云端處理,數(shù)據(jù)中心(Data Center, DC)將成為大部分互聯(lián)網(wǎng)流量的源頭或終點(diǎn)。而在數(shù)據(jù)中心產(chǎn)生的所有流量中,內(nèi)部流量占數(shù)據(jù)中心總流量的76%,主要是存儲(chǔ)和虛擬機(jī)之間的數(shù)據(jù)交換等活動(dòng)。因此,未來的互聯(lián)網(wǎng)將是以云計(jì)算數(shù)據(jù)中心為核心的網(wǎng)絡(luò)。在現(xiàn)有的數(shù)據(jù)中心中,各業(yè)務(wù)之間相互獨(dú)立占用資源且沒有資源移動(dòng)性要求,因此各業(yè)務(wù)網(wǎng)絡(luò)采用物理方式隔離,自成一體。這種方式構(gòu)建的網(wǎng)絡(luò)擴(kuò)展性非常有限,只能縱向替換而不能橫向添地進(jìn)行加擴(kuò)展,造成系統(tǒng)性能存在瓶頸。往往為了滿足1%的峰值時(shí)刻的流量需求,導(dǎo)致99%的機(jī)器必須參與工作,且每臺(tái)機(jī)器的工作效率往往低于20%。
傳統(tǒng)互聯(lián)網(wǎng)由于存在著復(fù)雜的交換機(jī)、終端、路由器、以及其他設(shè)備,在這些網(wǎng)絡(luò)設(shè)備中使用著大量封閉、專有的內(nèi)部接口以及協(xié)議;所以在傳統(tǒng)網(wǎng)絡(luò)中的流量控制普遍效率低下而且多采用“告警-響應(yīng)”的方式,網(wǎng)絡(luò)服務(wù)在現(xiàn)有的網(wǎng)絡(luò)管理方式下做出響應(yīng)前,很有可能已經(jīng)受到了影響。傳統(tǒng)網(wǎng)絡(luò)中因?yàn)榇嬖诖罅坎煌O(shè)備,使用不同協(xié)議,所以無法對(duì)所有的網(wǎng)絡(luò)設(shè)備進(jìn)行有效的統(tǒng)一控制,而且網(wǎng)絡(luò)維護(hù)成本居高不下,網(wǎng)絡(luò)管理需要大量人工配置。為了打破這種局面,在2008年Nick McKeown 教授等人提出了軟件定義網(wǎng)絡(luò)[1-2](Software Defined Network, SDN )的概念。軟件定義網(wǎng)絡(luò)是把傳統(tǒng)網(wǎng)絡(luò)設(shè)備緊密耦合的網(wǎng)絡(luò)架構(gòu)分拆為應(yīng)用、控制、數(shù)據(jù)轉(zhuǎn)發(fā)3層分離的體系架構(gòu)。如圖 1,其核心技術(shù)OpenFlow通過實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備的控制權(quán)和轉(zhuǎn)發(fā)權(quán)的相互獨(dú)立,從而靈活、方便的控制數(shù)據(jù)包的轉(zhuǎn)發(fā),提供了一種可編程的網(wǎng)絡(luò)管理模式。在軟件定義網(wǎng)絡(luò)中,控制器通過南向接口(OpenFlow協(xié)議)獲取底層網(wǎng)絡(luò)設(shè)備信息,進(jìn)行統(tǒng)一部署、集中管理以及靈活控制,從而解決了分散網(wǎng)絡(luò)設(shè)備的管理控制問題。同時(shí),控制器提供了可編程擴(kuò)展的北向接口,按不同需求設(shè)計(jì)的功能應(yīng)用軟件可以直接運(yùn)行在控制器上,利用控制器對(duì)全局網(wǎng)絡(luò)設(shè)備進(jìn)行統(tǒng)一更新和功能升級(jí)。
控制層的功能通過集中式的SDN控制器(Controller)來實(shí)現(xiàn)。SDN控制器包含兩層開放的接口:其中北向接口為可編程接口,面向應(yīng)用層;南向接口通過OpenFlow等協(xié)議與轉(zhuǎn)發(fā)層進(jìn)行交互。應(yīng)用層由軟件形態(tài)的應(yīng)用程序構(gòu)成,網(wǎng)絡(luò)管理員或系統(tǒng)開發(fā)者只需要關(guān)注網(wǎng)絡(luò)應(yīng)用的自身邏輯,并不需要關(guān)注底層更多的實(shí)現(xiàn)細(xì)節(jié)??刂茖又械目刂破髦饕鶕?jù)具體應(yīng)用需求對(duì)轉(zhuǎn)發(fā)層的各種網(wǎng)絡(luò)設(shè)備進(jìn)行各種配置和管理。通過對(duì)轉(zhuǎn)發(fā)表的集中管理,控制器能夠?qū)崟r(shí)控制網(wǎng)絡(luò)各鏈路中流量的大小和走向,進(jìn)而能夠?qū)崿F(xiàn)對(duì)網(wǎng)絡(luò)帶寬資源和網(wǎng)絡(luò)功能元件虛擬化管理,從粗放的網(wǎng)絡(luò)模塊增加轉(zhuǎn)變?yōu)榧?xì)粒度的資源池?cái)U(kuò)充,使得網(wǎng)絡(luò)資源利用率都得以大幅提升。而轉(zhuǎn)發(fā)層一般只需基于控制層下發(fā)的指令和策略對(duì)數(shù)據(jù)分組進(jìn)行轉(zhuǎn)發(fā)即可。通過這種方式,網(wǎng)絡(luò)在不需要對(duì)轉(zhuǎn)發(fā)層進(jìn)行硬件更改或替換的情況下,便可靈活地對(duì)新業(yè)務(wù)或新協(xié)議進(jìn)行適配,推進(jìn)了網(wǎng)絡(luò)新技術(shù)和新協(xié)議的實(shí)現(xiàn)和部署,提高了網(wǎng)絡(luò)的靈活性和可操作性。SDN顛覆了現(xiàn)有網(wǎng)絡(luò)架構(gòu),它使得網(wǎng)絡(luò)從一個(gè)垂直集成、封閉的狀態(tài)演變成為水平集成、開放、支持快速創(chuàng)新的生態(tài)系統(tǒng)。自2009年業(yè)內(nèi)第一次提出相關(guān)概念以來,SDN就引起了業(yè)界的巨大關(guān)注,成為研究熱點(diǎn)。
SDN控制器雖能大幅提升網(wǎng)絡(luò)資源的利用率,但隨著數(shù)據(jù)中心規(guī)模的擴(kuò)大,SDN控制器仍面臨著一個(gè)主要問題:交換機(jī)和用戶主機(jī)數(shù)目的增長(zhǎng),使得每個(gè)交換機(jī)需存儲(chǔ)的流表內(nèi)容也在相應(yīng)增加(理論上每臺(tái)交換機(jī)上的流表最多需覆蓋到網(wǎng)絡(luò)中的所有主機(jī)),這不僅需要每臺(tái)交換機(jī)有更大的存儲(chǔ)容量和更快的查詢速度,也對(duì)控制器的工作效率提出了更高的要求。盡管當(dāng)前已有若干SDN控制器被相繼提出,但由于受制于性能和可擴(kuò)展性等,它們所能管理的網(wǎng)絡(luò)規(guī)模還有些,尚不具備商業(yè)化運(yùn)營(yíng)的能力。因此,隨著大數(shù)據(jù)浪潮的到來,我們迫切需要可面向云計(jì)算數(shù)據(jù)中心的高性能SDN控制器。SDN控制器管理網(wǎng)絡(luò)的主要途徑是處理交換設(shè)備發(fā)來的各種消息,因此如何高效的處理消息就成為了設(shè)計(jì)SDN控制器的關(guān)鍵?;赟DN網(wǎng)絡(luò)中消息的特征,本文設(shè)計(jì)了一種基于隊(duì)列樹的高效消息處理機(jī)制: 通過對(duì)不同類型消息的分類處理實(shí)現(xiàn)了控制器對(duì)關(guān)鍵消息的及時(shí)響應(yīng);通過對(duì)相似消息的歸并處理大大降低了控制器的工作量;通過可調(diào)整的線程池實(shí)現(xiàn)了控制器對(duì)不同消息的自適應(yīng)處理。
2 研究現(xiàn)狀
隨著終端計(jì)算處理能力的提高、網(wǎng)絡(luò)傳輸能力的擴(kuò)大,網(wǎng)絡(luò)所承載的信息急劇膨脹,互聯(lián)網(wǎng)不再是單純以通信為目的的網(wǎng)絡(luò),而是更多地朝著滿足人們獲取信息需求的方向發(fā)展,成為一個(gè)信息承載和分發(fā)的平臺(tái)。由于人們對(duì)信息獲取方式(有線、移動(dòng))、信息類型 (數(shù)據(jù)、話音、視頻)、信息質(zhì)量、信息安全等呈現(xiàn)多元化的需求,所以互聯(lián)網(wǎng)為了適應(yīng)和滿足各類需求不斷地引入大量的控制協(xié)議,形成了一個(gè)龐大的控制平面。這些控制協(xié)議從設(shè)計(jì)上依附于特定的轉(zhuǎn)發(fā)協(xié)議,而且從實(shí)現(xiàn)技術(shù)上看,控制平面與轉(zhuǎn)發(fā)平面都運(yùn)行在網(wǎng)絡(luò)設(shè)備中,給網(wǎng)絡(luò)功能的擴(kuò)展和網(wǎng)絡(luò)的管理帶來了巨大的挑戰(zhàn),傳統(tǒng)網(wǎng)絡(luò)架構(gòu)越來越不能滿足當(dāng)今企業(yè)、運(yùn)營(yíng)商以及用戶的需求。
基于這種背景,SDN軟件定義的網(wǎng)絡(luò)被提出并作為軟件定義數(shù)據(jù)中心的重要一部分。SDN(軟件定義網(wǎng)絡(luò))是一種新型的網(wǎng)絡(luò)架構(gòu),它的設(shè)計(jì)理念是將網(wǎng)絡(luò)的控制平面與數(shù)據(jù)轉(zhuǎn)發(fā)平面進(jìn)行分離,支持集中化的網(wǎng)絡(luò)狀態(tài)控制,實(shí)現(xiàn)底層網(wǎng)絡(luò)設(shè)施對(duì)上層應(yīng)用的透明。SDN具有靈活的編程能力,使得網(wǎng)絡(luò)的自動(dòng)化管理和控制能力獲得空前的提升,能夠有效地解決當(dāng)前網(wǎng)絡(luò)所面臨的資源規(guī)模擴(kuò)展受限,組網(wǎng)靈活性差,難以快速滿足業(yè)務(wù)需求等問題。軟件定義網(wǎng)絡(luò)是一種新型網(wǎng)絡(luò)創(chuàng)新架構(gòu),其核心技術(shù)通過將網(wǎng)絡(luò)設(shè)備控制面與數(shù)據(jù)面分離開來,通過軟件程序靈活地配置網(wǎng)絡(luò)功能,使得網(wǎng)絡(luò)的自動(dòng)化管理和控制能力得到空前的提升,從而實(shí)現(xiàn)了網(wǎng)絡(luò)流量的靈活控制,為核心網(wǎng)絡(luò)及應(yīng)用的創(chuàng)新提供了良好的平臺(tái),能有效解決當(dāng)前網(wǎng)絡(luò)系統(tǒng)所面臨的資源規(guī)模擴(kuò)展受限、組網(wǎng)靈活性差、 難以快速滿足業(yè)務(wù)需求等問題,便于網(wǎng)絡(luò)升級(jí)和適應(yīng)各種新型業(yè)務(wù)的需求。SDN控制器負(fù)責(zé)整個(gè)網(wǎng)絡(luò)的控制平面,承接物理網(wǎng)絡(luò)和上層應(yīng)用。目前市場(chǎng)上廠商的、開源的控制器大大小小有幾十種,但是這些控制器的消息隊(duì)列不可控,不夠靈活,擴(kuò)展性不夠好。現(xiàn)有的大部分SDN控制器的解決方案通常都是采用固定的消息隊(duì)列模式,隊(duì)列模式不可調(diào)整,不能對(duì)某個(gè)單獨(dú)消息做特殊隊(duì)列安排。
鑒于此,如何找到一種更好的SDN控制器消息隊(duì)列管理方案就成了本領(lǐng)域技術(shù)人員亟待解決的問題。
3 基于隊(duì)列樹的SDN控制器高效消息處理機(jī)制
3.1 SDN控制器消息特征
根據(jù)OpenFlow協(xié)議[3],SDN控制器需要處理的消息主要分為以下幾類:
1) 拓?fù)渥兓嚓P(guān)消息:例如交換機(jī)的上線下線、交換機(jī)的端口變化、鏈路變化、拓?fù)浒l(fā)現(xiàn)LLDP消息等;
2) 主機(jī)通訊相關(guān)信息:例如ARP消息、IP消息、DHCP消息等;
3) 網(wǎng)絡(luò)心跳和流量監(jiān)控等消息:主要是OpenFlow協(xié)議中的Echo消息和針對(duì)交換機(jī)、端口或流表的流量統(tǒng)計(jì)數(shù)據(jù)。
上述三類消息的特征和重要性都有著很大的區(qū)別。第一類消息的數(shù)量最小,重要性卻最大,需要控制器及時(shí)的做出相應(yīng),否則會(huì)影響整個(gè)網(wǎng)絡(luò)的通信。第二類消息的數(shù)量會(huì)比較多,網(wǎng)絡(luò)中的每個(gè)主機(jī)的通信行為都會(huì)導(dǎo)致控制器收到相應(yīng)的消息。若某個(gè)主機(jī)大量的發(fā)包,則控制器很有可能會(huì)被阻塞掉。但是重要性卻沒有第一類消息大,因?yàn)槿艨刂破魈幚聿患皶r(shí),只會(huì)影響到相關(guān)主機(jī)的通信。第三類消息的數(shù)量不多,重要性也最低,可以看做是對(duì)網(wǎng)絡(luò)的監(jiān)控消息,處理不及時(shí)不會(huì)影響到網(wǎng)絡(luò)的通信。
因此,SDN控制器的消息處理機(jī)制面臨以下的兩個(gè)挑戰(zhàn):首先是需要能夠保證重要性最高的第一類消息任何情況下都要得到及時(shí)的處理;其次是針對(duì)第二類消息應(yīng)有一個(gè)高效的分類歸并處理和緩存機(jī)制,以應(yīng)對(duì)DDos攻擊等帶來的大量消息。
3.2 消息隊(duì)列樹
根據(jù)3.1所分析的消息的特征,我們?cè)O(shè)計(jì)了如圖2所示的消息隊(duì)列樹。在這個(gè)消息隊(duì)列樹上有兩個(gè)類型的對(duì)象:消息類型節(jié)點(diǎn)(MsgTypeNode)和消息隊(duì)列(MsgQueue)。消息類型節(jié)點(diǎn)代表了一個(gè)特定類型的消息,根據(jù)消息的種類及他們之間的包含關(guān)系,他們構(gòu)成了父子關(guān)系。每一個(gè)消息類型節(jié)點(diǎn)多有對(duì)應(yīng)的一個(gè)消息隊(duì)列,其中存儲(chǔ)了該類型所對(duì)應(yīng)的消息或子隊(duì)列。設(shè)置子隊(duì)列的原因是有些消息可以進(jìn)行歸并處理。例如,針對(duì)同一個(gè)主機(jī)地址的ARP_Request是只需要處理一次的。
每一個(gè)消息類型節(jié)點(diǎn)都對(duì)應(yīng)于一個(gè)相應(yīng)的消息處理線程Msg_Handler。消息處理節(jié)點(diǎn)需要實(shí)現(xiàn)以下的幾個(gè)接口:
1) PushMsg 用來處理一個(gè)消息。該函數(shù)應(yīng)該會(huì)首先判斷當(dāng)前消息是否可以放入某個(gè)子節(jié)點(diǎn)中,如果其沒有子節(jié)點(diǎn)或所有的子節(jié)點(diǎn)都和此消息不匹配,則該消息應(yīng)放入其自身的消息隊(duì)列中。放入消息隊(duì)列中時(shí),還需要判斷是否有子隊(duì)列。若有子隊(duì)列,則應(yīng)根據(jù)子隊(duì)列分隊(duì)規(guī)則選擇相應(yīng)的子隊(duì)列。
2) GetMsg 用以返回一個(gè)消息給相應(yīng)的Msg_Handler處理。GetMsg接口應(yīng)支持兩個(gè)參數(shù):IfDel和Msg。IfDel表示返回相應(yīng)的消息后是否需要從隊(duì)列中刪除。Msg參數(shù)表示指定被返回的消息的屬性。
每一個(gè)消息類型節(jié)點(diǎn)是否存在取決于是否有相應(yīng)的Msg_Handler。當(dāng)系統(tǒng)初始化時(shí),所有支持的Msg_Handler都應(yīng)在系統(tǒng)中注冊(cè)以提交其支持的消息的類型信息。SDN控制器根據(jù)所有Msg_Handler提交的注冊(cè)信息以決定建立的消息隊(duì)列樹。SDN控制器會(huì)為每一個(gè)消息處理Msg_Handler生成一定數(shù)量的線程。這些線程都會(huì)監(jiān)控一個(gè)公共的信號(hào)量。當(dāng)消息類型節(jié)點(diǎn)添加一個(gè)消息到自身隊(duì)列后,會(huì)通過增加信號(hào)量的值以通知所有的Msg_Handler線程來取消息。
3.3 系統(tǒng)的架構(gòu)
圖3顯示了基于隊(duì)列樹的SDN控制器消息處理架構(gòu)。SDN控制器根據(jù)消息類型劃構(gòu)建一個(gè)隊(duì)列樹,不同類型的消息會(huì)根據(jù)規(guī)則放入隊(duì)列樹上的不同的隊(duì)列中。根據(jù)一個(gè)消息的消息特征為所述消息建立一個(gè)對(duì)應(yīng)的Handler,所述消息的消息特征包括消息類型;所述Handler包括add_msg接口和msg_handler接口;其中,add_msg接口用于接收消息并將所述消息封裝并添加到所述消息隊(duì)列中;msg_handler接口用于對(duì)所述消息進(jìn)行處理。在一個(gè)實(shí)施例中,所述消息特征還包括協(xié)議版本。在一個(gè)實(shí)施例中,所述消息和對(duì)應(yīng)的Handler采用注冊(cè)機(jī)制管理,以所述消息的消息特征為關(guān)鍵字,以對(duì)應(yīng)的Handler為值進(jìn)行注冊(cè)。協(xié)議消息與具體的消息處理Handler采用注冊(cè)機(jī)制,靈活可控,可只注冊(cè)需要處理的協(xié)議消息。在一個(gè)實(shí)施例中,每一個(gè)消息隊(duì)列對(duì)應(yīng)一個(gè)獨(dú)立的線程池,所述消息隊(duì)列中的被封裝的消息由所述線程池處理。各個(gè)消息隊(duì)列的線程池相互獨(dú)立,互不干擾,極大提高了消息處理的并發(fā)性。所述消息隊(duì)列包括子隊(duì)列,消息以協(xié)議子類型或者消息目的地址或者自定義字段作為關(guān)鍵字來區(qū)分以封裝到不同的子隊(duì)列中。在一個(gè)實(shí)施例中,所述被封裝的消息具有相同的封裝結(jié)構(gòu),所述封裝結(jié)構(gòu)包括消息體、協(xié)議版本、消息類型以及對(duì)應(yīng)的Handler。在一個(gè)實(shí)施例中,一個(gè)消息隊(duì)列包括多種消息類型。
SDN控制器接收消息,并根據(jù)消息的消息特征確定對(duì)應(yīng)的Handler,調(diào)用所述Handler的add_msg接口將所述消息封裝并添加到所述消息隊(duì)列中。在一個(gè)實(shí)施例中,所述消息隊(duì)列包括子隊(duì)列,所述Handler的add_msg接口將消息以協(xié)議子類型或者消息目的地址或者自定義字段作為關(guān)鍵字來區(qū)分以封裝到不同的子隊(duì)列中。所述消息為OpenFlow消息。在一個(gè)實(shí)施例中,所述SDN控制器以EPOLL模式接收消息。EPOLL是在2.6內(nèi)核中提出的,是之前的select和poll的增強(qiáng)版本。相對(duì)于select和poll來說,EPOLL更加靈活,沒有描述符限制。EPOLL使用一個(gè)文件描述符管理多個(gè)描述符,將用戶關(guān)系的文件描述符的事件存放到內(nèi)核的一個(gè)事件表中,這樣在用戶空間和內(nèi)核空間的copy只需一次。
所述消息隊(duì)列中取出被封裝的消息,并調(diào)用所述被封裝的消息對(duì)應(yīng)的Handler的msg_handler接口對(duì)所述被封裝的消息進(jìn)行處理。在一個(gè)實(shí)施例中,各個(gè)線程池分別從對(duì)應(yīng)的消息隊(duì)列(Queue)中獲取消息(CMsg),再?gòu)腃Msg中獲取關(guān)聯(lián)的Handler,最后通過Handler的msg_handler接口來處理消息。各個(gè)Queue的線程池相互獨(dú)立,互不干擾,極大提高了消息處理的并發(fā)性。
4 總結(jié)
SDN控制器是SDN網(wǎng)絡(luò)的核心,是決定SDN網(wǎng)絡(luò)效率的關(guān)鍵因素之一。SDN控制器管理網(wǎng)絡(luò)的主要途徑是處理交換設(shè)備發(fā)來的各種消息,因此如何高效的處理消息就成為了設(shè)計(jì)SDN控制器的關(guān)鍵?;赟DN網(wǎng)絡(luò)中消息的特征,本文設(shè)計(jì)了一種基于隊(duì)列樹的高效消息處理機(jī)制: 通過對(duì)不同類型消息的分類處理實(shí)現(xiàn)了控制器對(duì)關(guān)鍵消息的及時(shí)響應(yīng);通過對(duì)相似消息的歸并處理大大降低了控制器的工作量;通過可調(diào)整的線程池實(shí)現(xiàn)了控制器對(duì)不同消息的自適應(yīng)處理。
參考文獻(xiàn):
[1] Fundation O N.Software-defined networking: The new norm for networks. ONF White Paper, 2012.
[2] 王文東,胡延楠.軟件定義網(wǎng)絡(luò), 正在進(jìn)行的網(wǎng)絡(luò)變革[J].ZTE TECHNOLOGY JOURNAL, 2013.
[3] McKeown N, et al. OpenFlow: enabling innovation in campus networks[J]. ACM SIGCOMM Computer Communication Review, 2008,38(2): 69-74.