蔣暕青 洪梅 李澤軍
摘要:SDN控制器是SDN網(wǎng)絡(luò)的核心,是決定SDN網(wǎng)絡(luò)效率的關(guān)鍵因素之一。SDN控制器管理網(wǎng)絡(luò)的主要途徑是處理交換設(shè)備發(fā)來的各種消息,因此如何高效的處理消息就成為了設(shè)計SDN控制器的關(guān)鍵?;赟DN網(wǎng)絡(luò)中消息的特征,該文設(shè)計了一種基于隊列樹的高效消息處理機制: 通過對不同類型消息的分類處理實現(xiàn)了控制器對關(guān)鍵消息的及時響應(yīng);通過對相似消息的歸并處理大大降低了控制器的工作量;通過可調(diào)整的線程池實現(xiàn)了控制器對不同消息的自適應(yīng)處理。
關(guān)鍵詞:軟件定義網(wǎng)絡(luò);消息處理;隊列集
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號: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年全球近三分之二的總工作負荷將在云端處理,數(shù)據(jù)中心(Data Center, DC)將成為大部分互聯(lián)網(wǎng)流量的源頭或終點。而在數(shù)據(jù)中心產(chǎn)生的所有流量中,內(nèi)部流量占數(shù)據(jù)中心總流量的76%,主要是存儲和虛擬機之間的數(shù)據(jù)交換等活動。因此,未來的互聯(lián)網(wǎng)將是以云計算數(shù)據(jù)中心為核心的網(wǎng)絡(luò)。在現(xiàn)有的數(shù)據(jù)中心中,各業(yè)務(wù)之間相互獨立占用資源且沒有資源移動性要求,因此各業(yè)務(wù)網(wǎng)絡(luò)采用物理方式隔離,自成一體。這種方式構(gòu)建的網(wǎng)絡(luò)擴展性非常有限,只能縱向替換而不能橫向添地進行加擴展,造成系統(tǒng)性能存在瓶頸。往往為了滿足1%的峰值時刻的流量需求,導(dǎo)致99%的機器必須參與工作,且每臺機器的工作效率往往低于20%。
傳統(tǒng)互聯(lián)網(wǎng)由于存在著復(fù)雜的交換機、終端、路由器、以及其他設(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ò)中因為存在大量不同設(shè)備,使用不同協(xié)議,所以無法對所有的網(wǎng)絡(luò)設(shè)備進行有效的統(tǒng)一控制,而且網(wǎng)絡(luò)維護成本居高不下,網(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通過實現(xiàn)網(wǎng)絡(luò)設(shè)備的控制權(quán)和轉(zhuǎn)發(fā)權(quán)的相互獨立,從而靈活、方便的控制數(shù)據(jù)包的轉(zhuǎn)發(fā),提供了一種可編程的網(wǎng)絡(luò)管理模式。在軟件定義網(wǎng)絡(luò)中,控制器通過南向接口(OpenFlow協(xié)議)獲取底層網(wǎng)絡(luò)設(shè)備信息,進行統(tǒng)一部署、集中管理以及靈活控制,從而解決了分散網(wǎng)絡(luò)設(shè)備的管理控制問題。同時,控制器提供了可編程擴展的北向接口,按不同需求設(shè)計的功能應(yīng)用軟件可以直接運行在控制器上,利用控制器對全局網(wǎng)絡(luò)設(shè)備進行統(tǒng)一更新和功能升級。
控制層的功能通過集中式的SDN控制器(Controller)來實現(xiàn)。SDN控制器包含兩層開放的接口:其中北向接口為可編程接口,面向應(yīng)用層;南向接口通過OpenFlow等協(xié)議與轉(zhuǎn)發(fā)層進行交互。應(yīng)用層由軟件形態(tài)的應(yīng)用程序構(gòu)成,網(wǎng)絡(luò)管理員或系統(tǒng)開發(fā)者只需要關(guān)注網(wǎng)絡(luò)應(yīng)用的自身邏輯,并不需要關(guān)注底層更多的實現(xiàn)細節(jié)??刂茖又械目刂破髦饕鶕?jù)具體應(yīng)用需求對轉(zhuǎn)發(fā)層的各種網(wǎng)絡(luò)設(shè)備進行各種配置和管理。通過對轉(zhuǎn)發(fā)表的集中管理,控制器能夠?qū)崟r控制網(wǎng)絡(luò)各鏈路中流量的大小和走向,進而能夠?qū)崿F(xiàn)對網(wǎng)絡(luò)帶寬資源和網(wǎng)絡(luò)功能元件虛擬化管理,從粗放的網(wǎng)絡(luò)模塊增加轉(zhuǎn)變?yōu)榧毩6鹊馁Y源池擴充,使得網(wǎng)絡(luò)資源利用率都得以大幅提升。而轉(zhuǎn)發(fā)層一般只需基于控制層下發(fā)的指令和策略對數(shù)據(jù)分組進行轉(zhuǎn)發(fā)即可。通過這種方式,網(wǎng)絡(luò)在不需要對轉(zhuǎn)發(fā)層進行硬件更改或替換的情況下,便可靈活地對新業(yè)務(wù)或新協(xié)議進行適配,推進了網(wǎng)絡(luò)新技術(shù)和新協(xié)議的實現(xiàn)和部署,提高了網(wǎng)絡(luò)的靈活性和可操作性。SDN顛覆了現(xiàn)有網(wǎng)絡(luò)架構(gòu),它使得網(wǎng)絡(luò)從一個垂直集成、封閉的狀態(tài)演變成為水平集成、開放、支持快速創(chuàng)新的生態(tài)系統(tǒng)。自2009年業(yè)內(nèi)第一次提出相關(guān)概念以來,SDN就引起了業(yè)界的巨大關(guān)注,成為研究熱點。
SDN控制器雖能大幅提升網(wǎng)絡(luò)資源的利用率,但隨著數(shù)據(jù)中心規(guī)模的擴大,SDN控制器仍面臨著一個主要問題:交換機和用戶主機數(shù)目的增長,使得每個交換機需存儲的流表內(nèi)容也在相應(yīng)增加(理論上每臺交換機上的流表最多需覆蓋到網(wǎng)絡(luò)中的所有主機),這不僅需要每臺交換機有更大的存儲容量和更快的查詢速度,也對控制器的工作效率提出了更高的要求。盡管當(dāng)前已有若干SDN控制器被相繼提出,但由于受制于性能和可擴展性等,它們所能管理的網(wǎng)絡(luò)規(guī)模還有些,尚不具備商業(yè)化運營的能力。因此,隨著大數(shù)據(jù)浪潮的到來,我們迫切需要可面向云計算數(shù)據(jù)中心的高性能SDN控制器。SDN控制器管理網(wǎng)絡(luò)的主要途徑是處理交換設(shè)備發(fā)來的各種消息,因此如何高效的處理消息就成為了設(shè)計SDN控制器的關(guān)鍵?;赟DN網(wǎng)絡(luò)中消息的特征,本文設(shè)計了一種基于隊列樹的高效消息處理機制: 通過對不同類型消息的分類處理實現(xiàn)了控制器對關(guān)鍵消息的及時響應(yīng);通過對相似消息的歸并處理大大降低了控制器的工作量;通過可調(diào)整的線程池實現(xiàn)了控制器對不同消息的自適應(yīng)處理。
2 研究現(xiàn)狀
隨著終端計算處理能力的提高、網(wǎng)絡(luò)傳輸能力的擴大,網(wǎng)絡(luò)所承載的信息急劇膨脹,互聯(lián)網(wǎng)不再是單純以通信為目的的網(wǎng)絡(luò),而是更多地朝著滿足人們獲取信息需求的方向發(fā)展,成為一個信息承載和分發(fā)的平臺。由于人們對信息獲取方式(有線、移動)、信息類型 (數(shù)據(jù)、話音、視頻)、信息質(zhì)量、信息安全等呈現(xiàn)多元化的需求,所以互聯(lián)網(wǎng)為了適應(yīng)和滿足各類需求不斷地引入大量的控制協(xié)議,形成了一個龐大的控制平面。這些控制協(xié)議從設(shè)計上依附于特定的轉(zhuǎn)發(fā)協(xié)議,而且從實現(xiàn)技術(shù)上看,控制平面與轉(zhuǎn)發(fā)平面都運行在網(wǎng)絡(luò)設(shè)備中,給網(wǎng)絡(luò)功能的擴展和網(wǎng)絡(luò)的管理帶來了巨大的挑戰(zhàn),傳統(tǒng)網(wǎng)絡(luò)架構(gòu)越來越不能滿足當(dāng)今企業(yè)、運營商以及用戶的需求。
基于這種背景,SDN軟件定義的網(wǎng)絡(luò)被提出并作為軟件定義數(shù)據(jù)中心的重要一部分。SDN(軟件定義網(wǎng)絡(luò))是一種新型的網(wǎng)絡(luò)架構(gòu),它的設(shè)計理念是將網(wǎng)絡(luò)的控制平面與數(shù)據(jù)轉(zhuǎn)發(fā)平面進行分離,支持集中化的網(wǎng)絡(luò)狀態(tài)控制,實現(xiàn)底層網(wǎng)絡(luò)設(shè)施對上層應(yīng)用的透明。SDN具有靈活的編程能力,使得網(wǎng)絡(luò)的自動化管理和控制能力獲得空前的提升,能夠有效地解決當(dāng)前網(wǎng)絡(luò)所面臨的資源規(guī)模擴展受限,組網(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ò)的自動化管理和控制能力得到空前的提升,從而實現(xiàn)了網(wǎng)絡(luò)流量的靈活控制,為核心網(wǎng)絡(luò)及應(yīng)用的創(chuàng)新提供了良好的平臺,能有效解決當(dāng)前網(wǎng)絡(luò)系統(tǒng)所面臨的資源規(guī)模擴展受限、組網(wǎng)靈活性差、 難以快速滿足業(yè)務(wù)需求等問題,便于網(wǎng)絡(luò)升級和適應(yīng)各種新型業(yè)務(wù)的需求。SDN控制器負責(zé)整個網(wǎng)絡(luò)的控制平面,承接物理網(wǎng)絡(luò)和上層應(yīng)用。目前市場上廠商的、開源的控制器大大小小有幾十種,但是這些控制器的消息隊列不可控,不夠靈活,擴展性不夠好。現(xiàn)有的大部分SDN控制器的解決方案通常都是采用固定的消息隊列模式,隊列模式不可調(diào)整,不能對某個單獨消息做特殊隊列安排。
鑒于此,如何找到一種更好的SDN控制器消息隊列管理方案就成了本領(lǐng)域技術(shù)人員亟待解決的問題。
3 基于隊列樹的SDN控制器高效消息處理機制
3.1 SDN控制器消息特征
根據(jù)OpenFlow協(xié)議[3],SDN控制器需要處理的消息主要分為以下幾類:
1) 拓撲變化相關(guān)消息:例如交換機的上線下線、交換機的端口變化、鏈路變化、拓撲發(fā)現(xiàn)LLDP消息等;
2) 主機通訊相關(guān)信息:例如ARP消息、IP消息、DHCP消息等;
3) 網(wǎng)絡(luò)心跳和流量監(jiān)控等消息:主要是OpenFlow協(xié)議中的Echo消息和針對交換機、端口或流表的流量統(tǒng)計數(shù)據(jù)。
上述三類消息的特征和重要性都有著很大的區(qū)別。第一類消息的數(shù)量最小,重要性卻最大,需要控制器及時的做出相應(yīng),否則會影響整個網(wǎng)絡(luò)的通信。第二類消息的數(shù)量會比較多,網(wǎng)絡(luò)中的每個主機的通信行為都會導(dǎo)致控制器收到相應(yīng)的消息。若某個主機大量的發(fā)包,則控制器很有可能會被阻塞掉。但是重要性卻沒有第一類消息大,因為若控制器處理不及時,只會影響到相關(guān)主機的通信。第三類消息的數(shù)量不多,重要性也最低,可以看做是對網(wǎng)絡(luò)的監(jiān)控消息,處理不及時不會影響到網(wǎng)絡(luò)的通信。
因此,SDN控制器的消息處理機制面臨以下的兩個挑戰(zhàn):首先是需要能夠保證重要性最高的第一類消息任何情況下都要得到及時的處理;其次是針對第二類消息應(yīng)有一個高效的分類歸并處理和緩存機制,以應(yīng)對DDos攻擊等帶來的大量消息。
3.2 消息隊列樹
根據(jù)3.1所分析的消息的特征,我們設(shè)計了如圖2所示的消息隊列樹。在這個消息隊列樹上有兩個類型的對象:消息類型節(jié)點(MsgTypeNode)和消息隊列(MsgQueue)。消息類型節(jié)點代表了一個特定類型的消息,根據(jù)消息的種類及他們之間的包含關(guān)系,他們構(gòu)成了父子關(guān)系。每一個消息類型節(jié)點多有對應(yīng)的一個消息隊列,其中存儲了該類型所對應(yīng)的消息或子隊列。設(shè)置子隊列的原因是有些消息可以進行歸并處理。例如,針對同一個主機地址的ARP_Request是只需要處理一次的。
每一個消息類型節(jié)點都對應(yīng)于一個相應(yīng)的消息處理線程Msg_Handler。消息處理節(jié)點需要實現(xiàn)以下的幾個接口:
1) PushMsg 用來處理一個消息。該函數(shù)應(yīng)該會首先判斷當(dāng)前消息是否可以放入某個子節(jié)點中,如果其沒有子節(jié)點或所有的子節(jié)點都和此消息不匹配,則該消息應(yīng)放入其自身的消息隊列中。放入消息隊列中時,還需要判斷是否有子隊列。若有子隊列,則應(yīng)根據(jù)子隊列分隊規(guī)則選擇相應(yīng)的子隊列。
2) GetMsg 用以返回一個消息給相應(yīng)的Msg_Handler處理。GetMsg接口應(yīng)支持兩個參數(shù):IfDel和Msg。IfDel表示返回相應(yīng)的消息后是否需要從隊列中刪除。Msg參數(shù)表示指定被返回的消息的屬性。
每一個消息類型節(jié)點是否存在取決于是否有相應(yīng)的Msg_Handler。當(dāng)系統(tǒng)初始化時,所有支持的Msg_Handler都應(yīng)在系統(tǒng)中注冊以提交其支持的消息的類型信息。SDN控制器根據(jù)所有Msg_Handler提交的注冊信息以決定建立的消息隊列樹。SDN控制器會為每一個消息處理Msg_Handler生成一定數(shù)量的線程。這些線程都會監(jiān)控一個公共的信號量。當(dāng)消息類型節(jié)點添加一個消息到自身隊列后,會通過增加信號量的值以通知所有的Msg_Handler線程來取消息。
3.3 系統(tǒng)的架構(gòu)
圖3顯示了基于隊列樹的SDN控制器消息處理架構(gòu)。SDN控制器根據(jù)消息類型劃構(gòu)建一個隊列樹,不同類型的消息會根據(jù)規(guī)則放入隊列樹上的不同的隊列中。根據(jù)一個消息的消息特征為所述消息建立一個對應(yīng)的Handler,所述消息的消息特征包括消息類型;所述Handler包括add_msg接口和msg_handler接口;其中,add_msg接口用于接收消息并將所述消息封裝并添加到所述消息隊列中;msg_handler接口用于對所述消息進行處理。在一個實施例中,所述消息特征還包括協(xié)議版本。在一個實施例中,所述消息和對應(yīng)的Handler采用注冊機制管理,以所述消息的消息特征為關(guān)鍵字,以對應(yīng)的Handler為值進行注冊。協(xié)議消息與具體的消息處理Handler采用注冊機制,靈活可控,可只注冊需要處理的協(xié)議消息。在一個實施例中,每一個消息隊列對應(yīng)一個獨立的線程池,所述消息隊列中的被封裝的消息由所述線程池處理。各個消息隊列的線程池相互獨立,互不干擾,極大提高了消息處理的并發(fā)性。所述消息隊列包括子隊列,消息以協(xié)議子類型或者消息目的地址或者自定義字段作為關(guān)鍵字來區(qū)分以封裝到不同的子隊列中。在一個實施例中,所述被封裝的消息具有相同的封裝結(jié)構(gòu),所述封裝結(jié)構(gòu)包括消息體、協(xié)議版本、消息類型以及對應(yīng)的Handler。在一個實施例中,一個消息隊列包括多種消息類型。
SDN控制器接收消息,并根據(jù)消息的消息特征確定對應(yīng)的Handler,調(diào)用所述Handler的add_msg接口將所述消息封裝并添加到所述消息隊列中。在一個實施例中,所述消息隊列包括子隊列,所述Handler的add_msg接口將消息以協(xié)議子類型或者消息目的地址或者自定義字段作為關(guān)鍵字來區(qū)分以封裝到不同的子隊列中。所述消息為OpenFlow消息。在一個實施例中,所述SDN控制器以EPOLL模式接收消息。EPOLL是在2.6內(nèi)核中提出的,是之前的select和poll的增強版本。相對于select和poll來說,EPOLL更加靈活,沒有描述符限制。EPOLL使用一個文件描述符管理多個描述符,將用戶關(guān)系的文件描述符的事件存放到內(nèi)核的一個事件表中,這樣在用戶空間和內(nèi)核空間的copy只需一次。
所述消息隊列中取出被封裝的消息,并調(diào)用所述被封裝的消息對應(yīng)的Handler的msg_handler接口對所述被封裝的消息進行處理。在一個實施例中,各個線程池分別從對應(yīng)的消息隊列(Queue)中獲取消息(CMsg),再從CMsg中獲取關(guān)聯(lián)的Handler,最后通過Handler的msg_handler接口來處理消息。各個Queue的線程池相互獨立,互不干擾,極大提高了消息處理的并發(fā)性。
4 總結(jié)
SDN控制器是SDN網(wǎng)絡(luò)的核心,是決定SDN網(wǎng)絡(luò)效率的關(guān)鍵因素之一。SDN控制器管理網(wǎng)絡(luò)的主要途徑是處理交換設(shè)備發(fā)來的各種消息,因此如何高效的處理消息就成為了設(shè)計SDN控制器的關(guān)鍵。基于SDN網(wǎng)絡(luò)中消息的特征,本文設(shè)計了一種基于隊列樹的高效消息處理機制: 通過對不同類型消息的分類處理實現(xiàn)了控制器對關(guān)鍵消息的及時響應(yīng);通過對相似消息的歸并處理大大降低了控制器的工作量;通過可調(diào)整的線程池實現(xiàn)了控制器對不同消息的自適應(yīng)處理。
參考文獻:
[1] Fundation O N.Software-defined networking: The new norm for networks. ONF White Paper, 2012.
[2] 王文東,胡延楠.軟件定義網(wǎng)絡(luò), 正在進行的網(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.