本文根據(jù)華三通信研發(fā)副總裁王颶在2014年QCon上海的主題演講《SDN控制器集群中的分布式技術(shù)實(shí)踐》整理而成吟策。
目前在網(wǎng)絡(luò)世界里棠绘,云計(jì)算翠语、虛擬化叽躯、SDN、NFV這些話題都非常熱肌括。今天借這個(gè)機(jī)會(huì)我跟大家一起來一場(chǎng)SDN的深度之旅险毁,從概念一直到實(shí)踐一直到一些具體的技術(shù)。
本次分享分為三個(gè)主要部分:
SDN & NFV的背景介紹
SDN部署的實(shí)際案例
SDN控制器的集群部署方案
我們首先看一下SDN。其實(shí)SDN這個(gè)東西已經(jīng)有好幾年了畔况,它強(qiáng)調(diào)的是什么?控制平面和數(shù)據(jù)平面分離慧库,中間是由OpenFlow交換機(jī)組成的控制器跷跪,再往上就是運(yùn)行在SDN之上的服務(wù)或者是應(yīng)用。這里強(qiáng)調(diào)兩個(gè)齐板,控制器和交換機(jī)的接口——我們叫做南向接口吵瞻;另一個(gè)是往上的北向接口。
SDN的核心理念有三個(gè)甘磨,第一個(gè)控制和轉(zhuǎn)發(fā)分離橡羞,第二個(gè)集中控制,第三個(gè)開放的API——可編程济舆、開放的API接口卿泽。單純看這三個(gè)概念,我們很難理解為什么SDN在網(wǎng)絡(luò)業(yè)界現(xiàn)在這么火滋觉。這三個(gè)概念就能夠支撐起SDN的成功嗎签夭?所以我們要探尋一下SDN背后的故事。
其實(shí)SDN在誕生之初椎侠,我們這些做網(wǎng)絡(luò)的人對(duì)它不重視第租,最開始認(rèn)為就是大學(xué)的教授搞出來的實(shí)驗(yàn)室里的玩具,并不認(rèn)為會(huì)對(duì)產(chǎn)業(yè)界有大的影響我纪,可是幾年下來以后讓我們每個(gè)人都大吃一驚贪壳,它發(fā)展太快了戴而。這個(gè)背后有什么呢?
實(shí)際上在SDN的發(fā)展的幾年當(dāng)中有另外一個(gè)技術(shù)在迅速的發(fā)展,鋪天蓋地來到每個(gè)人的身邊泵肄,就是云計(jì)算。說云計(jì)算我還想跟大家分享一個(gè)小故事进萄,我前幾天在公司準(zhǔn)備QCon的膠片已烤,我們公司的負(fù)責(zé)保潔的師傅說了,你做云計(jì)算翱良帷比被?我說是啊,你也知道云計(jì)算泼舱?他說當(dāng)然知道了等缀,我經(jīng)常用云計(jì)算,那我問他娇昙,你都怎么用的尺迂?他說上淘寶啊,經(jīng)常買東西。然后我就問他了噪裕,那你知道淘寶應(yīng)該算什么云嗎蹲盘?其實(shí)我問他這句話背后的含義是因?yàn)椋谖覀冞@個(gè)圈子里面把云分為公有云膳音、私有云召衔、混合云,我想問問他祭陷,結(jié)果他的答案非常讓我震驚苍凛,淘寶你不知道嗎?馬云氨尽醇蝴!所以我就深深的體會(huì)到了,起一個(gè)好的名字是非常重要的想罕。
剛剛這個(gè)只是個(gè)笑話悠栓,體現(xiàn)了兩個(gè)問題:第一個(gè)就是云計(jì)算現(xiàn)在地球人都知道,第二個(gè)就是每個(gè)人對(duì)云計(jì)算的理解又是不同的弧呐。我給云計(jì)算下了一個(gè)定義闸迷,就是使計(jì)算分布在海量的分布式節(jié)點(diǎn)上并且保持彈性,這么說可能比較抽象俘枫,再說的稍微形象一點(diǎn)就是說使資源池化腥沽,在你需要的時(shí)候可以按需索取、動(dòng)態(tài)管理鸠蚪。
當(dāng)人們圍繞著按需索取動(dòng)態(tài)管理做文章的時(shí)候今阳,什么技術(shù)能達(dá)到這個(gè)要求呢?虛擬化技術(shù)茅信。所以現(xiàn)在看云管理平臺(tái)盾舌,OpenStack、CloudStack也好蘸鲸,都是圍繞這三個(gè)方面——計(jì)算妖谴、存儲(chǔ)還有網(wǎng)絡(luò)的虛擬化做文章的。
在這股虛擬化的浪潮前面酌摇,計(jì)算虛擬化發(fā)展的最早也發(fā)展的最快膝舅,網(wǎng)絡(luò)和存儲(chǔ)的虛擬化就相對(duì)滯后一點(diǎn)。當(dāng)人們把目光聚焦到網(wǎng)絡(luò)虛擬化的時(shí)候窑多,人們尋找解決網(wǎng)絡(luò)虛擬化的方法和工具仍稀,這個(gè)時(shí)候SDN就出現(xiàn)在人們的視野里了。
剛剛講的SDN三個(gè)理念:控制和轉(zhuǎn)發(fā)分離可以使控制層面脫離對(duì)網(wǎng)絡(luò)設(shè)備的依賴埂息,可以快速發(fā)展技潘;集中控制就很方便對(duì)資源進(jìn)行池化和控制遥巴;開放的API——南向和北向接口——可以催生產(chǎn)業(yè)鏈,推動(dòng)整個(gè)產(chǎn)業(yè)的快速發(fā)展享幽。
開放的云計(jì)算數(shù)據(jù)中心解決方案都離不開SDN铲掐,從某種程度上講,是云計(jì)算架構(gòu)里面的基石琉闪,再講另外一個(gè)話題迹炼,NFV也是比較熱的話題,是網(wǎng)絡(luò)功能虛擬化颠毙,和剛剛我講的網(wǎng)絡(luò)虛擬化就差一個(gè)字母,但是實(shí)際上闡述的是兩個(gè)不同層面的概念砂碉。
我們講了云計(jì)算需要網(wǎng)絡(luò)虛擬化蛀蜜,實(shí)際上不是今天才有的,像我們做網(wǎng)絡(luò)的人都知道在很久以前人們就有這種網(wǎng)絡(luò)虛擬化的要求了增蹭,不過在那個(gè)時(shí)候我們管它叫VPN滴某,虛擬專用網(wǎng),以前使用的都是在一個(gè)公共的網(wǎng)絡(luò)上虛擬出來一個(gè)專用的網(wǎng)絡(luò)滋迈,讓使用者以為這個(gè)網(wǎng)絡(luò)就是給我專用的霎奢。
那么到了云計(jì)算時(shí)代,在我們討論云數(shù)據(jù)中心的時(shí)候饼灿,就不再用原先的詞了幕侠,現(xiàn)在說multi-tenant,多租戶碍彭,其實(shí)道理是一樣的晤硕,也是在一個(gè)公共的網(wǎng)絡(luò)里隔離出來各個(gè)專用的網(wǎng)絡(luò)。這個(gè)技術(shù)是什么庇忌?就是Overlay舞箍。數(shù)據(jù)層面看這倆技術(shù)沒有本質(zhì)的區(qū)別,都是實(shí)現(xiàn)了數(shù)據(jù)封裝皆疹,方式就是在網(wǎng)上建立隧道把各個(gè)網(wǎng)絡(luò)隔離開疏橄。
回頭看NFV這個(gè)概念,就有點(diǎn)區(qū)別了:NFV是歐洲電信聯(lián)盟提出來的略就。我們知道在運(yùn)營(yíng)商的機(jī)房里面看到成片的服務(wù)器捎迫、存儲(chǔ)設(shè)備、還有大量的不同廠商不同的網(wǎng)絡(luò)設(shè)備残制,云計(jì)算的時(shí)代這些運(yùn)營(yíng)商也不干了立砸,這么搞太煩了,維護(hù)起來成本高初茶,部署起來復(fù)雜颗祝,新業(yè)務(wù)上線很慢浊闪,他就強(qiáng)調(diào)能不能把這個(gè)世界搞得干凈一點(diǎn),機(jī)房當(dāng)中只剩下三個(gè)設(shè)備:標(biāo)準(zhǔn)的交換機(jī)螺戳,標(biāo)準(zhǔn)的服務(wù)器還有標(biāo)準(zhǔn)的存儲(chǔ)設(shè)備搁宾,除了這些設(shè)備,其他通通消失倔幼,把所有功能挪到標(biāo)準(zhǔn)的服務(wù)器上實(shí)現(xiàn)盖腿,強(qiáng)調(diào)網(wǎng)絡(luò)功能的虛擬化。
所謂功能的虛擬化就是說把這個(gè)功能從傳統(tǒng)的網(wǎng)絡(luò)設(shè)備里拿出來损同。這個(gè)是歐洲電信聯(lián)盟給出的NFV的架構(gòu)圖翩腐,我們看這個(gè)架構(gòu)圖的時(shí)候發(fā)現(xiàn),這個(gè)下面的部分稱為NFVI膏燃,就是基礎(chǔ)設(shè)施茂卦,進(jìn)行管理和虛擬化,目標(biāo)是為了在上面提供這些他稱之為VNF的功能组哩。強(qiáng)調(diào)一下等龙,這是一個(gè)一個(gè)的功能單元,這些功能單元運(yùn)行在虛擬化出來的虛擬機(jī)或容器里伶贰。最右邊這一塊就是整個(gè)系統(tǒng)的管理蛛砰。
我們看這個(gè)圖可能會(huì)感覺很熟悉,這個(gè)就是OpenStack的架構(gòu)圖黍衙。云管理平臺(tái)玩的就是虛擬化泥畅,管理的是計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)们豌。對(duì)比前后這兩張圖我們發(fā)現(xiàn)涯捻,其實(shí)NFV的架構(gòu)就是云計(jì)算的架構(gòu),只不過它所強(qiáng)調(diào)的僅僅是運(yùn)行在云計(jì)算上的服務(wù)望迎,而不像我們普通的比如Hadoop服務(wù)為了大數(shù)據(jù)障癌,或者WEB和數(shù)據(jù)庫等等。NFV的服務(wù)都是為網(wǎng)絡(luò)功能服務(wù)的辩尊,包括DHCP地址分配涛浙、NAT地址轉(zhuǎn)換、防火墻摄欲、無線接入轿亮、寬帶接入、3G核心網(wǎng)等等胸墙,都可以用虛擬的容器實(shí)現(xiàn)我注。所以其實(shí)網(wǎng)絡(luò)功能和我們大家平時(shí)所熟悉的這些標(biāo)準(zhǔn)的APP或者是這些服務(wù)都是一樣的,都可以一樣的進(jìn)行虛擬化和云化迟隅。
所以從這個(gè)層面上講但骨,一個(gè)廣泛意義上的網(wǎng)絡(luò)虛擬化會(huì)看到幾個(gè)熱門技術(shù):SDN励七、NFV、Overlay奔缠,都是從不同的層面支撐虛擬化——SDN定義了一種控制和管理的網(wǎng)絡(luò)架構(gòu)掠抬,Overlay提供了一種解決數(shù)據(jù)平面轉(zhuǎn)發(fā)和多租戶隔離的技術(shù)手段,NFV指出了我的網(wǎng)絡(luò)功能如何借助這個(gè)架構(gòu)實(shí)現(xiàn)虛擬化校哎。這里就有一個(gè)循環(huán):網(wǎng)絡(luò)虛擬化包含了網(wǎng)絡(luò)功能虛擬化两波,網(wǎng)絡(luò)功能虛擬化又依賴于云計(jì)算的架構(gòu),一旦這個(gè)循環(huán)形成了闷哆,這些新技術(shù)在彼此之間不停的碰撞腰奋,相互結(jié)合也相互競(jìng)爭(zhēng),也構(gòu)成了我們今天這樣一個(gè)網(wǎng)絡(luò)世界變革的大時(shí)代抱怔。
下面給大家介紹一下我們?cè)赟DN領(lǐng)域的實(shí)際的案例氛堕。
在講實(shí)際的案例之前,想先跟大家分享一下我們公司對(duì)未來網(wǎng)絡(luò)發(fā)展的一個(gè)理解野蝇。我們知道現(xiàn)在SDN、NFV很熱括儒,但是傳統(tǒng)的網(wǎng)絡(luò)并不會(huì)消失绕沈,在很長(zhǎng)的時(shí)間內(nèi)這些技術(shù)會(huì)并存。我們強(qiáng)調(diào)一個(gè)什么概念呢帮寻?就是一個(gè)虛擬的融合架構(gòu)乍狐。
這個(gè)圖是一個(gè)三橫三縱的結(jié)構(gòu),我們從三縱開始固逗。最右邊就是云浅蚪,解決的是計(jì)算存儲(chǔ)的問題;最左邊是端烫罩。有人最近提出來一個(gè)概念惜傲,說現(xiàn)在的網(wǎng)絡(luò)是云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的時(shí)代,云計(jì)算就是云贝攒,而移動(dòng)互聯(lián)網(wǎng)就是端盗誊。對(duì)端的管理,不管是什么樣的網(wǎng)絡(luò)隘弊,我們最終檢驗(yàn)網(wǎng)絡(luò)質(zhì)量的標(biāo)準(zhǔn)是什么哈踱?最終用戶的體驗(yàn)。如果你的網(wǎng)絡(luò)解決不好這個(gè)問題梨熙,你這個(gè)網(wǎng)絡(luò)就很難說是成功的網(wǎng)絡(luò)——所以中間就是云和網(wǎng)的結(jié)合體开镣,就是網(wǎng)絡(luò)的主體。
我們?cè)贆M向看三層咽扇。底下一層就是基礎(chǔ)的設(shè)備邪财,包括終端設(shè)備陕壹、網(wǎng)絡(luò)設(shè)備還有計(jì)算存儲(chǔ),包括NFV虛擬出來的網(wǎng)絡(luò)單元也可以當(dāng)成邏輯的網(wǎng)絡(luò)設(shè)備放這里卧蜓。第二層就是所謂的融合控制層:我們認(rèn)為在網(wǎng)絡(luò)上應(yīng)該有這樣一個(gè)層次帐要,既可以管網(wǎng),也可以管云弥奸,也可以管端榨惠,這些都需要進(jìn)行一定的集中控制。最上邊的一層就是所謂的資源管理層盛霎,在這個(gè)里面第一要對(duì)所有的資源進(jìn)行池化赠橙,比如OpenStack這樣的管理平臺(tái);在這個(gè)之上要提供一個(gè)業(yè)務(wù)編排的系統(tǒng)愤炸,把這些邏輯的分散的資源單元串在一起期揪,才能夠?yàn)橛脩籼峁┓?wù);再之上就是針對(duì)不同的網(wǎng)絡(luò)服務(wù)提供一些管理組件规个。
這個(gè)VCF架構(gòu)強(qiáng)調(diào)每個(gè)層次都要對(duì)上一層次提供開放的接口凤薛,最終對(duì)最上面用戶的應(yīng)用提供可編程、可控制的能力诞仓。這實(shí)際上強(qiáng)調(diào)的是什么缤苫?就是對(duì)端和云中的應(yīng)用提供了一種自動(dòng)化的編排和管理的能力。
這么說可能比較抽象墅拭,我舉個(gè)具體的例子活玲,比如說你的手機(jī)拿起來了要上網(wǎng),當(dāng)你的手機(jī)上網(wǎng)的時(shí)候谍婉,傳統(tǒng)的網(wǎng)絡(luò)就是AC舒憾,無線控制器做Wifi認(rèn)證;但是在我們這樣一個(gè)融合架構(gòu)里面穗熬,對(duì)這個(gè)手機(jī)進(jìn)行認(rèn)證的設(shè)備就不再是AC控制器了镀迂,而是VCF的網(wǎng)絡(luò)控制器。在這個(gè)網(wǎng)絡(luò)控制器對(duì)這個(gè)手機(jī)進(jìn)行認(rèn)證死陆、允許上網(wǎng)以后招拙,就知道這個(gè)手機(jī)是誰的,應(yīng)該有什么權(quán)限措译,可以獲取什么資源别凤,這個(gè)時(shí)候就要執(zhí)行一個(gè)我們稱之為user profile的服務(wù)模板,執(zhí)行之后會(huì)控制整個(gè)網(wǎng)絡(luò)里面所有的設(shè)備领虹,根據(jù)這個(gè)用戶上網(wǎng)這一個(gè)動(dòng)作规哪,它就可以對(duì)這個(gè)用戶所需要的所有的資源進(jìn)行調(diào)整。這在傳統(tǒng)的網(wǎng)絡(luò)里是很難實(shí)現(xiàn)的塌衰。
另一個(gè)例子诉稍,在云數(shù)據(jù)中心一款A(yù)PP上線蝠嘉,一般就是VM或者是一個(gè)容器的創(chuàng)建。一般情況下在云管理平臺(tái)里面杯巨,容器創(chuàng)建的時(shí)候就要分配和指定資源蚤告,包括什么資源呢?CPU服爷、內(nèi)存杜恰、硬盤、網(wǎng)絡(luò)出口帶寬仍源、還有這個(gè)服務(wù)前面要不要加防火墻心褐、是不是大的集群中的成員前面要放負(fù)載均衡、要不要給它備份管理等等等等笼踩,這些功能實(shí)際上存在一個(gè)叫做app profile的文件里逗爹。這樣在整個(gè)云里面,不論是存儲(chǔ)還是計(jì)算資源還是網(wǎng)絡(luò)資源都被這個(gè)APP上線調(diào)動(dòng)了嚎于,他會(huì)根據(jù)你預(yù)先編排好的需求掘而,動(dòng)態(tài)對(duì)所有的資源進(jìn)行調(diào)整。我們以前做應(yīng)用的人對(duì)網(wǎng)絡(luò)施加一些控制是很難的于购,只能對(duì)網(wǎng)絡(luò)管理員提出要求镣屹,讓他實(shí)現(xiàn);但是現(xiàn)在价涝,我們就具備一種動(dòng)態(tài)管理的能力,這就是這樣一個(gè)概念帶來的一個(gè)變革持舆。
所以說色瘩,我們認(rèn)為VCF這樣的概念實(shí)際上就是我們對(duì)SDN這個(gè)概念的發(fā)展和補(bǔ)充,是我們認(rèn)為未來網(wǎng)絡(luò)發(fā)展的趨勢(shì)逸寓。
像這樣一個(gè)整網(wǎng)融合的方案會(huì)比較大居兆,我們真正在商用的時(shí)候往往只會(huì)使用一部分。比如說我們?cè)诮o一個(gè)數(shù)據(jù)中心做方案的時(shí)候竹伸,可能重點(diǎn)關(guān)注于你的云和網(wǎng)泥栖;如果給一個(gè)城域網(wǎng)做方案,可能就是關(guān)注網(wǎng)勋篓;如果是給園區(qū)做網(wǎng)吧享,就是關(guān)注端和網(wǎng)的管理。
下面我就給大家講兩個(gè)實(shí)際的案例譬嚣。
第一個(gè)钢颂,浙江政務(wù)云。這個(gè)項(xiàng)目包含兩個(gè)部分拜银,一個(gè)是公有云殊鞭,一個(gè)是政務(wù)云遭垛,公有云由阿里云承擔(dān),政務(wù)云由我們公司承建操灿。我們看一下結(jié)構(gòu)锯仪,在這個(gè)圖里面我們會(huì)發(fā)現(xiàn),有計(jì)算趾盐、存儲(chǔ)庶喜,中間是一個(gè)由核心交換機(jī)和邊緣交換機(jī)構(gòu)成的網(wǎng)絡(luò)把這些全部連接起來,同時(shí)還有網(wǎng)絡(luò)的管理控制器和云的管理控制器谤碳,之上就是iMC——一個(gè)更高層的資源編排和管理軟件溃卡。上面的OpenStack沒有直接管理交換機(jī),而是通過往OpenStack里面注入插件蜒简,把控制功能轉(zhuǎn)給了控制器瘸羡,包括云控制器和網(wǎng)絡(luò)控制器,然后再去管理物理的設(shè)備搓茬。這樣有什么好處呢犹赖?保留了開源云管理平臺(tái)OpenStack的開放性,第三方應(yīng)用可以用同一個(gè)API來做控制卷仑;而同時(shí)因?yàn)槭褂昧藢S玫目刂破骶澹蕰?huì)有進(jìn)一步的提升。
這個(gè)專用控制器就是SDN和Overlay技術(shù)的實(shí)現(xiàn)锡凝,可以對(duì)外控制三種網(wǎng)絡(luò)角色:VxLAN VTEP控制虛擬化的vSwitch粘昨,VxLAN GW控制數(shù)據(jù)中心內(nèi)的邊緣交換機(jī),VxLAN IP GW控制對(duì)外界連接的網(wǎng)關(guān)——核心交換機(jī)窜锯。
Overlay這個(gè)技術(shù)有一個(gè)特點(diǎn)张肾,就是它初始化的時(shí)候,所有節(jié)點(diǎn)上的流表是空的锚扎。在什么時(shí)候才形成轉(zhuǎn)發(fā)控制的能力呢吞瞪?是隨著業(yè)務(wù)的部署形成的。比如說當(dāng)有一個(gè)VM想跟另外一個(gè)通訊的時(shí)候驾孔,第一個(gè)報(bào)文就被vSwitch捕獲芍秆,然后分析一下,就知道應(yīng)該從哪個(gè)虛機(jī)到哪個(gè)虛機(jī)翠勉,在源和目的的之間建立一個(gè)隧道下發(fā)流表妖啥,把這個(gè)初始的報(bào)文返給vSwitch,這樣就過去了对碌。
這樣處理有甚么好處呢迹栓?最大的好處是節(jié)約資源。我們知道像這樣的數(shù)據(jù)中心可能有幾千或者幾萬個(gè)節(jié)點(diǎn),就是幾十萬個(gè)虛擬機(jī)克伊,如果讓任意兩個(gè)VM之間都可以通的話酥郭,大家算一下要多少的流表——這個(gè)資源是有限的。實(shí)際上不會(huì)所有的VM之間都有通訊的要求愿吹,根據(jù)業(yè)務(wù)部署可能只有很少數(shù)量的VM之間才會(huì)通信的要求不从,所以這樣的方案很節(jié)省流表的資源。這個(gè)方案如果說有缺點(diǎn)的話是什么呢犁跪,因?yàn)樗倪@個(gè)首包上送給了控制器椿息,越到后期在控制器這塊的壓力就會(huì)越來越大。這個(gè)問題怎么解決我們后面講坷衍。
再看騰訊的方案寝优。騰訊數(shù)據(jù)中心的情況是,他們自己已經(jīng)有云管理平臺(tái)枫耳,有自己的vSwitch乏矾,只是需要我們的物理交換機(jī)和控制器。這個(gè)方案展開一看大家會(huì)發(fā)現(xiàn)跟我剛剛講的這個(gè)浙江政務(wù)云的方案其實(shí)是很類似的迁杨,也是SDN加Overlay的方案钻心。只不過在這個(gè)方案里面,第一铅协,不是所有的設(shè)備都是我們的捷沸,所以需要我們?cè)谖覀兊目刂破魃厦嬗幸恍〇|西跟騰訊的云管理平臺(tái)進(jìn)行對(duì)接;第二狐史,就是規(guī)模的問題痒给,騰訊讓我們建立這樣的數(shù)據(jù)中心到什么規(guī)模呢?物理的服務(wù)器一萬五千臺(tái)骏全。這給我們整個(gè)管理帶來了很多的挑戰(zhàn)侈玄,我們?cè)趺床拍懿渴鹂刂破鞴芾硪蝗f五千臺(tái)的服務(wù)器,幾十萬的虛機(jī)吟温?下面講一下我們這個(gè)集群管理的部署方案以及具體的優(yōu)化。
講解控制器部署之前突颊,我們花一點(diǎn)時(shí)間進(jìn)入控制器軟件的內(nèi)部鲁豪,看看這個(gè)Controller的軟件架構(gòu)÷赏海可以看到我們也用一些開源的工具爬橡,然后之后呢還有一些各種層面的模塊。我們?nèi)タ匆幌戮唧w的邏輯圖棒动,可能看的更清楚一點(diǎn)糙申。
我們把控制器分成不同的層次:最下面我們稱之為南向接口層,有OpenFlow船惨、NetConf/XMPP柜裸、BGP等等不同的數(shù)據(jù)協(xié)議缕陕,這是因?yàn)榭刂破魍乱芾聿煌墓?jié)點(diǎn),這些不同的角色(vSwitch或物理交換機(jī))使用的協(xié)議不一樣疙挺。
第二層是SAL適配層扛邑,這一層屏蔽了不同的廠商/不同的設(shè)備對(duì)南向提供接口的差別,讓上層的模塊運(yùn)行起來可以僅僅針對(duì)他關(guān)心的業(yè)務(wù)處理铐然,而不用關(guān)心不同廠商的API有什么差別蔬崩。
再往上就是基礎(chǔ)的網(wǎng)絡(luò)功能模塊,這一塊沒什么說的搀暑。再往上就是內(nèi)置應(yīng)用沥阳。在SDN里面有兩種應(yīng)用,一種是內(nèi)置的應(yīng)用——就運(yùn)行在SDN的控制器上自点,還有一種外置的應(yīng)用——在上面桐罕。我們看到這里有Overlay模塊:最關(guān)鍵的計(jì)算都是由這個(gè)Overlay模塊完成的。
再往上就是北向接口層了樟氢,就是可編程的控制器要對(duì)外提供一個(gè)良好的編程接口冈绊。
還有一部分就是管理層,有軟件的管理埠啃、軟件自身的升級(jí)死宣、增加模塊,還有生命周期管理碴开、集群的管理毅该,還有一些UI的界面。
講完這個(gè)層次圖以后潦牛,回到剛剛的問題上眶掌。我們Overlay的過程——送給控制器,下發(fā)流表把這個(gè)包返回給vSwitch進(jìn)行轉(zhuǎn)發(fā)巴碗,這個(gè)是一次首包上送朴爬。這個(gè)方案所造成的問題就是對(duì)控制器的計(jì)算能力提出挑戰(zhàn)。所以我們?cè)谶@個(gè)方案里面重點(diǎn)優(yōu)化首包上送的處理能力橡淆,對(duì)剛剛的結(jié)構(gòu)不停的優(yōu)化召噩、進(jìn)行重構(gòu)。
最后我們做到什么性能呢逸爵?標(biāo)準(zhǔn)的Intel i7 4核處理器上具滴,可以做到500k的處理能力。在這個(gè)基于Java的架構(gòu)上师倔,我想再做出質(zhì)的提升恐怕就很困難了构韵。
那么這一個(gè)控制器能管理多大的網(wǎng)絡(luò)?瓶頸在首包上送的能力,我們可以計(jì)算一下:一個(gè)服務(wù)器有1個(gè)vSwitch疲恢,跑20-30個(gè)VM凶朗,每秒大概可以產(chǎn)生500以上的新流,就是每秒有500次跟一個(gè)新的冈闭、不同的設(shè)備通信俱尼。那么用我們剛剛的首包上送一除就知道,500K的TPS性能萎攒,一個(gè)控制器大概可以管理一千個(gè)Host遇八;當(dāng)一個(gè)數(shù)據(jù)中心規(guī)模在15k的時(shí)候,單節(jié)點(diǎn)控制器肯定搞不定了耍休,就需要控制器集群刃永。
我們把所有的控制器就是稱之為一個(gè)團(tuán)隊(duì)(team),一部分成員是領(lǐng)導(dǎo)者(leader)羊精,一部分是成員(member)斯够。Leader對(duì)上提供北向的訪問接口,負(fù)責(zé)對(duì)cluster進(jìn)行管理喧锦;Member就負(fù)責(zé)管理控制交換機(jī)读规,連接交換機(jī)的方式就是剛剛講的南向接口。
單一的節(jié)點(diǎn)可能會(huì)不安全或者是不可靠燃少,所以就提供了另外一個(gè)東西就是Region束亏。我們把所有的leader放在一個(gè)Region里,作為主集群阵具,其他的作為備份碍遍,這樣就保持這個(gè)集群有一個(gè)持續(xù)的不間斷的對(duì)外提供北向接口的能力。下面這些member劃了一個(gè)一個(gè)Region阳液,一個(gè)Region中有多個(gè)Member怕敬,Switch要同時(shí)連接到一個(gè) Region中的所有Member上,并選取一個(gè)作為主帘皿。這樣的好處是什么呢东跪?一個(gè)switch有多個(gè)member,如果我的主域宕掉了鹰溜,這個(gè)switch發(fā)現(xiàn)了以后就可以從剩余的里面選擇一個(gè)新的虽填,備變?yōu)橹鳎@樣就可以提供一個(gè)不間斷的服務(wù)能力奉狈。
我們拿兩臺(tái)服務(wù)器做主,然后劃分15個(gè)Region涩惑,一個(gè)控制器可以管理一千臺(tái)的服務(wù)器仁期,15個(gè)正好是15000臺(tái)。總的來說就是對(duì)控制器進(jìn)行分層的設(shè)計(jì)跛蛋,讓leader提供向北接口熬的,member提供向南接口。
簡(jiǎn)單介紹一下我們實(shí)現(xiàn)這個(gè)集群采用的技術(shù)赊级。Team管理功能押框,是在Zookeeper之上封裝的,這個(gè)Team實(shí)現(xiàn)了成員管理理逊、leader選舉橡伞、上報(bào)Team事件,具體的方式是很標(biāo)準(zhǔn)的Zookeeper使用方式晋被,這個(gè)就不多說了兑徘。
那么還有一個(gè)重要的問題,不是說你的成員加入集群就完事兒了羡洛,我剛剛講騰訊的方案的時(shí)候挂脑,騰訊的云管理平臺(tái)上有大量的VM的信息,這些需要你做一個(gè)模塊抓取過來欲侮,要在你所有的控制器之間共享崭闲,所以說就需要有一些數(shù)據(jù)在所有的控制器間共享,也就是HA威蕉。按照我們做網(wǎng)絡(luò)的習(xí)慣刁俭,我們把HA分成兩種功能,一個(gè)是實(shí)時(shí)備份忘伞,一個(gè)是批量備份薄翅,目標(biāo)就是希望這個(gè)HA系統(tǒng)對(duì)上述的APP是不可見的,具體看一下實(shí)現(xiàn)氓奈。
第一個(gè)就是BUS翘魄,它提供通訊的通道,當(dāng)你寫入一個(gè)數(shù)據(jù)的時(shí)候舀奶,就在主那里創(chuàng)建一個(gè)單元暑竟,發(fā)現(xiàn)這個(gè)節(jié)點(diǎn)發(fā)生變化,就把這個(gè)單元讀出來育勺,這個(gè)數(shù)據(jù)就傳過去了但荤。
KeyStore,實(shí)現(xiàn)了一個(gè)非常簡(jiǎn)單的數(shù)據(jù)庫功能涧至,采用Key-Value機(jī)制腹躁,不支持范圍查找,只提供了設(shè)置和獲取接口南蓬,沒有通知接口纺非。有的同學(xué)會(huì)問了哑了,說你們跟Zookeeper干上了是吧?那我們做開發(fā)的人都知道烧颖,當(dāng)我們熟悉一個(gè)工具的時(shí)候弱左,就會(huì)很自然的重復(fù)使用,盡量用熟為止炕淮。
實(shí)際使用當(dāng)中的實(shí)時(shí)備份過程就是這樣的拆火,很簡(jiǎn)單,集群中某個(gè)成員業(yè)務(wù)數(shù)據(jù)變化時(shí)涂圆,發(fā)送bus消息通知其他成員们镜,同時(shí)將本成員的運(yùn)行數(shù)據(jù)以key&value的形式保存在KeyStore中。
批量備份就是當(dāng)新的控制節(jié)點(diǎn)加入時(shí)乘综,KeyStore就會(huì)自動(dòng)將其他節(jié)點(diǎn)的數(shù)據(jù)備份到本地憎账,App需要先從KeyStore中恢復(fù)數(shù)據(jù),當(dāng)恢復(fù)完成后卡辰,再開始接收bus消息胞皱。做keyStore數(shù)據(jù)恢復(fù)時(shí),要求bus可以從批備開始的時(shí)間點(diǎn)開始緩存bus消息九妈,等恢復(fù)完成后補(bǔ)報(bào)這些bus消息反砌,這樣就可以保證了最終數(shù)據(jù)的同步。
本文轉(zhuǎn)載自:http://www.infoq.com/cn/articles/sdn-stories-distributed-practice