編者按:在archsummit北京2015大會上,來自青雲的工程師陳海泉分享了《sdn/nfv 2.0架構剖析》的議題。對於青雲來說,sdn/nfv2.0是乙個新的突破。早在2023年,青雲在第一代公有雲產品中就上線了sdn技術。隨著使用者量越來越大,私有網路裡面的 vm 數量超過一定的數量級的時候,效能問題逐漸成為瓶頸。在2023年下半年,青雲經過重點研發,推出了sdn/nfv 2.0。
\\ sdn 就是軟體定義網路。當然也不是所有網路定製一定要軟體來實現,因為有很多硬體方案也可以做到 sdn 的效果。青雲 qingcloud 用軟體定義來實現虛擬網路。
\\ vpc 是什麼意思呢?vpc 網路是 qingcloud 環境內可以為使用者預配置出的乙個專屬的大型網路。在 vpc 網路內,使用者可以自定義 ip 位址範圍、建立子網,並在子網內建立主機/資料庫/大資料等各種雲資源。
\\ 正是因為雲計算需要虛擬網路,也需要 vpc 。所以我們還需要定義乙個 sdn 方案解決這兩個需求,現有的 sdn 方案主要分成兩個方向:\\
\\ qingcloud 在 sdn 方案的選型上也做過討論,用軟體還是用硬體方案?其中考慮的問題主要是以下三個方面:\\
綜合以上三方面的原因,我們決定開發一套新的sdn/nfv 2.0 方案,取代 1.0 。
\\ 既然定了要自己做一套新的方案,怎麼去實現?我們做了一些總結,新的產品需要滿足傳統 sdn 的需求。第一,資料封裝。也就是實現乙個基本的虛擬網路;第二,實現控制平面。二層、三層的網路資料進行路由規則的同步,然後下發到虛擬的交換機和路由器裡面去,控制做到 arp 泛洪抑制;第三,實現資料平面。除了 dvr 之外,還提供了虛擬邊界路由器。
\\ 除此之外,還需要增加我們需要的 2.0 方面的功能。\\
下面分別解釋剛才說的那幾個基礎實現。
\\ 首先解釋虛擬網路。在一些大公司裡會提供一種叫內部郵遞的服務。公司員工之間可以傳送一種快遞,比如要給財務部門某同事發乙個**單,會查他的工位,知道他坐在哪,比如 184-323-534 。然後準備乙個大信封,把要填的單子放在裡面。我不需要知道這個人是在北京,還是在上海,我把這個信封交給公司的收發室,這個收發室會對這個信封進行重新封裝,因為他有此員工的具體位址,然後把具有新位址的信封交給外包快遞公司。放到雲計算裡,這就是乙個虛擬網路。可以允許使用者自己定義乙個位址,然後進行傳輸,為了讓它在三層網路裡傳輸,可以再進行封裝,再套乙個包,寫上新的位址。根據外包的內容和裡層包的內容把這個資料報傳送到對應的資訊那裡。
\\ 虛擬網路依賴於拆包、分包。現在採用的方案主要是比較流行的 vxlan,因為 vxlan 有一系列的優勢。第一,隧道連線一組物理機,由於 vxlan 的資料報在整個**過程中保持了內部資料的完整,因此 vxlan 的資料平面是乙個基於隧道的資料平面;第二,使用 upd 協議,當資料報交給網絡卡的時候,網絡卡根據這個資料的包頭,用不同的網絡卡佇列。這樣把包交給不同的cpu處理,提公升效能;第三, 是比較有爭議的 flood \u0026amp; learn 自動管理虛擬網路,vxlan 可以進行泛洪學習,當 vtep 收到乙個 udp 資料報後,會檢查自己是否收到過這個虛擬機器的資料,避免組播學習。
\\ 通過以上幾點,我們覺得 vxlan 不錯,但是仔細的去想,就發現它有兩個非常大的不足。乙個是組播協議,大規模部署會受硬體裝置組播路由限制;第二,泛洪學習的機制,會把原來在二層廣播的 arp 包擴大到三層網路,這樣隨著規模擴大,廣播越來越多,會嚴重的浪費頻寬資源。所以,我們既要使用 vxlan ,又要消滅它的不足,所以我們設定了 sdn 控制器,通過我們自己設定的規則,取代它自有的泛洪學習規則。
\\ 那麼這個控制器需要多少個呢?我之前曾經了解過一些使用者生產環境裡用到的控制器,通常只有乙個。它負責整個集群中所有節點的規則,這麼做造成乙個問題,當集群建立、銷毀、遷移的時候,需要把規則同步到整個集群所有的節點中,這樣隨著使用者秒級建立資源的需求,同步規則的流量就會相當相當大。所以我們做了乙個分布式控制器,不僅把控制器分布到 vpc ,還分布到虛擬網路裡頭。每個 vpc 有 253 個虛擬網路。
\\ 剛才說了虛擬網路和控制器,第三點 sdn 需要做的就是控制資料平面,其作用就是把資料報真的從乙個地方拷貝到另外乙個地方。傳統的資料平面,比如 openstack 通常會用 ovs ,ovs 會有乙個問題,它會把資料交給另外乙個程式,這樣會帶來乙個效能的下降,而我們的方案完全改變了這個問題,自己做了一些 kernel 的改動,將**放到 linux kernel 上,而且我們是用 nfv 來實現的。
\\ 同時我們引入了乙個新的功能叫做 dvr (分布式虛擬路由器)。通過上面的**釋一下我們為什麼需要dvr。左邊是這張是物理拓撲圖,物理世界中 a 和 b 通訊,需要把資訊傳送到 a 的交換機,然後到路由器,然後路由器轉給 b 的交換機,b 的交換機再傳送給 b ,a 和 b 通常需要 4 跳才能發乙個資料報。
\\ 我們 1.0 的時候,也是用 nfv 實現的 sdn ,我們會模仿物理世界,虛擬出虛擬的路由器和交換機提供給使用者。如果 a、b、c、d、e 這五個裝置分別位於五個不同的虛擬機器上,在邏輯上 a 的包經過c、e、d、b 才能到,邏輯上是四跳。但是虛擬裝置每一跳都要通過物理裝置去交換,而物理裝置每一條四跳,這樣總得**量實際上需要 16 跳。這也就是為什麼 1.0 的效能總是上不去。為了解決這個問題,我們引入了 dvr ,從 a 到 b 還是這樣,兩個 dvr 之間直接交換一下資料就可以了,因為在邏輯上有一跳,所以總數跟原來物理裝置一樣,四跳完成乙個資料報的轉換,這樣效能就可以非常接近物理機的效能,從而可以組成乙個大的虛擬網路。
\\ qingcloud 的 dvr 除了實現 vpc 簡單的功能之外,它實際上是乙個複雜的東西。因為除了保持自己跟自己的虛擬網路,還需要有其他四個方向:第乙個就是閘道器需求,我們需要提高公網 ip 儲存量,希望 dvr 把包發到公網閘道器;第二是 vpc 的虛擬機器要能跟硬體裝置進行高度的互訪。因為我們私有雲使用者的機房裡,不止有 qingcloud 的東西,還有 oracle 的資料庫、f5 的路由器等等,假如我們讓使用者把這些業務放到虛擬網路裡,虛擬網路就要跟硬體網路進行高速的互訪。第三是vpc,可以讓使用者定義 255 個 c 段,加起來可以有 60000 多個虛擬機器。第四是,我們還提供了乙個邊界路由器,可以讓使用者虛擬資源跟遠端的 idc 之間做乙個互通。最後乙個就是乙個負載均衡器集群,我們的 dvr 就是乙個平台,讓使用者的主機和負載均衡器直接相連。
\\ 我們做的最後乙個功能就是負載均衡器集群。設計是這樣,我們有乙個閘道器集群連著網際網路。比如我有乙個 ip 1.1 ,實際上是繫結在 vg 1 這裡,vg 1 會做第一次的流量**,會把流量按照使用者定義的負載均衡器節點數量**到自己私有的負載均衡器節點裡(1、2、3),它的特點就是,返回流量不需要經過進來的這個閘道器,而是經過自己對應的不同物理閘道器傳送到網際網路。因為當 vg 1 能力受到限制的時候,假如我們所有流量都從它回去的時候,它自己的網路頻寬實際上就是整個集群的能力。而我們把它分散之後,就可以做到,出去的流量幾乎是沒有限制。只要我們的 vg 裝置有多少,它的頻寬就會有多少,因為流量不需要從預設的線路回去。同時隨著使用者拓展負載均衡器節點的數量,也擴充套件了 https 的解除安裝能力,並且我們做到了 4 層/ 7 層的完全透明,也就是說使用者通過網際網路訪問到他們業務的時候,我們在所有**過程中,都會保留其原位址,使用者這邊得到的包是直接來自網際網路使用者的 ip 位址。
\\ 感謝魏星對本文的審校。
\\
不墜青雲之志,反思眼前問題
上學期不幸掛科,要反省自己以往的學習效率是否不夠高還是有其他原因。從課堂上知識點沒有掌握好一步步到考前絕對時間不夠,深覺自己需要通過鍛鍊學會時間管理 碎片化時間的利用以及高效率做事,要有所取捨。碎片化點滴知識攝入,通過一定量的積累,可以建立乙個完整的知識拼圖,對於在眼前的考試中取得好成績而言,集中學...
計蒜客 青雲的機房組網方案
含n 10w 個結點的樹。邊權為 1 點權ai 1,10w 求點權互質的點之間的距離之和。include include include include define rep x,st,en for int x st x en x pragma comment linker,stack 102400...
青雲SDN NFV2 0架構剖析
編者按 在archsummit北京2015大會上,來自青雲的工程師陳海泉分享了 sdn nfv 2.0架構剖析 的議題。對於青雲來說,sdn nfv2.0是乙個新的突破。早在2013年,青雲在第一代公有雲產品中就上線了sdn技術。隨著使用者量越來越大,私有網路裡面的 vm 數量超過一定的數量級的時候...