
這個系列總共有三篇,分別在:
肖宏輝:GCP 網絡系統Andromeda --- 概述篇
肖宏輝:GCP 網絡系統Andromeda --- 控制面
肖宏輝:GCP 網絡系統Andromeda --- 數據面
最近看了Google在2018年的一篇NSDI文章,介紹他們的數據中心SDN方案Andromeda,原文在[1]。最近計劃用三篇,分別從概述,控制面和數據面,再結合一些自己的理解,介紹一下這個系統。這是第一篇:概述。
GCP(Google Cloud Platform)眼中虛擬網絡
云計算的興起給網絡技術帶來了新的機遇和挑戰。對于Cloud中的常規三大服務,計算,存儲,網絡。對應網絡部分,需要在具備高性能大規模能力的同時,也支持一系列的功能,例如LB,FW,VPN,QoS,Dos protection,隔離,NAT等等。更具體的來看,云環境中的虛擬網絡,應該具備以下能力:
- 作為最基本的需求,需要為獨立的用戶提供隔離的虛擬網絡。每個虛擬網絡中的虛擬機運行在獨立的私有IP網絡中。對于這個虛擬網絡,其中的虛擬機之間應該能相互通信;虛擬機與云環境中的公共服務(DNS,軟件源等)能通信;虛擬機與外部第三方服務商能通信;虛擬機與互聯網能通信。所有這些通信要受用戶策略的控制,同時不同的用戶可以使用不同的策略,達到不同的控制效果。另外,理想情況下,虛擬網絡應該提供與underlay物理網相同的吞吐量和時延。
- 除了最基本的連通性,還需要支持持續的功能演進。隨著時間的推移,一些新的功能會不停的添加進來,例如計費,DoS防護,性能監控,防火墻等,甚至架構也可能面臨重大的調整,例如Andromeda就經歷過從早期的OS kernel datapath遷移到了現在的OS kernel bypass的datapath。持續的功能演進不是難點,難點是演進的過程中,要使得虛擬機不受到影響。
- 云計算的一個好處就是相比普通的部署具備了更高的可用性,因為一整套的軟件可控系統,可以很方便的provision,scale,migrate服務。所以虛擬網絡的可用性,穩定性及其重要,在設計上也要小心考慮,盡量縮小系統的出錯域(錯誤的影響范圍)
- 為了滿足上面兩點,虛擬機的Live-Migration(熱遷移)成為了必要條件。為了支持Live-Migration,虛擬網絡需要確保遷移過程中packet仍然能傳輸,并且盡量較少網絡性能下降的時間(遷移過程中網絡性能下降在所難免,但是持續時間應盡量減少)
- GCP(Google Cloud Platform)成長的很快,表現在兩個維度:GCP內虛擬網絡的個數;每個虛擬網絡中的虛機的個數,因此,網絡控制面的性能變得非常重要。超大的云平臺中,虛擬網絡控制面主要有三個挑戰:首先轉發表更大(單個虛擬網絡中虛機更多);轉發表需要被發布的范圍更廣(虛擬網分布在更多的主機上);變化的頻率更高
虛擬網絡和SDN的研究和內容已經很多,比如高速的dataplane,分布式控制平面,各種虛擬網絡功能,但是似乎并沒有對于一整套端到端可用系統的研究。Andromeda,作為GCP的網絡虛擬化系統,就是這么一個端到端的系統。
Andromeda架構
GCP有一套完整的管理系統,可以配置存儲,計算,網絡,權限等,而Andromeda是作為GCP管理系統中的網絡部分存在。另一方面,GCP由多個cluster組成,一個cluster就是一批位置相近的物理服務器,它們具有相同的物理網絡連通性,同時也有相同的物理網絡錯誤域。Andromeda在每個cluster中都有一套獨立的程序,這個在后面介紹。
本質上來說,Andromeda是一個SDN系統。所以,與其他的SDN系統一樣,它包含了控制面和數據面。Andromeda的核心設計思想也很簡單通俗:就是分層,包括了分層的控制平面和分層的數據平面。
控制面
Andromeda的控制面可以支持超過10W VM的虛擬網絡,變更生效時間的中位數在184ms。并且操作一個用戶虛擬網絡,不會對其他虛擬網絡造成影響。有關控制面的實現細節在下一篇詳細介紹。
數據面
Andromeda的數據面由多層的datapath組成,根據所需要的功能和性能,網絡流量被分配到其中一條路徑。
- Host Fast Path:顧名思義,這個datapath運行在虛擬機所在的主機上。這是所有虛機packet看到的第一個datapath。它以犧牲靈活性為前提,提供了高性能的轉發,目前可以實現300ns/packet的轉發速度。為了達到這個數字,Host Fast Path被設計的只能簡單的處理有限種類的packets。其他的packets被送到其他的datapath來處理。
- Host Coprocessor path:這個datapath也運行在虛機所在的主機上。Host Fast Path處理不了的packet被送到了Coprocessor path。這個datapath用來處理對CPU消耗較高,且對時延無要求的網絡流量。同時也被用來實現網絡功能,例如Stateful 防火墻,LB等。所有功能性的東西被放到Coprocessor path,這樣可以讓Fast path專心做高性能轉發。
- Hoverboard datapath。Hoverboard是專門的gateway節點,這個datapath就是運行在這些節點上。理論上Coprocessor + Fast path應該處理所有的網絡流量,但是為了提升控制面的性能和規模,不是所有的轉發信息都會下發到主機。大部分的idle和long-tail流量,被送到Hoverboard節點,被Hoverboard datapath轉發。
此外,Andromeda采用的是高性能、基于軟件的底層方案,而不是類似于SR-IOV這種基于硬件的方案。使用硬件方案,可以很容易的得到與underlay物理網絡一樣的性能。但是相比之下,軟件方案更加靈活,能支持更快速的功能迭代,能更容易的支持Live-Migration,因為SR-IOV需要考慮遷移前后不同的物理網卡的配置問題。除此之外,SR-IOV因為依賴硬件網絡,會受到硬件表項的限制。對于一些網絡功能,可能會引入額外的專用設備,進而增加網絡轉發的overhead。
最后,一個Cluster中,Andromeda所有的組件如下圖所示,其中有一些已經提到過,有一些還沒有提到,我們會在接下來的兩篇具體的分析每一個組件。

[1] https://www.usenix.org/system/files/conference/nsdi18/nsdi18-dalton.pdf