盤點低延時網絡架構中使用的那些黑科技!
大家好,我是飛哥!最近我簡單研究了一下低延遲網絡架構,今天和大家分享分享。
談到優秀的低延時網絡架構,大家首先可能想到的是各家互聯網大廠,比如騰訊阿里字節,總會覺得大廠做的肯定最好。但其實在在一般的互聯網應用中,用戶雖然也討厭卡頓,但整體上來對延遲其實并不算太敏感,只要按鈕點下后一秒之內能響應,用戶就基本感覺不出來。甚至是兩三秒才響應用戶也都還能接受。
所以在今天的互聯網公司中,雖然也關注服務訪問延遲,但其實優化并沒有往特別極致了去做。
而在整個業界中有這么一個細分的領域,對延遲卻極其的敏感,那就是高頻量化交易場景。因為在這種業務中,同樣的價格,先出價的人先成交。
如果一家量化交易公司比競爭對手哪怕多 1 ms(毫秒)的延遲,可能也會意味著會損失很多錢。據某個專業市場機構的評估,在全球的電子交易中,如果交易處理時間比對手慢 5 ms 可能就會損失 1% 的利潤。慢 10 ms 損失會擴大到 10 %。
所以高頻量化交易場景中的網絡架構幾乎是全球最頂級的低延時網絡架構了,非常值得學習。我請教了朋友圈中幾位從事量化交易的專業人士,也看了一些技術資料,初步對這個網絡架構有了一點點理解。總結出來,分享給大家!
我們先來看一組某交易所的數據,其交易延遲早在 2016 年的時候就優化到了 278 us(微秒)。
一個網絡請求從用戶發出,到最終處理完畢,其延時總體上可以劃分為兩塊,一是網絡轉發延遲,二是系統處理延遲。
我們分這兩塊來看看高頻量化交易的網絡架構中都用了哪些黑科技。
一、網絡轉發延遲
在網絡上,高頻量化交易中采用了極致的優化。
1.1 就近部署&專線
就近部署是最簡單有效的方法,鏈路上傳輸比較耗時那就直接把鏈路降低的短一些。很多交易中心都在交易所附近租服務器,這種方法還有個專門的名字叫 Co-location。
還有就是跨地區的話,通過獨占的物理線連接。這樣可以用最短的物理線路,也不用受公網傳輸數據的干擾,穩定性和安全性也更好。這個在國內用的還是很多的,因為相對下面的微波傳輸網絡成本要低很多。
1.2 微波傳輸
提到光速,我們都知道它的速度是 3 × 10 的 8 次方 m/s。但其實光在不同介質中的傳播速度是不一樣的,介質密度越大,光在其中傳播速度會越慢。光在空氣中的速度比在真空中的速度略慢一點,基本接近。但在光纖中的速度就打折的很厲害了,其速度大致為真空光速的 50% - 66% 左右。
另外還有就是任何兩地之間鋪設光纜的話,很難做到完全筆直,總是會存在很多的彎彎繞。比如從哈爾濱要想訪問上海,需要先經過北京等許多個中轉節點。這樣實際光纖的傳輸距離也會增加很多。
量化交易網絡應用中為了追求極致的低延遲,在核心網絡上采用了微波傳輸。讓信號就在空氣中傳播,而不是光纖。
在美國加哥商品交易所和新澤西州的納斯達克數據中心就存在這樣一條微波傳輸網絡。將兩地的 RTT 從 2012 年的 8.7 ms 削減到了 2016 年的 7.9 ms。
另外就是馬斯克的星鏈網絡,也能提供更低延遲的超長距離場景(跨大洋、跨大陸)的網絡傳輸。
1.3 InfiniBand 替換以太網
有少量交易所還使用 InfiniBand 替換了以太網。
在 InfiniBand 網絡中包含兩部分,一部分是物理鏈路協議。第二部分是遠程直接內存訪問 RDMA。
在物理鏈路協議上,以太網就像一個快遞包裹分發網絡。網絡上的每一個節點都需要先把網絡包接收下來,然后看看它的二層或三層地址信息算一下該怎么發,再選擇一個出口丟到發送隊列等待再發出去。
整個的轉發過程其實不是特別高效。還有一種中轉轉發方式是類似鐵路交叉軌道,當有數據到達的時候,提前把軌道變好,數據包到達后直接轉發就行了。不用先全部收下來,算一算再轉發。
InfiniBand 就是這樣一種網絡。我找到了一個網卡首發延遲數據對比。基于Ethernet上的TCP UDP應用的收發時延會在10us左右,而InfiniBand的網卡收發時延(write,send)在600ns左右
由于轉發極其高效,所以在可靠性上,InfiniBand 網絡也沒有像 Ethernet 網絡中存在的抖動問題。
InfiniBand 網絡的第二個優勢就是從設計之初就考慮了 RDMA,延時很低。這個稍后我們專門介紹 RDMA 時再說。
不過 InfiniBand 的缺點也不少,需要調度中心,成本較高,地址空間也有限制。所以目前只有少數交易所在用。
1.4 更大的帶寬
更大的帶寬通常可以緩解延遲。這個很好理解,數據包大小一定的情況下,在大帶寬網絡下肯定發送的更快。
所以在交易場景下采用的都是 10 Gbps 甚至是 25 Gbps 的網絡。
1.5 低延遲交換機
傳統交換機都是工作在二層上。為了解決信號之間的碰撞,搞出了 CSMA/CD 等協議。但其實只要沒有沖突的話,就不必這么麻煩了。
Arista 公司生產的交換機設備可以不用在二層,直接在物理層轉發。就好像是一根整的光纖一樣。信號從一個端口進去,直接無沖突地轉發到另外一個端口(或者多個端口)就發出來了。
參見 Arista 官網:https://www.arista.com/zh/products/7130-series
二、系統處理延遲
當用戶請求到達服務器后,系統就可以開始接收和處理請求了。在這個過程中,高頻交易場景同樣進行了很多的優化
2.1 Kernel By Pass
大家總以為內核已經久經考驗,已經極致優化過了。對于一般應用場景來說確實是這樣,但是對于延遲要求極其高的場景來說,還存在過多的性能開銷。
網絡包接收的時候要經過層層協議棧處理,最后發到接收隊列中。再喚醒用戶進程,上下文通知用戶進程。
這個過程我在網絡篇的文章中都介紹過了。全部文章列表參見:https://github.com/yanfeizhang/coder-kung-fu
另外就是用戶進程收到內核通知也不是立即就能運行的,需要在 CPU 的運行隊列中排個隊。內核中的進程調度也不是搶占式的,等真正開始運行的時候,搞不好 10 個毫秒都過去了。
如果沿用傳統的內核方式,在網絡鏈路上耗費巨資節約的幾個毫秒可能在這里就全部葬送了。Kernel by pass 類的技術就是在繞過內核協議棧,直接在用戶態輪詢等待用戶請求,一旦有立即開始處理。節約了大量的內核態開銷,以及內核態用戶態的切換開銷。
這類技術包括 Solarflare 的 Onload 和 Exablaze 的 ExaSOCK,在量化交易中大量地被采用!如下是我在 Solarflare 官網上截的一張工作原理圖。
2.2 RDMA
遠程直接內存訪問 RDMA 是另外一種解決內核開銷的方法。在前面我們介紹的 InfiniBand 天生就支持 RDMA。除了 InfiniBand 外,還有 RoCE 和 iWARP 兩種 RDMA 方案。它們都實現了直接遠程操作接收方內存的能力,從而降低了延遲。
相比 InfiniBand ,RoCE 和 iWARP 兩種 RDMA 方案兼容現在的 Ethernet 鏈路層的,不用使用專門的交換機,但是也必須得使用專用的網卡硬件。
RoCE 協議存在 RoCEv1 和 RoCEv2 兩個版本。RoCE v1 是基于以太網鏈路層實現的 RDMA 協議(交換機需要支持 PFC 等流控技術,在物理層保證可靠傳輸),允許在同一個VLAN中的兩臺主機進行通信。RoCE v2克服了 RoCE v1綁定到單個VLAN的限制。通過改變數據包封裝,包括IP和UDP標頭,RoCE v2 現在可以跨 L2 和 L3 網絡使用。
2.3 TOE 硬件卸載
傳統的計算都是由 CPU 進行的。但是 CPU 的性能已經發展到了極限,無法進一步提升了。下一步的提升思路就是如何將一些計算工作從 CPU 中卸載出來,由其他的硬件來完成,例如 DPU 和 FPGA。
TOE 的全稱是 TCP offload Engine,指的是將 TCP 協議卸載到 FPGA 硬件中。在高頻量化交易中,大量地采用了 FPGA 編程計算。
FPGA 相比 GPU 的核心優勢在于低延遲。所有數據均不需要跨越 PCIE 總線,另外在 FPGA 的數據傳輸不需要進行多次數據拷貝。其加速效果甚至可以達到 CPU 的 10 - 100 倍。
有的公司還用 FPGA 不僅把 TCP、IP、epoll 等機制實現了,甚至還包括業務邏輯處理,這樣可以把系統延時做到百納秒級別,甚至幾十納秒。
2.4 其他優化方法
除了以上幾個方法以外,高頻量化交易場景在系統的各個位置都會注重耗時的優化。
在內存上,堆大量的內存換取時間,使用的內存通常都是 1 TB 起步。
在 CPU 硬件上,會采購主頻較高的 CPU。一般普通的服務器 CPU 主頻在 3 GHz 多點,而量化交易甚至都會采購 5 GHz 主頻的硬件。也會通過 BIOS 調整進制 CPU 進入省電降頻模式。
在進程運行上,會把線程單獨綁定在一個核上運行,獨占該 CPU 核心,充分利用 CPU 的緩存,也會非常主動 CacheLine 對齊。也會盡可能少地調用系統調用,避免用戶態內核態切換開銷。通過各種方式極致地降低延遲。
三、總結
一個網絡請求從用戶發出,到最終處理完畢,其延時總體上可以劃分為兩塊,一是網絡轉發延遲,二是系統處理延遲。
高頻量化交易公司在網絡轉發延遲上采取的優化手段有微波傳輸、InfiniBand、低延遲交換機,就近部署、拉網絡專線等。
在系統處理延遲上,大量地采用 Kernel By Pass 來降低內核處理延遲,部分公司還采用了 RDMA 類的技術。在計算上將大量的計算密集型的工作從 CPU 上卸載到 FPGA 中完成。
當然傳統的優化手段量化公司也在用,例如大內存換時間,高頻 CPU、綁核等等。
總之,量化交易公司采用了各種業界先進的技術來降低處理延遲。
致謝
剛開始我只知道量化交易的網絡架構延遲低,但是為啥延遲低,如何實現的是不太清楚的。我發了一個朋友圈請教,收到了非常多的相關信息與資料。感謝以下同學給飛哥本次學習提供的幫助:阿飛、原生之力、曹鵬飛、申玉棟、周志鑫、Dylan、鐘吉鴻、逆風、LERVISNH、abelian、vodka、逍遙子等同學,排名不分先后。
也感謝以下文章的作者:
- 低延遲交易系統設計
- 談談InfiniBand和Ethernet網絡的差異
- 一窺世界上延遲最低的網絡
- 淺析RoCE網絡技術
- RoCE、IB和TCP等網絡的基本知識及差異對比
技術就是這樣, 1 + 1 大于 2,所以多和周圍的人,多和業界交流,我們大家都能成長的更快,這也是我堅持在非常忙的工作之余還做分享的原因。