天天看點

面向C10M時代的MiddleBox之 - 高性能四層負載均衡裝置AGW

近年來,随着網際網路在全球的快速發展和普及,網民數量的不斷增加,生活中各方面對網際網路依賴的增強,帶來網際網路通路量的爆炸性增加,催升了諸如google,facebook等巨型站點,國内也有BAT 等幾家公司旗下的站點通路量跻身世界前十。

面對需求的不斷提高,幾年前我們還在為解決C10K 問題而努力,現在已經開始面臨C10M 問題的挑戰。

C10M意味着什麼,一個比較流行的解釋如下:

  • 承載10million個并發連接配接
  • 傳輸10million packets/秒
  • 建立1million connections/秒
  • 10 gigabits/秒

雖然對于某些具體資料,比如10G帶寬傳輸資料是否太少,10M并發連接配接中有多少活躍連接配接等,還有待商榷,但是C10M 問題從數量上給我們描繪了一幅前景。

面向C10M時代的MiddleBox之 - 高性能四層負載均衡裝置AGW

MiddleBox(acomputer networking device that transforms, inspects, filters, or otherwisemanipulates traffic for purposes,參見

http://en.wikipedia.org/wiki/Middlebox

)作為網絡的邊界和入口,是流量彙聚和集中的關鍵位置,會首先面臨C10M 問題的考驗。MiddleBox在阿裡巴巴集團中廣泛使用,主要包括4/7層負載均衡裝置,4層代理網關等,本文主要分享一些在4層負載均衡裝置方面的一些工作和思考。

1、無鎖實作:資料平面的無鎖化,是通過上述的多隊列功能實作了,每個core維護自己的session表,網卡将I/O流分給多個CPU核心做并行處理,無需争用鎖。控制平面的無鎖化,因為對vip表修改等控制操作在整個周期中占比很小,我們沒有必要因為管控指令而對資料平面的操作加鎖,我們使用定期poll的方式執行控制指令,這樣可以實作控制平面的無鎖化。第2點和第3點,解決了C10M多核可擴充性問題。

2、Hugepage:因為網關裝置的專用性,我們利用HugePage功能,為AGW配置設定很多1GB的大頁面專門使用,這樣可以減少TLBMiss情況,并減少處理TLBMiss所需的記憶體操作,同時對于頻繁配置設定的資料結構,采用mempool機制。

3、核心資料支援NUMA:現今伺服器體系大都是numa架構,處理器能快速的通路在同一個numa單元的記憶體。在AGW系統設計中,我們将頻繁使用的核心資料結構(如session表)分布在各個core對應numa節點的記憶體中。同時,在多網卡的環境中,網卡綁定pci也會對應到不同的numa節點上,我們多核多隊列的架構也利用了這一特性,将同一numa節點的網卡隊列和CPU對應起來,避免資料的跨numa節點通路,這樣可以緩解總線瓶頸和高速cache争用,提升系統性能。第4,5點解決了C10M的記憶體可擴充性問題。

在C10K 時代,催生了epoll等技術的出現。對于4層負載均衡技術來說,主要是基于核心netfilter架構來處理網絡流量,這種機制在C10M 的情況下有些力不從心,造成性能瓶頸的原因主要有以下幾點:

1、網卡中斷:linux系統核心通過軟中斷的方式來中斷工作,處理網絡資料包。當網卡接收的流量不斷增加,系統會進行中斷的時間也會随之增長,中斷嚴重影響了服務性能。

2、linux網絡協定棧:傳統的包處理會經過linux網絡協定棧,linux網絡協定棧的實作複雜,是以我們需要一個收包,發包的快速路徑,更直接的面對資料包。

3、多核的擴充性:面對的cpu核數越來越多,傳統的linux核心,協定棧實作并沒有很好的支援多核,大量的資料共享使我們不得不使用大量的鎖來控制并發,我們期望系統的性能同cpu核數成線性相關,需要的是一個像高速公路的架構而不是一個靠紅綠燈控制的十字路口的架構。

面向C10M時代的MiddleBox之 - 高性能四層負載均衡裝置AGW

是以面對C10M,我們需要解決的問題是主要有幾個方面:

  • 包的可擴充性
  • 多核的可擴充性
  • 記憶體的可擴充性

針對這幾個問題,阿裡技術保障部的網絡産品團隊自主研發出産品AGW(AliGateWay),完全在應用層實作,抛棄了傳統Linux核心netfilter網絡包處理架構,實作了fullnat+synproxy的四層負載功能。AGW系統設計的關鍵技術主要有以下幾點:

1、使用者态網卡驅動:利用linuxuio,實作使用者态網卡驅動,繞過linux協定棧,使應用程式處理資料包的路徑更加直接,不讓作業系統來處理資料包,解決了C10M的包可擴充性問題。

2、多核多隊列:AGW系統為均衡功能配置設定專用的CPUcore, 與核心隔離,将CPU和處理線程綁定,poll方式收發包,這樣可以避免網卡中斷操作以及作業系統進行線程切換所帶來的上下文切換開銷。另外,網卡支援多隊列和RSS,我們利用這一功能,将資料包根據CPU核數進行分流,每個core維護自己的session表,處理一個隊列接收到的資料包。

3、無鎖實作:資料平面的無鎖化,是通過上述的多隊列功能實作了,每個core維護自己的session表,網卡将I/O流分給多個CPU核心做并行處理,無需争用鎖。控制平面的無鎖化,因為對vip表修改等控制操作在整個周期中占比很小,我們沒有必要因為管控指令而對資料平面的操作加鎖,我們使用定期poll的方式執行控制指令,這樣可以實作控制平面的無鎖化。第2點和第3點,解決了C10M多核可擴充性問題。

4、Hugepage:因為網關裝置的專用性,我們利用HugePage功能,為AGW配置設定很多1GB的大頁面專門使用,這樣可以減少TLBMiss情況,并減少處理TLBMiss所需的記憶體操作,同時對于頻繁配置設定的資料結構,采用mempool機制。

5、核心資料支援NUMA:現今伺服器體系大都是numa架構,處理器能快速的通路在同一個numa單元的記憶體。在AGW系統設計中,我們将頻繁使用的核心資料結構(如session表)分布在各個core對應numa節點的記憶體中。同時,在多網卡的環境中,網卡綁定pci也會對應到不同的numa節點上,我們多核多隊列的架構也利用了這一特性,将同一numa節點的網卡隊列和CPU對應起來,避免資料的跨numa節點通路,這樣可以緩解總線瓶頸和高速cache争用,提升系統性能。第4,5點解決了C10M的記憶體可擴充性問題。

在阿裡巴巴集團,業務和規模驅動技術不斷向前,技術保障部網絡産品研發團隊長期緻力于高性能Middle Box的研發,不斷滿足公司高并發通路的業務需求。AGW系統的開發與上線,可以為雙十一提供有力的保障,為業務的快速增長保駕護航。

繼續閱讀