天天看點

高性能四層負載均衡裝置AGW

        轉載請注明出處:http://blog.csdn.net/hliyuxin/article/details/40626769

随着站點通路量的急劇增長,伺服器叢集的規模成倍增長,同時也要求傳統的LVS叢集的伺服器數量成倍增長。傳統LVS的負載均衡功能現已很難滿足大型公司叢集系統的需求,怎樣開發出一個高性能、處理超大規模流量的四層負載均衡網關産品,成為整個集團的一個巨大的技術挑戰。

傳統的LVS 基于linux核心的NetFilter架構實作,實驗測試linux 2.6核心netfilter架構,在沒有其它功能損耗的情況下,最高能轉發600萬的小包,也就是說synflood的天花闆值600萬,按照一次http通路互動最少10個包,每秒http建立的極限值就是60萬。造成LVS性能瓶頸的原因主要有以下幾點:

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

2. 上下文切換:LVS工作在系統核心态,每個線程在CPU上運作很短的一段時間,這種線程排程會觸發上下文切換,儲存線程上下文資訊,以及之後再恢複這些狀态資訊。這些切換操作會花費系統很多時鐘,在專用的負載裝置上應該盡量避免這種上下文切換。

3. 大量鎖的設計: 在LVS中設計了大量自旋鎖和原子變量,如LVS中的session表有ip_vs_conn_tab_lock,當通路某個VIP的包進入LVS,都會觸發查表操作,查表之前需要鎖住該表,在高網絡流量的環境下,這種原子操作帶來的性能下降很大。

4. 路由開銷:現在的LVS經過netfiler的一些hook點,IN和OUT的包都會經過IP層的路由表查找操作,這一流程在現在集團的網絡布署環境中是不需要的,增加了性能損耗。

        阿裡技術保障部的網絡産品團隊自主研發出産品AGW,AGW基于DPDK開源軟體完全在應用層實作,抛棄了原有的Linux核心netfilter架構,實作了和原LVS類似的fullnat+synproxy的四層負載功能。AGW系統設計的關鍵技術主要有以下幾點:

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

2. 多核多隊列,AGW系統為均衡功能配置設定專用的CPU core, 與核心隔離,将CPU和處理線程綁定,poll方式收發包,這樣可以避免網卡中斷操作以及作業系統進行線程切換所帶來的上下文切換開銷。另外,intel 82599網卡支援多隊列和接收端縮放功能(RSS),我們利用這一功能,将資料包根據CPU核數進行分流,每個core維護自己的session表,處理一個隊列接收到的資料包。為了保證fullnat模式下同一個session的包,IN和OUT都能到同一個core上,我們利用了網卡的flow director功能,将local address均分綁定到特定的處理core上。

高性能四層負載均衡裝置AGW

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

4. 超大頁面:因為網關裝置的專用性,我們利用DPDK中HugePage功能,為AGW配置設定很多1GB的大頁面專門使用,這樣可以減少TLB Miss情況,并減少處理TLB Miss所需的記憶體操作。

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

高性能四層負載均衡裝置AGW

在我們的大流量性能測試中。

      AGW系統使用普通伺服器平台,9個工作core來處理vip的tcp資料包,性能測試結果顯示:(1)單機synflood能打滿2個萬兆網卡2800 pps,單台伺服器能抵禦20Gb的synflood攻擊(2)每秒接收180w的http建立連接配接,轉發處理接近2000w pps的小包。

繼續閱讀