Google Cloud 的網(wǎng)絡(luò)設(shè)計(jì),googlecloud的網(wǎng)絡(luò)設(shè)計(jì)Google Cloud 的網(wǎng)絡(luò)設(shè)計(jì)最近看了18年Google在NSDI上一篇介紹Google Compute Platform中整體網(wǎng)絡(luò)設(shè)計(jì)的論文。這篇論文從GCP面臨的大規(guī)模且變化頻繁的網(wǎng)絡(luò)挑戰(zhàn)講起,介紹了控制平面和數(shù)據(jù)平面的設(shè)計(jì)和改造。最終做到......
最近看了18年Google在NSDI上一篇介紹Google Compute Platform中整體網(wǎng)絡(luò)設(shè)計(jì)的論文。這篇論文從GCP面臨的大規(guī)模且變化頻繁的網(wǎng)絡(luò)挑戰(zhàn)講起,介紹了控制平面和數(shù)據(jù)平面的設(shè)計(jì)和改造。最終做到控制平面可以支撐單個(gè)網(wǎng)絡(luò)100000 VM,數(shù)據(jù)平面以純軟件的方式做到接近物理網(wǎng)絡(luò)的性能,吞吐量做到30Gb/s,單核pps做到了三百萬(wàn)。并做到了網(wǎng)絡(luò)在線(xiàn)遷移,數(shù)據(jù)平面可以每周在線(xiàn)升級(jí)的高速靈活迭代。
相比于AWS所有網(wǎng)絡(luò)功能下沉到專(zhuān)門(mén)的硬件卡,Azure使用專(zhuān)門(mén)的FPGA做網(wǎng)絡(luò)加速,GCP只使用了Intel芯片的一些通用offload能力(encryption,checksums,memory copies)。流表查詢(xún),數(shù)據(jù)包轉(zhuǎn)發(fā),ACL,LB,NAT等功能都是純軟件實(shí)現(xiàn)的,基本可以認(rèn)為是當(dāng)前最大規(guī)模純軟件SDN實(shí)踐了,當(dāng)下容器大規(guī)模網(wǎng)絡(luò)設(shè)計(jì)也可以從中借鑒很多思路。
由于GCP在主機(jī)的數(shù)據(jù)平面使用的是OVS,編程模型也用到了OpenFlow(當(dāng)然都魔改了不少),閱讀的時(shí)候免不了會(huì)和OVN做一下對(duì)比。下面會(huì)從GCP網(wǎng)絡(luò)的設(shè)計(jì)目標(biāo),控制平面和數(shù)據(jù)平面分別進(jìn)行介紹。
設(shè)計(jì)目標(biāo)
該網(wǎng)絡(luò)方案在Google的項(xiàng)目名為Andromeda,是仙女座星系的英文。仙女座星系是一個(gè)比銀河系還要大的星系,可見(jiàn)這個(gè)項(xiàng)目的野心。Andromeda的主要設(shè)計(jì)目標(biāo)有下面幾個(gè):
1.控制平面的可擴(kuò)展性和隔離性:由于GCP是公有云,控制平面的穩(wěn)定性和可擴(kuò)展性是重中之重。包括支持單個(gè)網(wǎng)絡(luò)100k VM,單個(gè)的網(wǎng)絡(luò)變更需要在極短時(shí)間內(nèi)同步到整個(gè)集群。目前OVN在這方面做得就不是很好,當(dāng)VM超過(guò)10k,變更的延遲就到了接近分鐘級(jí)別的水平。而Andromeda在100k規(guī)模的變更延遲是186ms。
控制平面的隔離性指的是對(duì)多租戶(hù)的支持,避免單個(gè)租戶(hù)的異常行為對(duì)其他租戶(hù)的擾動(dòng)。例如在某些機(jī)器學(xué)習(xí)場(chǎng)景下單個(gè)網(wǎng)絡(luò)可能會(huì)瞬時(shí)provision 10k VM,其他租戶(hù)的網(wǎng)絡(luò)操作不能因?yàn)檫@個(gè)租戶(hù)的突發(fā)請(qǐng)求而受到影響。
2.數(shù)據(jù)平面的高性能和隔離:數(shù)據(jù)平面的高吞吐和低延遲,同時(shí)要考慮多租戶(hù)的場(chǎng)景避免一個(gè)租戶(hù)搶占其他租戶(hù)的網(wǎng)絡(luò)帶寬和其他資源。
3.可高速迭代:控制平面的可擴(kuò)展性,數(shù)據(jù)平面的高性能以及多租戶(hù)的隔離這幾方面的需求是比較顯而易見(jiàn)的。不過(guò)可高速迭代這個(gè)目標(biāo)卻是我讀論文之前沒(méi)想到的一個(gè)點(diǎn)。一般認(rèn)為網(wǎng)絡(luò)組建作為基礎(chǔ)設(shè)施迭代周期會(huì)比較長(zhǎng),升級(jí)復(fù)雜度也會(huì)比較高。但是在GCP里數(shù)據(jù)平面可以做到每周進(jìn)行線(xiàn)上更新,這樣開(kāi)發(fā)者可以告訴的迭代功能和性能優(yōu)化,充分發(fā)揮了SDN的優(yōu)勢(shì)。作者在presentation上也提到不采用更多硬件加速方案的主要原因就是硬件無(wú)法做到純軟件網(wǎng)絡(luò)的高速迭代。
下面將介紹控制平面和數(shù)據(jù)平面分別是如何設(shè)計(jì)來(lái)滿(mǎn)足這些目標(biāo)的。
控制平面
控制平面最重要的工作是把整個(gè)虛擬網(wǎng)絡(luò)的拓?fù)湟?guī)則下發(fā)給集群里的機(jī)器,可以理解為給每個(gè)機(jī)器一個(gè)地址簿,告知每一個(gè)VM的對(duì)應(yīng)物理機(jī)是哪個(gè),應(yīng)該通過(guò)哪條路徑找到對(duì)應(yīng)的VM。傳統(tǒng)的控制平面數(shù)據(jù)下發(fā)有Preprogrammed,On Demand和Gateway三種方式。
1.Preprogrammed Model:這種模型在我的概念中對(duì)應(yīng)的是fullmesh模型。即每個(gè)宿主機(jī)節(jié)點(diǎn)都需要保存完整的集群網(wǎng)絡(luò)拓?fù)洌瑯?gòu)建完整的轉(zhuǎn)發(fā)地址簿。OVN目前采用的就是這種方式,集群中的每個(gè)節(jié)點(diǎn)之間都需要相互建立隧道,所有跨主機(jī)VM的數(shù)據(jù)包都是直接通過(guò)對(duì)應(yīng)隧道發(fā)國(guó)際快遞對(duì)端機(jī)器。這種方式的好處就是邏輯清晰明了,實(shí)現(xiàn)也相對(duì)簡(jiǎn)單。所有數(shù)據(jù)包都是分布式處理的,集群中的節(jié)點(diǎn)角色也很單純。由于數(shù)據(jù)包直接發(fā)國(guó)際快遞目標(biāo)機(jī)器,沒(méi)有額外的中轉(zhuǎn),理論上數(shù)據(jù)平面的性能也最好。缺點(diǎn)就是任何一個(gè)網(wǎng)絡(luò)變更都需要更新所有節(jié)點(diǎn)的流表,更新的延遲會(huì)隨著規(guī)模變大而迅速上升。此外每臺(tái)機(jī)器都要維護(hù)全局的路由信息,額外的資源消耗也會(huì)隨著規(guī)模變大而增加。
2.On Demand Model:這種模式下本機(jī)不保存全局信息,每個(gè)flow的第一個(gè)包要上傳到控制器,控制器返回對(duì)應(yīng)的路由信息。這種模式的擴(kuò)展性比第一種要好,但是首包的延遲時(shí)間會(huì)顯著上升。并且控制器成為了網(wǎng)絡(luò)的一個(gè)瓶頸,控制器的故障可能會(huì)導(dǎo)致整個(gè)網(wǎng)絡(luò)的中斷。此外惡意的租戶(hù)可能會(huì)利用這個(gè)機(jī)制生成大量的隨機(jī)訪(fǎng)問(wèn),對(duì)控制器進(jìn)行DDOS攻擊來(lái)影響其他租戶(hù)的網(wǎng)絡(luò)質(zhì)量。
3.Gateway Model:只是一種在OpenStack中比較常見(jiàn)的網(wǎng)絡(luò)模式,即使用專(zhuān)門(mén)的網(wǎng)絡(luò)節(jié)點(diǎn)來(lái)處理數(shù)據(jù)包的路由。這種模式下宿主機(jī)端的邏輯大幅簡(jiǎn)化了,只需要知道關(guān)聯(lián)的Gateway節(jié)點(diǎn)把所有數(shù)據(jù)包都轉(zhuǎn)給Gateway節(jié)點(diǎn)就可以了。Gateway專(zhuān)門(mén)用來(lái)處理相應(yīng)的路由更新邏輯。但是缺點(diǎn)是要消耗額外的資源,在不超售的情況下需要額外付出一倍的網(wǎng)絡(luò)資源來(lái)處理網(wǎng)絡(luò)數(shù)據(jù)。即使是進(jìn)行了超賣(mài),由于網(wǎng)絡(luò)流量的變化會(huì)十分劇烈可能會(huì)有上百倍的波動(dòng),如何動(dòng)態(tài)調(diào)度Gateway節(jié)點(diǎn)保證帶寬也是很困難的事情。
可以說(shuō)這三種模式都有各自的問(wèn)題,GCP采用了一種結(jié)合Gateway和On Demand的動(dòng)態(tài)路由卸載模式,并稱(chēng)其為Hoverboard模式。這種動(dòng)態(tài)路由卸載模式是基于網(wǎng)絡(luò)流量模式幾個(gè)統(tǒng)計(jì)學(xué)的發(fā)現(xiàn):
1.83%的VM之間從來(lái)沒(méi)有網(wǎng)絡(luò)通信
2.98%的VM之間的網(wǎng)絡(luò)吞吐量峰值小于20kbps
也就是說(shuō)網(wǎng)絡(luò)的流量分布存在著明顯的冷熱不均,絕大多數(shù)的流量只出現(xiàn)在極少數(shù)的VM之間。經(jīng)過(guò)計(jì)算可以得出2%的VM之間網(wǎng)絡(luò)通信占據(jù)了99.5%的網(wǎng)絡(luò)帶寬。也就是說(shuō)和full mesh模式相比,只需要本機(jī)保留五十分之一的路由地址簿就可以處理絕大多數(shù)的請(qǐng)求。而我們要做的就是找出那些熱點(diǎn)的flow將規(guī)則加載到宿主機(jī)實(shí)現(xiàn)直接轉(zhuǎn)發(fā),而將那些長(zhǎng)尾的基本沒(méi)有流量的flow放在Gateway上來(lái)處理,減小宿主機(jī)的規(guī)則條數(shù)。
具體的處理流程如上圖所示,vm x到z的流量最初都是通過(guò)hoverboard這個(gè)特殊的Gateway進(jìn)行轉(zhuǎn)發(fā)。在這個(gè)過(guò)程中宿主機(jī)會(huì)定期向VM Controller上報(bào)流量統(tǒng)計(jì)信息,Controller以20kbps作為閾值,考慮是否將對(duì)應(yīng)路徑的流表下發(fā)到主機(jī)。一旦x到z的流表下發(fā)到主機(jī),x和z就可以直接通信而不經(jīng)過(guò)hoverboard。
這種模式很巧妙的解決了之前提到三種模式的問(wèn)題。相比f(wàn)ullmesh模式大幅降低了主機(jī)流表的規(guī)模,可擴(kuò)展性得到了提升。相比On Demand模式降低了首包的延遲和控制器的壓力。相比Gateway模式降低了額外的網(wǎng)絡(luò)資源開(kāi)銷(xiāo)也提升了Gateway的處理能力。
數(shù)據(jù)平面
論文里主要介紹的是On HOST Datapath,也就是基于OVS的性能優(yōu)化,其實(shí)我比較感興趣的是hoverboard里怎么對(duì)長(zhǎng)尾流量進(jìn)行優(yōu)化的,但是論文中沒(méi)有介紹。
數(shù)據(jù)平面的很多工作和OVSDPDK做的類(lèi)似,例如Userspace Datapath,Busy Polling,無(wú)鎖隊(duì)列,無(wú)系統(tǒng)調(diào)用,Hugepage,Batch Processing等等。比較有特點(diǎn)的是在HOST Datapath中,依然采用了冷熱分離的兩個(gè)Datapath進(jìn)行數(shù)據(jù)處理。
在OVN中所有的數(shù)據(jù)處理邏輯包括轉(zhuǎn)發(fā),acl,nat,lb,arp reply,dns,dhcp都是通過(guò)一套流表組成的pipeline來(lái)完成的,好處是邏輯統(tǒng)一,缺點(diǎn)就是很難針對(duì)性的進(jìn)行優(yōu)化。這其中轉(zhuǎn)發(fā)是最常見(jiàn)也是最關(guān)鍵的處理操作,而和其他功能混在一起來(lái)實(shí)現(xiàn)會(huì)拖慢轉(zhuǎn)發(fā)的性能。
GCP中的做法是分成Fast Path和Coprocessor Path。Fast Path中只處理轉(zhuǎn)發(fā)的操作,用到了上面所說(shuō)的和OVSDPDK類(lèi)似的所有比較極端的優(yōu)化手段,做到了一個(gè)數(shù)據(jù)包平均只需要300ns進(jìn)行處理就可以完成從VM網(wǎng)卡到物理網(wǎng)卡的操作。同時(shí)由于功能極為簡(jiǎn)單,flow table的查詢(xún)更新也變得簡(jiǎn)單,無(wú)需像開(kāi)源的ovs那樣需要考慮遍歷所有元組才能查詢(xún)到規(guī)則。
而Coprocessor Path則沒(méi)有這么高的性能要求可以做一些更復(fù)雜的功能和邏輯,這樣可以將復(fù)雜的網(wǎng)絡(luò)功能和簡(jiǎn)單的轉(zhuǎn)發(fā)功能解耦,利于復(fù)雜網(wǎng)絡(luò)功能的迭代,同時(shí)避免對(duì)整體性能產(chǎn)生大的影響。
Fast Path和Coprocessor之間的交互類(lèi)似流表和ovncontroller之間的交互。對(duì)于特定的數(shù)據(jù)包在Fast Path中插入一條上傳給Coprocessor的規(guī)則,Coprocessor處理完后再交還給Fast Path進(jìn)行處理。
論文中還介紹到了數(shù)據(jù)平面的在線(xiàn)遷移,由于是純軟件的實(shí)現(xiàn),可以做到在升級(jí)過(guò)程中同時(shí)運(yùn)行新舊兩個(gè)數(shù)據(jù)平面,舊的數(shù)據(jù)不斷的往新的遷移,然后在某個(gè)時(shí)間點(diǎn)進(jìn)行切換,這中間暫停服務(wù)的時(shí)間大約有270ms。通過(guò)這種方式他們做到了數(shù)據(jù)平面每周更新的高速迭代。
聽(tīng)說(shuō)阿里云的網(wǎng)絡(luò)部分現(xiàn)在也已經(jīng)是硬件實(shí)現(xiàn)的了,這么大規(guī)模集群的純軟實(shí)現(xiàn)已經(jīng)很少見(jiàn)了。看樣子Google工程師對(duì)軟實(shí)現(xiàn)在工程方面高速迭代的能力還是十分熱衷的。不過(guò)這個(gè)論文在presentation的同期Azure也展示了他們用FPGA實(shí)現(xiàn)的數(shù)據(jù)平面,也可以通過(guò)編程的方式實(shí)現(xiàn)網(wǎng)絡(luò)功能的快速迭代。此外Azure還很心機(jī)的做了個(gè)和GCP的性能測(cè)試比較來(lái)展示Azure在性能上的優(yōu)勢(shì)。不知道GCP的純軟線(xiàn)路還能堅(jiān)持需要多長(zhǎng)時(shí)間,畢竟從規(guī)模效應(yīng)上來(lái)看,硬件方案性能好還能省CPU整體的性?xún)r(jià)比還是不錯(cuò)的。
再回過(guò)頭來(lái)和OVN做個(gè)整體對(duì)比。GCP最大的特點(diǎn)就是在控制平面和數(shù)據(jù)平面各個(gè)層次都做了冷熱分離,盡可能的優(yōu)化常用路徑的性能。而這種做法在實(shí)現(xiàn)上就會(huì)導(dǎo)致不同的情況下要用不同的方案,整體的實(shí)現(xiàn)會(huì)比較分散,但是針對(duì)單個(gè)公司的場(chǎng)景下能榨取盡可能多的性能。
而OVN為了保證整體架構(gòu)的一致和邏輯的統(tǒng)一,沒(méi)有這么碎的冷熱分離和On Demand方案,通用性會(huì)更好,但是在大規(guī)模場(chǎng)景下會(huì)碰到性能瓶頸問(wèn)題。當(dāng)然OVN社區(qū)目前也在控制平面做了大量的性能優(yōu)化,包括各種緩存和增量式更新,降低單個(gè)網(wǎng)絡(luò)變更的消耗,目測(cè)20.03后的下一個(gè)版本還會(huì)有很大改善。而數(shù)據(jù)平面看上去在一些技術(shù)使用上和OVSDPDK的技術(shù)是一致的,不過(guò)GCP這種冷熱分離,在線(xiàn)遷移的靈活性設(shè)計(jì),在工程上還是很值得借鑒的。當(dāng)然這兩年又出現(xiàn)了更多的新方案,例如FPGA加速,各種智能網(wǎng)卡和eBPF的Kernel Bypass方案,都給數(shù)據(jù)平面的加速提供了更多的選擇方案。
參考資料:
https://www.usenix.org/conference/nsdi18/presentation/dalton
https://www.usenix.org/conference/nsdi18/presentation/firestone
GCP網(wǎng)絡(luò)系統(tǒng)Andromeda https://zhuanlan.zhihu.com/p/102951479
特別聲明:以上文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),不代表ESG跨境電商觀(guān)點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問(wèn)題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號(hào)密碼登錄
平臺(tái)顧問(wèn)
微信掃一掃
馬上聯(lián)系在線(xiàn)顧問(wèn)
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部