天天看點

【DPDK峰會回顧】支撐雙十一的高性能負載均衡是如何煉成的

上個月在北京召開的DPDK峰會上,阿裡雲網絡技術專家梁軍(刺背)分享了阿裡雲高性能負載均衡的架構、設計理念,以及在雙十一和春晚手淘紅包等大流量網際網路場景中實踐。這篇文章總結了本次大會發言。

負載均衡器是對多台伺服器進行流量分發的負載均衡服務。它可以通過流量分發擴充應用系統的服務能力,還可以消除單點故障提升應用系統的可用性。是以負載均衡器得到了廣泛的應用,目前已經成為阿裡巴巴流量的入口。阿裡巴巴新一代的負載均衡器基于DPDK來實作,其提供的高性能與高可用性支撐了阿裡巴巴業務的高速發展,尤其是保障了阿裡巴巴2017年的雙11狂歡節,接受了雙11場景下脈沖式海量流量的檢驗。本PPT将從兩個方面來介紹阿裡巴巴新一代的負載均衡器:第一,介紹基于DPDK的高性能負載均衡器的實作架構,第二,介紹DPDK負載均衡器的并發會話同步機制,此機制實作了LB在容災與更新場景下讓業務無感覺。

基于DPDK開發的阿裡負載均衡器

【DPDK峰會回顧】支撐雙十一的高性能負載均衡是如何煉成的

目前整個阿裡巴巴使用的負載均勻器,絕大多數都已經替換成基于DPDK自研的負載均衡器。此版本最底層是DPDK,利用DPDK平台提供的便利的高性能技術:

如使用者态收發包,hugepage,

NUMA等。再一上層是Netframe平台,它是基于DPDK自研的高性能2/3層使用者态網絡協定棧,實作了2層的MAC位址轉發,3層的路由查找轉發以及動态路由協定等,而且還提供了各類豐富的庫,最終于類似Netfilter鈎子的形式提供給上層的應用程式使用。阿裡巴巴目前主力的SLB就是基于Netframe平台研發的,基于此平台SLB直接通過鈎子的方式接收與發送資料包,隻需要關心業務自身的資料流,是以可以快速,高效的開發網絡應用程式。目前此版本的SLB已經廣泛使用在了阿裡的電商交易,交易支付等業務上,而且阿裡雲公有雲伺服器上對外提供的SLB産品也是基于此版本。

【DPDK峰會回顧】支撐雙十一的高性能負載均衡是如何煉成的

在雙11大促活動中,公網入口的流量主要分為兩大類:一類是使用者通路阿裡的流量,首先經過CDN網絡,再由CDN網絡回源到提供服務的應用,在回源時會經過SLB,由SLB提供負載均衡服務,通常這種流量模式占絕大多數。另一類通路流量是直接由SLB提供服務,使用者的流量直接經過SLB就到達後端的應用,這種流量模式隻占一小部分。兩個流量模型,SLB都在流量入口的位置,占據着非常重要的位置,是以對SLB的穩定性都提出了很高的要求。

基于DPDK

的負載均衡支撐雙11活動

【DPDK峰會回顧】支撐雙十一的高性能負載均衡是如何煉成的

基于DPDK版本的負載均衡器,已經平衡了支援了近兩個的雙11和春節紅包活動,上圖中是2017年雙11流量的示意圖, 從圖中我們可以看出,雙11當晚的流量是一個脈沖式的圖形,這是由于雙11當天,有很商品需要在0點之後才能搶購,而通常這部分商品的數量是很有限的。我們可以看到2017年雙11當天的交易峰值為32.5萬筆/秒,支援峰值是25.6萬筆/秒,這種脈沖式的流量模型對SLB帶來了很大的挑戰。

1.    

如何應用脈沖式的流量模型,提供穩定的服務?

2.    

如果提供一個高可用的服務,來應對随時都可以發生的裝置與網絡的異常?

3.    

如何執行個體業務無感的版本更新與容災?

高性能的負載均衡服務

高性能的負載均衡器基于DPDK平台,利用了DPDK平台的優化,打造了極輕量的高效資料轉發面。在轉發面中,無中斷,無搶占,無系統調用,無鎖,通過将核心資料結構cache

line 對齊,減少CPU

cache miss, 通過使用hugepage

減少TLB的miss,通過将關鍵資料結構NUMA話,減少CPU跨NUMA通路的延時。在應用程式的處理邏輯上,也秉承着控制面與轉發面分離的設計原則,保持高效輕量的轉發面,讓轉發面盡量少的處理非資料包轉發相關的事情,複雜的管理操作,排程,統計等都放到控制面來處理。

高性能的負載均衡器除了利用DPDK平台的先天優勢以及控制面與轉發面相分離的平台設計,SLB自身還實作了軟硬體結合的轉發架構。從client到達SLB的資料包,經過網卡的RSS(Receive

Side Scaling),将流量均勻的打散到不同的CPU上,由于阿裡的SLB使用的FNAT的轉發模式,每個CPU都有自己獨立的local

address,是以從SLB發往後端RS的資料包,都被替換成了每個CPU自己的local

address。這樣保證了從RS回來了資料包經過網卡的FDIR(Flow

Director)邏輯之後可以到達從client方向過來的流同一個CPU,進而從機制與轉發架構上實作了“進出同CPU”的架構,在此架構之後業務上執行個體了多CPU并發處理的邏輯,讓資料結構Per-CPU化,CPU可以完全并行化的處理資料包,使性能大幅的提升,同時,此并發處理的架構,可以充分利用目前多CPU伺服器架構,為後續CPU的持續增加,提升了性能不斷提升的可能。

【DPDK峰會回顧】支撐雙十一的高性能負載均衡是如何煉成的

SLB利用DPDK平台的先天優勢,使用控制面與轉發面相分離的平台設計原則, 采用CPU并行化處理的轉發構架,其性能得到了很大的提高。在64位元組小包的場景下,轉發PPS由核心版本的10Mpps提升到了39Mpps,

連接配接建立的性能也由核心版本的2.7Mcps提升到了6.9Mcps。正是由于DPDK版本SLB性能的大幅提升,才保障了近兩年雙11脈沖式的增長的突發流量場景。

無感容災與更新

【DPDK峰會回顧】支撐雙十一的高性能負載均衡是如何煉成的

上圖是SLB的容災更新示意圖,SLB的部署是可水準擴充的叢集化部署模式,多台伺服器之間釋出相同的VIP路由,在交換機側形成ECMP的路由,提供了多個次元的容災能力。但是在沒有連接配接同步之前,由于CPU,記憶體,硬碟等故障會導緻整個轉發伺服器不可用,在網絡收斂之後,ECMP會重新選路,導緻絕大多數連接配接在重新選路之後,不同到達之前的轉發伺服器上,進而導緻已有的連接配接中斷。單網卡或者網卡與交換機之間的故障,交換機自身故障,或者SLB通過輪轉更新等多重情況下,都會導緻ECMP重新選路,導緻已有的連接配接中斷。已有連接配接中斷,特别是長連接配接中斷,導緻直接交易額直接下跌,對于使用者側會感覺到通路逾時,或者報錯,對于使用者的體感也非常不好。

【DPDK峰會回顧】支撐雙十一的高性能負載均衡是如何煉成的

SLB使用了會話同步的機制來解決了更新與容災場景下長連接配接中斷的問題。同一個組的伺服器(如圖中的4台轉發伺服器)會加入到同一個多點傳播組中,當SLB應用程式啟動之後,它會自己加入到對應的多點傳播組中,伺服器下線或者重新開機,逾時後自動從多點傳播組中删除。使用多點傳播技術之後,可以簡化會話同步機制中,機器上線與下線的問題。使用多點傳播技術之後,将原本需要複制多份,分别發送給其它伺服器的多點傳播包,現在隻需要發送一份,資料包的複制offload給交換機,由交換機的硬體完成,讓SLB的轉發面簡單,高效,高性能。

有了會話同步之後,會話分為兩類:一類是本地會話Lconns,另一類是同步的會話Sconns。會話同步時,隻會将本地的會話同步給他們裝置,接收同步請求的伺服器會更新Sconns的逾時時間以及其它資訊。在發生容災切換時,轉發伺服器的Sconns如果進行了資料包的轉發,就會自動切換成Lconns。

繼續閱讀