下一代超大規(guī)模軟件定義網(wǎng)絡(luò)技術(shù)實(shí)踐

責(zé)任編輯:editor006

作者:Jerry

2016-01-29 14:49:38

摘自:SDNLAB

下面就是具體的計(jì)算機(jī)技術(shù)細(xì)節(jié):實(shí)現(xiàn)虛擬網(wǎng)絡(luò),比較流行的數(shù)據(jù)封裝協(xié)議是 VXLAN ,因?yàn)?VXLAN 相比傳統(tǒng)的 GRE 協(xié)議有一系列的優(yōu)勢。

云計(jì)算的 IT 架構(gòu)已經(jīng)在企業(yè)應(yīng)用中表現(xiàn)出明顯優(yōu)勢,但網(wǎng)絡(luò)設(shè)計(jì)理念卻必須是一種推倒重來的思想。為了適應(yīng)云計(jì)算的靈活、彈性擴(kuò)展、高效和低成本,網(wǎng)絡(luò)設(shè)計(jì)要進(jìn)化為集中式軟件管理,可編程化,控制轉(zhuǎn)發(fā)層面分離等。本次陳海泉分享了關(guān)于下一代超大規(guī)模軟件定義網(wǎng)絡(luò)技術(shù)實(shí)踐。

 

以下是本次分享的內(nèi)容整理。

大家好,我是 QingCloud 的工程師陳海泉,今天給大家分享一些 SDN/NFV 2.0 架構(gòu)的網(wǎng)絡(luò)技術(shù)。我解釋一下什么是 SDN,SDN 就是軟件定義網(wǎng)絡(luò)。當(dāng)然也不是所有網(wǎng)絡(luò)定制一定要軟件來實(shí)現(xiàn),因?yàn)橛泻芏嘤布桨敢部梢宰龅?SDN 的效果。

青云QingCloud 用軟件定義來實(shí)現(xiàn)虛擬網(wǎng)絡(luò),我們 2013 年的時(shí)候,在公有云上線了第一代產(chǎn)品。當(dāng)時(shí) SDN 還是一個(gè)比較新鮮的事情,用戶用的還比較少。到了今天,SDN已經(jīng)開始普及,連私有云用戶也在使用基于SDN的VPC。

隨著用戶量越來越大,第一版的 SDN 提供的私有網(wǎng)絡(luò)里面的 VM 超過一定的數(shù)量的時(shí)候,我們發(fā)現(xiàn)性能就有一個(gè)比較大的損失,已經(jīng)無法滿足企業(yè)用戶的需求。所以我們在去年下半年的時(shí)候,花了很大功夫去做 SDN/NFV 2.0 的事情。

 

考慮到很多人對計(jì)算機(jī)網(wǎng)絡(luò)不熟悉,我先補(bǔ)充下網(wǎng)絡(luò)基本原理:計(jì)算機(jī)網(wǎng)絡(luò)分 7 層。 SDN 相關(guān)的主要是二層和三層網(wǎng)絡(luò)。二層是數(shù)據(jù)鏈路層,使用 MAC 為地址通信,二層網(wǎng)絡(luò)中的成員通過交換機(jī)連接起來。成員間的應(yīng)用軟件雖然以 IP 為地址通信,但是通信之前,操作系統(tǒng)會通過 ARP 協(xié)議,把目標(biāo) IP 轉(zhuǎn)換成 MAC 地址,然后再發(fā)送數(shù)據(jù)包。交換機(jī)根據(jù)數(shù)據(jù)包的目標(biāo) MAC 地址,進(jìn)行數(shù)據(jù)包的投遞。二層網(wǎng)絡(luò)中,會用到單播,廣播和組播三種方式。

三層是網(wǎng)絡(luò)層,使用 IP 為地址通信。三層網(wǎng)絡(luò)就是用路由器將不同的二層網(wǎng)絡(luò)連接在一起,形成一個(gè)可擴(kuò)展的網(wǎng)絡(luò)。通信方式可以是單播和組播,但不能是廣播。路由器的作用就是根據(jù)路由表,找出目標(biāo) IP 對應(yīng)的 MAC 地址。數(shù)據(jù)包往往通過多個(gè)路由器之間轉(zhuǎn)發(fā),才會送到目標(biāo)地址。

基本知識介紹到這里,現(xiàn)在說一下為什么需要 SDN 。

首先,虛擬化技術(shù)帶來的好處是用戶的 VM 分布在物理機(jī)集群上面,出于負(fù)載均衡,和服務(wù)高可用的目的,需要在物理機(jī)之間遷移 VM ,并且遷移之后 IP 地址不變。

在早期的虛擬化方案中,物理機(jī)集群比較小,全部是一個(gè)二層網(wǎng)絡(luò), VM 使用物理設(shè)備分配的 IP 地址時(shí),發(fā)生遷移之后, IP 本身就不會變化。但是隨著云計(jì)算的發(fā)展,虛擬化的物理集群需要被部署在更大的三層網(wǎng)絡(luò)上,這時(shí)候 VM 再使用物理 IP 地址,是不能夠保證 IP 不變的,因?yàn)檫w移到了別的二層網(wǎng)絡(luò),對應(yīng)的路由器就不認(rèn)識原來的地址了, VM 要繼續(xù)工作,必須更換成當(dāng)前網(wǎng)絡(luò)的 IP 地址。

這個(gè)時(shí)候,就需要網(wǎng)絡(luò)虛擬化技術(shù),也就是通過 SDN 給 VM 定義虛擬的 IP 段,這個(gè)虛擬的網(wǎng)絡(luò)可以分散在整個(gè)三層網(wǎng)絡(luò)上,使得 VM 遷移后, IP 地址不變。這個(gè)IP地址跟物理的路由器,交換機(jī)沒什么關(guān)系,可以隨便定義。隨著云計(jì)算的發(fā)展,單靠網(wǎng)絡(luò)虛擬化技術(shù),仍然滿足不了用戶大規(guī)模部署的需求,這時(shí)就需要有 VPC 。

VPC 是什么意思呢? VPC 是用戶定義的一個(gè)專屬的大型三層網(wǎng)絡(luò)。在 VPC 網(wǎng)絡(luò)內(nèi),用戶可以自定義 IP 地址范圍、創(chuàng)建子網(wǎng),并在子網(wǎng)內(nèi)創(chuàng)建主機(jī)/數(shù)據(jù)庫/大數(shù)據(jù)等各種云資源。

簡單的說,虛擬網(wǎng)絡(luò)指的是虛擬二層網(wǎng)絡(luò), VPC 指的是虛擬三層網(wǎng)絡(luò)。在 VPC 里面,還需要能做到不同 VPC 之間, IP 地址復(fù)用。因?yàn)樗接?IP 段有限制,不同的用戶,可以使用相同的 IP 地址,卻不互相影響。

正是因?yàn)樵朴?jì)算需要虛擬網(wǎng)絡(luò),也需要 VPC 。所以需要一個(gè) SDN 方案解決這兩個(gè)需求,現(xiàn)有的 SDN 方案主要分成兩個(gè)方向:

用軟件來定義,但是用硬件來實(shí)現(xiàn)。比如某些帶 SDN 功能的交換機(jī),把它采購進(jìn)來,部署到產(chǎn)品里,用硬件廠商提供的 API ,就能定義虛擬網(wǎng)絡(luò),實(shí)現(xiàn) VPC 功能。

NFV,就是網(wǎng)絡(luò)功能虛擬化,用軟件的方式來實(shí)現(xiàn)虛擬的交換機(jī)和路由器,把他們組織,并管理起來,讓上層應(yīng)用能夠定義虛擬網(wǎng)絡(luò)。其代表有 VMware NSX 、 JuniperOpenContrail、OpenStackDVR 等等。

 

QingCloud 在 SDN 方案的選型上也做過討論,用軟件還是用硬件方案?其中考慮的問題主要是以下三個(gè)方面:

成本。在公有云上面大家拼的是成本,誰的硬件成本低,誰就能把價(jià)格降到最低。如果我們采用硬件方案,在網(wǎng)絡(luò)設(shè)備上面需要增加了很多投資,要替換掉幾乎所有的網(wǎng)絡(luò)設(shè)備。

設(shè)備依賴。我們的私有云賣的是軟件,客戶可以按照偏好選擇自己的硬件,假如 QingCloud 的 SDN 綁定了某款硬件產(chǎn)品,那我們在面對企業(yè)客戶的時(shí)候,可能連招標(biāo)的機(jī)會都沒有,因?yàn)榭蛻敉凶约旱牟少徢?,指定的硬件品牌?/p>

情懷。對于工程師來說,自然是想把產(chǎn)品做得更優(yōu)秀。參考下優(yōu)秀的傳統(tǒng)行業(yè),就能明白這一點(diǎn)。
其實(shí),計(jì)算機(jī)網(wǎng)絡(luò)跟傳統(tǒng)快遞行業(yè)非常的接近,我在后面解釋網(wǎng)絡(luò)知識時(shí),也會拿快遞打比方。

為什么說快遞跟計(jì)算機(jī)網(wǎng)絡(luò)接近呢?因?yàn)榫W(wǎng)絡(luò)中的交換機(jī)、路由器,其實(shí)跟快遞行業(yè)里的快遞員和包裹集散中心非常相似,用戶發(fā)包裹給快遞員以后,快遞員會送到快遞集散中心,這里可以查詢包裹應(yīng)該被送到哪個(gè)地方,然后再將包裹經(jīng)過多個(gè)快遞集散中心層層轉(zhuǎn)運(yùn),才會送到收件人那里。

順豐在中國應(yīng)該是最好的快遞公司之一,因?yàn)樗艳D(zhuǎn)運(yùn)環(huán)節(jié)都做全了,只有方方面面都能夠控制才能實(shí)現(xiàn)壓倒性的優(yōu)勢。

上面的插圖給了順豐航空的一個(gè)截圖。我是看到了這張圖,才明白為什么他們能夠比別家送得快。因?yàn)樗麄儾粌H有自營的快遞轉(zhuǎn)運(yùn)點(diǎn),連飛機(jī)都是自己買的。

因此,我們?nèi)绻褦?shù)據(jù)包轉(zhuǎn)發(fā)的每個(gè)流程都控制到,就有可能在整體系統(tǒng)上面做到最優(yōu),而采用硬件設(shè)備實(shí)現(xiàn)這些功能的話,最后帶來的是同質(zhì)化,跟競爭對手相比不會有任何的優(yōu)勢。

綜合以上三方面的原因,我們決定開發(fā)一套新的 SDN/NFV2.0 方案,取代 1.0 。

 

開發(fā)一套新的SDN/NFV 2.0 方案, 也就是自營航空公司。既然定了要自己做一套新的方案,怎么去實(shí)現(xiàn)?我們做了一些總結(jié),新的產(chǎn)品首先需要滿足傳統(tǒng) SDN 的功能。需要做到三點(diǎn):

數(shù)據(jù)封裝。也就是實(shí)現(xiàn)一個(gè)虛擬網(wǎng)絡(luò);

實(shí)現(xiàn)控制平面。對二層、三層的網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)和路由規(guī)則的同步,然后下發(fā)到虛擬的交換機(jī)和路由器里面去,同時(shí)需要做到 ARP 泛洪抑制;

實(shí)現(xiàn)數(shù)據(jù)平面。我們使用了叫做 DVR 的linux kernel模塊實(shí)現(xiàn)的數(shù)據(jù)平面,同時(shí)還提供了虛擬邊界路由器,提供vpn,隧道等高級功能。

下面分別解釋這三點(diǎn):

首先解釋下虛擬網(wǎng)絡(luò)。 虛擬網(wǎng)絡(luò)直接說比較難以理解,但是類比到傳統(tǒng)行業(yè),就好解釋了。

 

在一些大公司里會提供一種叫內(nèi)部郵件的服務(wù)給員工,比如要給財(cái)務(wù)部門某同事發(fā)一個(gè)報(bào)銷單,會查他的工位,比如 2pw067 。然后準(zhǔn)備一個(gè)信封,把要填的單子放在里面, 收件人地址就填 2pw067 。我不需要知道這個(gè)人是在北京,還是在上海,直接用工位號就能發(fā)件。我把這個(gè)信封交給公司的收發(fā)室。收發(fā)室其實(shí)不具備郵遞能力,但是他們也能做快遞業(yè)務(wù),方法就是對這個(gè)信封進(jìn)行重新封裝,收發(fā)室有個(gè)地址本,能查到 2pw067 這個(gè)工位對應(yīng)的辦公樓具體地址。

然后用一個(gè)大信封,把我原來的信封裝進(jìn)去,收件人填目標(biāo)辦公樓的收發(fā)室員工名字,收件地址是實(shí)際的街道地址,然后把具有新地址的信封交給真正的快遞公司,比如順豐??爝f公司會把信封發(fā)送到對應(yīng)的辦公樓,然后那邊的收發(fā)室把外層信封拆掉,將里面的信封交給具體的收件人。

拿計(jì)算機(jī)的術(shù)語來講,內(nèi)部郵件系統(tǒng)就是虛擬快遞公司,真正派件的快遞公司,叫做物理快遞公司。虛擬網(wǎng)絡(luò)非常類似,允許用戶通過自己定義的地址,進(jìn)行傳輸。這個(gè)地址用戶隨便定義,反正物理網(wǎng)絡(luò)看不到這個(gè)地址,也就不受任何限制。

物理機(jī)收到 VM 發(fā)的包后,會對數(shù)據(jù)包做封裝,再套一個(gè)信封,也就是加個(gè)包頭,寫上目標(biāo)物理機(jī)的地址。物理網(wǎng)絡(luò)設(shè)備,根據(jù)新的包頭把這個(gè)數(shù)據(jù)包發(fā)送到對應(yīng)的物理機(jī),然后物理機(jī)那邊的終端會把數(shù)據(jù)包拆開,將里面的數(shù)據(jù)包轉(zhuǎn)發(fā)到目標(biāo) VM 。

這里的封包,拆包就是 Overlay 技術(shù),也叫數(shù)據(jù)封裝。聽起來很高大上,其實(shí)傳統(tǒng)行業(yè)幾百年前就實(shí)現(xiàn)了。

下面就是具體的計(jì)算機(jī)技術(shù)細(xì)節(jié):實(shí)現(xiàn)虛擬網(wǎng)絡(luò),比較流行的數(shù)據(jù)封裝協(xié)議是 VXLAN ,因?yàn)?VXLAN 相比傳統(tǒng)的 GRE 協(xié)議有一系列的優(yōu)勢。

隧道連接一組物理機(jī)。 VXLAN 發(fā)包時(shí),可以任意指定目標(biāo)物理 IP 地址和 ID ,不像 GRE 那樣,要在兩邊配置點(diǎn)對點(diǎn)的連接;

使用 UDP 協(xié)議。 UDP 協(xié)議的特點(diǎn)是有端口。發(fā)包時(shí)每個(gè)連接都使用不同的源端口。當(dāng)數(shù)據(jù)包交給目標(biāo)服務(wù)器網(wǎng)卡的時(shí)候,網(wǎng)卡根據(jù)這個(gè)數(shù)據(jù)的包頭的 IP/端口做 HASH 運(yùn)算,用于選擇不同的網(wǎng)卡隊(duì)列。而每個(gè)網(wǎng)卡隊(duì)列會綁定到一個(gè) CPU 上面,這樣把包會交給不同的 CPU 處理,提升總體性能;

使用基于組播的 Flood & Learn 模式自動(dòng)管理虛擬網(wǎng)絡(luò)。這個(gè)功能會大幅降低組件虛擬網(wǎng)絡(luò)的復(fù)雜度,因?yàn)?VXLAN 的終端,會根據(jù)數(shù)據(jù)包包頭的內(nèi)容,自動(dòng)建立,并維護(hù)一個(gè)轉(zhuǎn)發(fā)表?;匕臅r(shí)候,根據(jù)轉(zhuǎn)發(fā)包找到目的物理機(jī)的地址。
這里的轉(zhuǎn)發(fā)表,拿之前的例子說明,就是企業(yè)內(nèi)部郵件收發(fā)室的地址本,把虛擬地址和物理地址對應(yīng)上。 VXLAN 的這個(gè)特殊功能,就是能夠自動(dòng)建立地址本。

基于以上幾點(diǎn),我們覺得 VXLAN 不錯(cuò),但是仔細(xì)的去想,就發(fā)現(xiàn)它有兩個(gè)非常大的不足:

發(fā)送廣播包時(shí),使用了組播協(xié)議,大規(guī)模部署會受硬件設(shè)備組播路由限制。它在二層網(wǎng)絡(luò)中使用時(shí),沒什么問題,但是在三層網(wǎng)絡(luò)中使用時(shí),物理路由器上會建立大量的組播路由條目,影響路由器性能,并且增加了路由器運(yùn)維的難度。

Flood& Learn 的機(jī)制,會把原來在二層廣播的 ARP 包擴(kuò)大到三層網(wǎng)絡(luò)。
第二點(diǎn)解釋起來比較復(fù)雜,先從 ARP 原理講起。 ARP 的作用是把 IP 地址轉(zhuǎn)換成 MAC 地址。在發(fā)包方,如果遇到不認(rèn)識的 IP 地址,會發(fā)個(gè)廣播包到當(dāng)前的二層網(wǎng)絡(luò),內(nèi)容大概是:誰的 IP 是 1.2.3.4 ,請告訴 1.2.3.5 。所有網(wǎng)絡(luò)成員都會收到這個(gè)包,但是只有 1.2.3.4 會回包給 1.2.3.5 。這樣, 1.2.3.5 就知道了 1.2.3.4 的 MAC 地址,接下來他們就能夠通過 MAC 地址互相通信。 Flood & Learn 的原理就是學(xué)習(xí) ARP 廣播包的行為,建立轉(zhuǎn)發(fā)表。

拿之前的企業(yè)內(nèi)部郵件做例子,收發(fā)室收到目標(biāo)地址是 2pw067 的郵件時(shí),他一開始不知道這個(gè)地址在幾樓的哪個(gè)辦公室,他會群發(fā) Email 到寫字樓的全體員工,說有 2pw067 的包裹。這樣收件人會到收發(fā)室取郵件,同時(shí)把自己的 Email 告訴收發(fā)室。

此時(shí),收發(fā)室的這個(gè)人,會默默在自己的小本上加一行: 2pw067 的 Email 是 XXX@yunify.com 。這樣下次在有到 2pw067 的郵件,他直接給 XXX@yunify.com 發(fā)郵件,通知他來取件,而不是群發(fā)所有人。這個(gè)方式最大的問題是,收發(fā)室老會群發(fā)郵件,而且他每隔一段時(shí)間,就要確認(rèn)下 2pw067 的 Email 有沒有發(fā)生變化。這樣隨著規(guī)模擴(kuò)大,廣播越來越多,會嚴(yán)重的浪費(fèi)帶寬資源。

雖然物理網(wǎng)絡(luò)也會使用 ARP 廣播,但是廣播被限制在二層網(wǎng)絡(luò)里面。而虛擬網(wǎng)絡(luò)的載體,實(shí)際是三層的物理網(wǎng)絡(luò),廣播實(shí)際上可能被發(fā)送到整個(gè)數(shù)據(jù)中心的所有物理機(jī)。在大規(guī)模部署虛擬網(wǎng)絡(luò)時(shí),ARP 浪費(fèi)的帶寬可能占網(wǎng)絡(luò)流量的一半以上。

要解決這個(gè)問題,需要做到兩點(diǎn):

攔截 ARP 廣播,避免發(fā)送到全局;

使用控制器同步地址本,代替 Flood & Learn 功能。
所以,需要有 SDN 控制器,通過同步規(guī)則,取代 VXLAN 自有的 Flood& Learn 功能。

也就是說,有個(gè) HR ,每當(dāng)有員工人入職,工位變動(dòng)時(shí),就把他的工位發(fā)到公司所有寫字樓的收發(fā)室,不讓他們用廣播的方式學(xué)習(xí)地址。而且收發(fā)室收到群發(fā)郵件時(shí),會主動(dòng)回包,而不是把廣播包轉(zhuǎn)發(fā)到別的收發(fā)室。

那么這個(gè)控制器需要多少個(gè)呢?我之前曾經(jīng)了解過一些 SDN 方案,通常只有一個(gè)。它負(fù)責(zé)同步整個(gè)集群中所有節(jié)點(diǎn)的規(guī)則,這么做帶來一個(gè)問題,當(dāng) VM 創(chuàng)建、銷毀、遷移的時(shí)候,控制器需要把新的規(guī)則同步到整個(gè)集群所有的節(jié)點(diǎn)中。

而優(yōu)秀的云計(jì)算平臺,能夠讓用戶秒級創(chuàng)建資源。 VM 創(chuàng)建、銷毀、遷移這種事情,在集群中無時(shí)無刻都存在,同步規(guī)則會變得相當(dāng)頻繁。所以我們做了一個(gè)分布式控制器,不僅把控制器分布到每個(gè) VPC ,還分布到每個(gè)虛擬網(wǎng)絡(luò)里。

剛才說了虛擬網(wǎng)絡(luò)和控制器,第三點(diǎn) SDN 需要做的就是控制數(shù)據(jù)平面,其作用就是把數(shù)據(jù)包從網(wǎng)卡拷貝到 VM 。

傳統(tǒng)的數(shù)據(jù)平面,比如 OpenStack 通常會用 OVS 。 OVS 會有一個(gè)問題,它會把數(shù)據(jù)包傳到 UserSpace ,因?yàn)橛袀€(gè)應(yīng)用程序,根據(jù)流表決定數(shù)據(jù)包如何轉(zhuǎn)發(fā),這樣會帶來性能的下降。

而我們的方案完全避免了這個(gè)問題,使用自己研發(fā)的 DVR 取代 OVS ,所有數(shù)據(jù)轉(zhuǎn)發(fā)都在 LinuxKernel 中完成。 DVR 就是分布式虛擬路由器。它實(shí)際上是一個(gè)帶路由器的交換機(jī),同時(shí)具有二層交換,和三層路由的功能。

DVR 這個(gè)概念,幾乎在所有先進(jìn)的 NFV 方案的 SDN 中都有,比如 OpenStack 的 DVR , VMware NSX 的邏輯路由器,OpenContrail 的 vRouter 。

他們名字雖然不同,但是本質(zhì)是相同的,也就是說,讓每個(gè)計(jì)算節(jié)點(diǎn)都擁有虛擬的交換機(jī)和路由器。聽起來很簡單,但是實(shí)現(xiàn)它有很大困難,其中之一就是:同一個(gè)網(wǎng)絡(luò)的 DVR, MAC,IP 地址都是相同的,這在物理網(wǎng)絡(luò)里面是無法想象的,因?yàn)榇蚱屏司W(wǎng)絡(luò)的基本規(guī)律。

但是 DVR 卻是 NFV 方案的一個(gè)關(guān)鍵。

 

如上圖所示,我們解釋一下為什么需要 DVR 。左邊是這張是物理拓?fù)鋱D,物理世界中 A 和 B 通信,需要把信息發(fā)送到 A 的交換機(jī),然后到路由器,然后路由器轉(zhuǎn)給 B 的交換機(jī),B 的交換機(jī)再發(fā)送給 B ,A 和 B 通常需要 4 跳才能發(fā)一個(gè)數(shù)據(jù)包。

我們 1.0 的時(shí)候,也是用 NFV 實(shí)現(xiàn)的 SDN ,我們會模仿物理世界,發(fā)明出虛擬的路由器和交換機(jī)提供給用戶。請看中間這張圖,如果 A、B、C、D、E 這五個(gè)設(shè)備分別位于五個(gè)不同的物理機(jī)上,在邏輯上,A-> B 的包經(jīng)過 C、E、D 才能到 B ,邏輯上是 4 跳。但是虛擬設(shè)備每一跳都要通過物理機(jī)去轉(zhuǎn)發(fā),而物理機(jī)之間發(fā)包都需要 4 跳,這樣總得轉(zhuǎn)發(fā)量實(shí)際上需要 16 跳。

這也就是為什么我們 SDN 1.0 的性能總是上不去。隨著規(guī)模增加,邏輯上每增加 1 跳,物理上就增加 4 跳,性能隨規(guī)模衰減得厲害。

為了解決這個(gè)問題,我們引入了 DVR 。請看右邊這張圖, A 和 B 的物理機(jī)都有 DVR ,從 A 到 B 只在兩個(gè) DVR 之間直接交換一下數(shù)據(jù)就可以了,這樣在邏輯上只有一跳。所以物理層面上跟左邊的圖一樣, 4 跳完成一個(gè)數(shù)據(jù)包的轉(zhuǎn)換,這樣就可以非常接近物理機(jī)的性能,在大規(guī)模部署時(shí),保持高性能。

使用 DVR 的另外一個(gè)原因,就是虛擬網(wǎng)絡(luò)設(shè)備性能弱于物理設(shè)備,在物理設(shè)備部署拓?fù)渖?,?jīng)常有匯聚節(jié)點(diǎn),成為網(wǎng)絡(luò)瓶頸。由于物理設(shè)備能力很強(qiáng),很容易就能達(dá)到 40 G ,或更高帶寬,匯聚幾次沒什么關(guān)系;而虛擬設(shè)備作為匯聚節(jié)點(diǎn)時(shí),往往就限制了它管理的網(wǎng)絡(luò)整體能力,因?yàn)樘摂M匯聚設(shè)備會成為性能瓶頸。使用 DVR 同時(shí)意味著不再有匯聚節(jié)點(diǎn),因?yàn)樗谐蓡T都是點(diǎn)對點(diǎn)直接通信。

這個(gè)在物理設(shè)備上無法實(shí)現(xiàn),因?yàn)椴豢赡馨阉性O(shè)備連成一個(gè)大網(wǎng),而虛擬網(wǎng)絡(luò)設(shè)備上,是可以實(shí)現(xiàn)的,因?yàn)樗麄兿噙B,只是加幾條轉(zhuǎn)發(fā)規(guī)則而已,而不是真的需要去點(diǎn)對點(diǎn)地連接網(wǎng)線。

有了上面三個(gè)功能,就是通常意義上的 SDN 了。然而我們在做云計(jì)算平臺時(shí),通過長時(shí)間的積累,還發(fā)現(xiàn)了很多需求:

 

VPC,并且 VPC 主機(jī)直接綁定公網(wǎng) IP 。

負(fù)載均衡器??稍诠W(wǎng)網(wǎng)關(guān)上對入流量進(jìn)行分流,轉(zhuǎn)發(fā)到多個(gè)負(fù)載均衡器節(jié)點(diǎn)。

VM 使用基礎(chǔ)網(wǎng)絡(luò)時(shí),也就是物理網(wǎng)絡(luò)的 IP 地址在遷移后不變。

VPC 和物理網(wǎng)絡(luò)高效連接。
下面分別解釋。

首先是 VPC ,青云QingCloud VPC 功能是 1 月 6 號上線的,我們只上線了一周就賣掉了第一批上線的所有物理資源。因?yàn)槲覀児性频拇笥脩粢呀?jīng)深深的認(rèn)識到必須要有一個(gè) VPC 才能支持自己的海量的資源。業(yè)務(wù)真的到了一千個(gè) VM 以上的時(shí)候,就需要有一個(gè)高效的三層網(wǎng)絡(luò),取代二層網(wǎng)絡(luò)。

我們 VPC 設(shè)計(jì)是支持 64000 臺虛擬機(jī),代表著我們控制器控制規(guī)則有可能是 6 萬條,假如我們把跟 6 萬條規(guī)則同步到每個(gè) DVR 上去,這同步量非常大。

相信靠我寫的代碼完全不可能實(shí)現(xiàn)。所以設(shè)計(jì)一開始就給他設(shè)計(jì)了一個(gè)學(xué)習(xí)的能力。學(xué)習(xí)不是是基于泛洪的學(xué)習(xí),而是根據(jù)用戶的行為對他進(jìn)行學(xué)習(xí)。

這個(gè)學(xué)習(xí)功能,還是拿快遞打比方。

快遞員通常收到郵件時(shí),會把郵件發(fā)到郵件集散中心,那里有人去查地址本,決定郵件對應(yīng)的下一個(gè)郵件集散中心是哪個(gè)。然后會交給郵遞員經(jīng)行投遞。我們假設(shè)每個(gè)快遞員都能夠把包裹投遞到任何一個(gè)地方,也就是擁有 DVR 的能力。

當(dāng)發(fā)件郵遞員投送發(fā)給oc的包裹到北辰購物中心 2 號樓時(shí),他多做一件事情,給收件的快遞員打個(gè)電話,告訴他說:哥們,你以后再收到發(fā)給 oc 的包,直接交給我,不用送到郵件集散中心。這樣收件快遞員更新自己的地址本,記上: oc 的包,給快遞員老王,讓他直接去派送。下次,再有包給 oc 時(shí),他把包交給老王,老王直接派送給 oc ,不必去郵件集散中心繞路。

這就是 VPC 主動(dòng)學(xué)習(xí)功能的基本原理,能夠?qū)崿F(xiàn)超大規(guī)模的三層網(wǎng)絡(luò),卻不必同步大量的轉(zhuǎn)發(fā)規(guī)則。

 

請看上面的圖。有兩個(gè)虛擬網(wǎng)絡(luò),都在同一個(gè) VPC 之間,當(dāng)他們建立之后,兩個(gè) VM 分別加入兩個(gè)網(wǎng)絡(luò),它們沒有任何的溝通。最開始通信的時(shí)候,左邊 VM 跟右邊的 VM 發(fā)包,通過默認(rèn)路由線路(郵件集散中心),經(jīng)過兩個(gè)節(jié)點(diǎn)中轉(zhuǎn),當(dāng) DVR 發(fā)現(xiàn)這兩個(gè)虛擬機(jī)真的要互相訪問的時(shí)候,才會把規(guī)則同步過去。

雖然一開始的時(shí)候性能稍微差一點(diǎn)。但是用著用著就快了,因?yàn)?DVR 學(xué)習(xí)到了規(guī)則。這樣,不需要真的同步 6 萬條規(guī)則到 6 萬個(gè) DVR 節(jié)點(diǎn),真正的用戶即使有了 6 萬臺虛擬機(jī),也不可能時(shí)時(shí)刻刻都進(jìn)行著點(diǎn)對點(diǎn)互相訪問,一定會按照自己的業(yè)務(wù)往下拓展,某些 VM 之間才需要互相訪問,大部分 VM 之間其實(shí)不需要互相訪問。這樣看來,完全沒必要同步所有 6 萬條規(guī)則,只需要學(xué)到其中幾千條有用的就行了。

 

DVR 除了實(shí)現(xiàn) VPC 功能之外,還有許多別功能。請看上面這張圖,除了 VPC ,還有其他四個(gè)方向。

第一個(gè)就是公網(wǎng)網(wǎng)關(guān),為了提高公網(wǎng)訪問性能,DVR 跟公網(wǎng)網(wǎng)關(guān)可以直連;

第二是 VPC 的虛擬機(jī)要能跟硬件設(shè)備進(jìn)行高度的互訪,因?yàn)槲覀兯接性朴脩舻臋C(jī)房里,不止有虛擬機(jī),還有 Oracle 的數(shù)據(jù)庫、F5 的路由器等等,假如我們讓用戶把這些業(yè)務(wù)放到虛擬網(wǎng)絡(luò)里,虛擬網(wǎng)絡(luò)就要跟硬件網(wǎng)絡(luò)進(jìn)行高速的互訪,VPC 跟物理網(wǎng)絡(luò)互訪通過給 VM 綁定物理網(wǎng)絡(luò) IP 實(shí)現(xiàn),也就是說一個(gè) VPC 的虛機(jī),除了有自定義的虛擬 IP 地址外,還能有一個(gè)對應(yīng)的物理網(wǎng)絡(luò) IP , DVR 會做地址轉(zhuǎn)換,把物理 IP 轉(zhuǎn)換成私有 IP ,實(shí)現(xiàn)跟硬件網(wǎng)絡(luò)高速互聯(lián)。

第三是 VPC ,可以讓用戶定義 255 個(gè) C 段,加起來可以有 60000 多個(gè)虛擬機(jī)。

第四,我們還提供了一個(gè)邊界路由器,可以讓用戶虛擬資源跟遠(yuǎn)程的 IDC 之間做一個(gè)互通。
除了 VPC ,我們?yōu)樗接性朴脩粼O(shè)計(jì)了 VBC 功能。 VBC 的特點(diǎn)是里面的 VM ,全部可以直接使用物理網(wǎng)絡(luò)定義的 IP 地址,而且具備 VPC 的所有功能。 VBC 是一個(gè)私有網(wǎng)絡(luò)和物理路由器的混合網(wǎng)絡(luò),能夠做到使用物理IP地址的同時(shí),能讓 VM 在集群中任意遷移,有保持 IP 地址不變。

 

最后一個(gè)就是負(fù)載均衡器集群,設(shè)計(jì)是這樣,我們有一個(gè)網(wǎng)關(guān)集群連著因特網(wǎng)。比如我有一個(gè) IP 1.2.3.4 ,入流量發(fā)送到 VG 1 這里。VG 1 會做第一次的流量轉(zhuǎn)發(fā),把流量轉(zhuǎn)發(fā)到用戶自己私有的負(fù)載均衡器節(jié)點(diǎn)里(LB node1、2、3)。它的特點(diǎn)是,返回流量不需要經(jīng)過進(jìn)來的 VG 1,而是經(jīng)過 LB node 對應(yīng)的不同物理網(wǎng)關(guān)發(fā)送到因特網(wǎng)。

因?yàn)楫?dāng) VG1 能力受到限制的時(shí)候,假如我們所有流量都從它回去的時(shí)候,它自己的網(wǎng)絡(luò)帶寬實(shí)際上就是整個(gè)集群的能力,而我們把它分散之后,就可以做到,出去的流量幾乎是沒有限制,只要我們的 VG 設(shè)備有多少,它的帶寬就會有多少,因?yàn)榱髁坎恍枰獜哪J(rèn)的線路回去。同時(shí)隨著用戶拓展負(fù)載均衡器節(jié)點(diǎn)的數(shù)量,也擴(kuò)展了 HTTPS 的卸載能力。

并且我們做到了 4 層/ 7 層的完全透明,也就是說用戶通過因特網(wǎng)訪問到他們業(yè)務(wù)的時(shí)候,我們在所有轉(zhuǎn)發(fā)過程中,都會保留其原地址,用戶這邊得到的包是直接來自因特網(wǎng)用戶的 IP 地址。

Q&A

1、問題:有的 SDN 必須更換新的物理服務(wù)器;有的 SDN 不需要。請幫忙分析一下。

必須更換新的物理服務(wù)器的這種 SDN ,屬于硬件方案,軟件定義網(wǎng)絡(luò),硬件實(shí)現(xiàn)網(wǎng)絡(luò)。典型的產(chǎn)品是思科N9000 系列交換機(jī)。有的 SDN 不需要換設(shè)備,因?yàn)榇a跑在 X86 服務(wù)器上,也就是 NFV 實(shí)現(xiàn)。

2、問題:據(jù)了解你們新的 SDN 里面 VM 遷移可以保持 IP 不變,你是怎么實(shí)現(xiàn)的?

因?yàn)?VM 的 IP 在二層網(wǎng)上,使用了虛擬網(wǎng)絡(luò),將分散在不同物理機(jī)上的 VM ,都連成了一個(gè)二層網(wǎng),但是路由器使用的是物理路由器,做到了遷移后,IP 不變,也就是虛擬交換機(jī)+物理路由器。

3、問題:LB 能否直接連接后端服務(wù)器?

可以,不管是 VPC ,還是基礎(chǔ)網(wǎng)絡(luò),都可以,而且 TCP/HTTP/HTTPS 全透明,后端直接獲得客戶端源地址。

4、提問:剛才提到 DVR ,能不能詳細(xì)介紹一下。怎么實(shí)現(xiàn)?

具體實(shí)現(xiàn)比較復(fù)雜,我們改了 LinuxKernel ,讓它能夠適應(yīng) DVR、MAC、IP 重復(fù)的情況。因?yàn)橥粋€(gè)網(wǎng)段的 VM ,網(wǎng)關(guān)的 MAC、IP 都的是一樣,而這些 VM 又需要有各自的 DVR 。我們改了很多虛擬交換機(jī)的邏輯,也發(fā)明了一些功能才做到,但是不太容易解釋。而且虛擬網(wǎng)絡(luò)還能讓用戶使用虛 IP ,這也是 DVR 的一個(gè)難點(diǎn)。我之后還看了下 AWS 的 VPC 功能,他們還不能允許用戶定義隨便 VIP 。

5、提問:計(jì)算機(jī)都是和本地 L3 出去,在兩個(gè)網(wǎng)端,那你這個(gè)從本地的 L3 到外網(wǎng)那個(gè) L3 這怎么算?

從本地的 L3 到外網(wǎng)那個(gè) L3 ,在 DVR 層面就是兩個(gè)虛擬路由器之間的轉(zhuǎn)發(fā),邏輯上也是一跳。

6、提問:SDN和NFV有啥區(qū)別?

SDN 只要求軟件定義網(wǎng)絡(luò),可以是硬件實(shí)現(xiàn), NFV 表示用軟件實(shí)現(xiàn)虛擬網(wǎng)絡(luò),屬于 SDN 的一種。

7、提問:一個(gè) VPC 對應(yīng)一個(gè) VXLANID ?可以對應(yīng)多個(gè)嗎?

青云QingCloud 的 VPC 可以包含 253 個(gè) VXNET ,就是虛擬網(wǎng)絡(luò),每個(gè) VXNET 對應(yīng)一個(gè) VXLAN ID 。 VXLAN 網(wǎng)關(guān)是分布式,一個(gè) VXLAN 有很多 DVR 。

8、提問:一個(gè) VPC 內(nèi)網(wǎng)關(guān)是不是分布式的,同一個(gè) HOST 內(nèi)的兩臺 VM ,不同網(wǎng)段互訪可以本地 DVR 轉(zhuǎn)發(fā),還是要到專門的網(wǎng)關(guān)設(shè)備?

本地 DVR 轉(zhuǎn)發(fā),通過學(xué)習(xí)功能建立路由表。

9、提問:VXLAN 控制平面的自動(dòng)學(xué)習(xí)是怎么實(shí)現(xiàn)的?

我們自己發(fā)明的一個(gè)學(xué)習(xí)方法,要求 DVR 之間能夠互相溝通。之前有講過,就是那個(gè)快遞員之間打電話的例子。

10、提問:SDN Controller 是你們自己研發(fā)的,還是開源的?

是我們研發(fā)的

11、提問:DVR 的配置下發(fā)是怎么實(shí)現(xiàn)的,是由 SDN Controller 下發(fā)的嘛?南向用了什么協(xié)議?

Controller 下發(fā)部分規(guī)則,建立默認(rèn)的路由表,更多是靠 DVR 的學(xué)習(xí)功能,里面學(xué)習(xí)機(jī)制的通信是我們定義的,路由同步是標(biāo)準(zhǔn)的 BGP/OSPF 這些。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號