UCloud基於P4交換機的雲平台網路實踐

UCloud基於P4交換機的雲平台網路實踐

來自專欄大U的技術課堂10 人贊了文章

自2012年UCloud成立起,虛擬網路始終是IaaS產品的一個核心組件,也經過了多次演進。演進中我們始終思考的是:如何在不增加用戶成本的情況下為用戶提供更可靠、更快速的網路。而答案則是要求技術團隊不斷採用新技術,來同時滿足租戶隔離、轉發能力、穩定性等多種需求。

我們最早的SDN方案在轉發麵是採用Open vSwitch(以下簡稱OVS)來實現,控制面是自研的控制器。期間亦首先採用盛科的SDN交換機,來解決物理機(bare metal)和公有雲之間的互訪需求。為解決SDN交換機OpenFlow流表條目有限的問題,UCloud開始採用DPDK技術的網關集群來替代SDN交換機。經過實踐檢驗的各種DPDK網關,越來越多地出現在UCloud的雲平台中,為用戶提供更快速的網路能力。

DPDK的不足

隨著2017年25G網路開始迅速被採用,對UCloud的虛擬網路又提出了更高的挑戰。在此背景下,DPDK也逐漸暴露出了一些不足:

  • – 基於DPDK的應用可以達到很高的包轉發速率,但這是通過多伺服器、多核負載均衡實現的。且負載均衡演算法通常是由硬體交換機或者網卡實現的,並不能被軟體定義。如果網路中出現單個大象流,無法被硬體交換機或者網卡的負載均衡演算法很好的分發,就會造成單根網線或者單個CPU Core出現擁塞,對業務造成巨大影響。
  • – 隨著網路帶寬從10G向25G、40G、50G、100G的演進,DPDK需要更強力的CPU才能夠達到線速,而更強力的CPU通常價錢也很昂貴,不利成本。特別是單Core的主頻越高,價格越貴,且主頻增加之間和價格增加是非線性關係。

兩個被排除的方案

2017年中UCloud開始對新的SDN硬體卸載方案做評估:

首先進入我們視野的是基於VXLAN VTEP的解決方案。此類方案通常由交換機廠商提供包括SDN Controller在內的整套解決方案,比較適合私有雲的環境部署。但缺點也很顯而易見:封閉、非標準化、無法定製。通常用戶只能通過北向廠商特有的API方式和此類方案進行交互。且此類方案通常只支持10w左右的虛擬網路MAC地址,很難滿足UCloud的業務需要。此外UCloud對基於Ethernet Over GRE(Linux GRETAP)的Overlay封裝有需求,但沒有一家硬體交換機支持該Overlay協議。

接下來我們又把目光投向了支持OpenFlow 1.3協議的硬體交換機。經過一番預研和測試,我們發現支持OpenFlow 1.3協議的硬體交換機和OVS間存在著巨大的GAP。實際上不可能把我們的OpenFlow流表移植到硬體交換機上。除了同樣不支持Ethernet Over GRE協議外,我們OVS上使用的Flow Based Tunneling特性也沒有硬體交換機支持。

P4進入視野

2017年Q4,我們開始預研Barefoot的支持P4的可編程交換機(Tofino晶元),很快發現了它能夠很好地滿足我們的需求。

提到P4和Barefoot就不能不提Nick Mckeown教授。2007年Nick和夥伴們一起創立了Nicira Networks公司,也幾乎標誌著「軟體定義網路(SDN)」這個產業的誕生。Nicira作為OpenFlow的大本營,接連發布了NOX和Open vSwitch作為OpenFlow的重要組件。

2012年VMware收購Nicira後,Nick認為SDN的第二步則是發展為它專門優化的硬體設備,又和同伴共同發起了對數據包進行處理的編程語言P4(Programming Protocol-Independent Packet Processors),幫助網路用戶擺脫被晶元硬體廠商各種協議的制約。

– P4在設計上具備如下優點:

– 可靈活定義轉發設備數據處理流程,且可以做到轉發無中斷的重配置。

– 轉發設備協議無關轉發。

– 設備無關性。

2013年Nick成立了Barefoot Networks公司,致力於開發基於P4的網路晶元Tofino和軟體開發套件Capilano,並幫助P4社區發展壯大。

Barefoot支持P4的可編程交換機(基於Tofino晶元),具備如下優點:

– 相對DPDK更高的轉發性能

– 1.8T ~ 6.5T線速轉發

– 更低時延

– 單線最高100G,避免單線擁塞

– 轉發性能可預期,DPDK的轉發性能隨業務模型可能變化

– 相對其他硬體交換機,更開放

– 可編程能力強,轉發麵p4lang定製開發

– 完美解決Ethernet Over GRE和Flow Based Tunneling的問題

– 開發效率高

– 控制面可通過Apache Thrift、gRPC介面遠程管理

– 操作系統採用 Open Network Linux(基於Debian)

– 生態圈:P4 Runtime、Stratum

P4 Switch架構

1.控制面實現

最初我們準備修改Barefoot提供的switch.p4來實現我們的功能,但嘗試閱讀代碼後發現switch.p4雖然完整的包含交換機所需要的功能,但很多特性我們並不需要,所以我們沒有選擇修改、裁剪switch.p4,而是自己從頭開始寫一個更符合自身需求的控制面。

NOS這層參考我們之前開發DPDK程序的經驗,完全通過Linux來實現。P4代碼會把所有非Ethernet Over GRE封裝的報文當做控制報文送到CPU口。CPU口在Linux上就是一個虛擬網卡,報文再通過Kernel轉發到hostif的虛擬網卡上。hostif的虛擬網卡上配置IP地址,ARP學習等功能都通過Linux Kernel來實現。Quagga等Userspace的程序就通過hostif虛擬網卡上的IP和上級路由器跑BGP,再將學習到的路由寫到Kernel的路由表。我們直接開發的APP模塊以bf_switchd插件的方式載入,通過netlink介面學習Kernel的ARP表、路由表,調用P4代碼編譯後生成的API寫入Tofino晶元。

Controller這一層最早我們是通過P4編譯器生成的Apache Thrift介面將數據下發到bf_switchd,然後寫入Tofino晶元。但通過簡單的性能測試發現,由於Apache Thrift介面設計的限制,每次RPC調用只能配置一條數據,因此需要配置大量數據時性能很不理想。為此我們在APP模塊中啟動了gRPC server,重新定義了批量下發配置的介面,將配置下發速度提升了8倍。未來我們計劃將控制面演進到P4 Runtime和Stratum。

2.Sharding

P4可編程交換機的PPS或者BPS性能很強能夠線速轉發,對比DPDK,制約單機性能的瓶頸主要出現在交換機的DRAM和TCAM上。畢竟DPDK跑在X86伺服器上內存64G起步,512G也不稀奇,而交換機晶元上的內存資源就相對要少很多。

為了突破單台交換機的資源瓶頸,我們設計了將數據按租戶分片的方案,從而實現了水平擴展的目標。

首先採用64口P4可編程交換機作為接入層,主要實現數據分片和灰度發布的能力。例如採用VNI的後6位分為64個分片,為每個分片指定一個下一跳地址,從而達到整個集群的資源水平擴展的能力。

3.強灰度能力

傳統上網路設備通常採用主備、或者主主的方式部署,當需要升級的時候將全部流量切到一半設備上,另外一半設備下線升級,升級完成後再重新加入集群分擔一半的流量。這種升級方式簡單粗放,在UCloud我們提出了更高的要求。我們軟體行業的現狀就是不論花多大的成本去測試,真正的用戶行為總是不可能被窮盡的,缺陷總是會有的,這時我們最後的安全網就是「灰度發布」。在現網真實環境作為終極測試的同時,通過控制變更範圍儘可能的減少風險;一旦真的有缺陷快速回滾,最大程度的降低影響面。在UCloud我們堅定的在每個產品上採用按賬號灰度發布,即使是在虛擬網路設備上。

我們將灰度發布交換機軟體的能力Buildin在Access層:

1. 當需要升級交換機軟體時,將預留灰度交換機安裝新版本軟體;

2. 按照灰度賬號定義新的數據分片,指定灰度交換機同步新的數據分片;

3. 按照VNI+源地址或VNI+目的地址配置灰度規則按VM的粒度將流量切換到灰度交換機處理;

4. 切換完成後立刻自動回歸測試,Ping檢測各種場景下的網路互通性是否正常;

5. 測試通過則逐步增加灰度的VM地址,直到整個VPC的流量全部切換到灰度交換機;

6. 再切換一個新的VPC,直到所有分片內的VPC都切換到新的交換機下;

7. 舊的交換機下線清洗,安裝新版本軟體,直到整個集群完成升級。

通過這種傳統網路設備完全不同的升級方式,在SDN軟體快速迭代的背景下,有力地保障了SDN網路的可靠性。

P4 Switch應用

P4可編程交換機在UCloud規劃的使用場景包括:

– 支持租戶的增強交換和路由

– 物理機接入虛擬網路

– 一致性哈希ECMP負載均衡

– 流量限速與計費

– ARP代理

– 等等

目前UCloud已經採用P4可編程交換機完成了新一代交換網關UXR的開發和測試工作,同時部署了一個地域並切換灰度流量進行驗證。

總結

Barefoot的Tofino晶元在2018年初量產後,P4可編程交換機開始逐漸出現在市場上,但仍是一個新興事物。不可否認目前確實還有一些不足之處,但UCloud確實看到它和之前的交換機相比,能給軟體工程師無與倫比的自由度。

在6月27日Barefoot CEO Craig Barratt先生一行來UCloud總部的技術交流中,大家也認為通過緊密合作,能夠產生更加貼切需求、切實解決痛點的可定製解決方案。我們相信憑藉持續的技術演進,可以不斷為雲平台用戶提供更快速更強大的網路能力,就像Barefoot主頁所說,We can now finally say 「Software is eating the network」。

參考鏈接:

P4: p4.org/

Barefoot: barefootnetworks.com/

Quagga: quagga.net/

DPDK: dpdk.org/

Open vSwitch: openvswitch.org/

想要獲取更多技術和活動資訊,關注「UCloud技術公告牌」微信公眾號;或搜索微信ID:ucloud_tech進行關注。

推薦閱讀:

公有雲按秒計費的難度是什麼?
從0到數千萬日活,靠什麼?音樂+社交
人腦「接」電腦?六個大蒜?三喪S8又跪了?[上周發生了神馬]
微軟的決絕:抱緊雲與 AI 的未來
雲計算impala和oozie學習之路

TAG:雲平台 | 交換機 | 雲計算 |