第二章本來是要講消息總線,審核說是過度宣傳,就放棄了,不糾結,先跳過。
網關和消息總線的底層技術都和網絡相關,兩者也有很重要的差別。消息總線主要用于內網,受交換機和網卡影響比較大,網絡狀況也比較穩定,網絡重傳的概率低,為了追求低延遲,軟硬件技術非常苛刻。
網關和消息總線有很大不同,它主要面向互聯網,交易所通常會要求專線接入,網絡狀況要優于互聯網,但距離的緣故,網絡延遲本身就遠高于局域網。想象下,光每納秒也只能傳播30厘米,就知道距離對延遲的影響有多大。上海城內平均延遲在10毫秒,上海到北京之間城域網,延遲也要超過30毫秒。另一方面,長距離傳輸要跳轉多個交換機,丟包率就要高于局域網。在這種場景下,網關的技術核心就不是怎么將延遲降到微秒級別,沒有意義,而是在處理好不穩定的網絡狀況后,保證業務的持續性。
因為互聯網本身固有的延遲,網關延遲要遠高于內網的消息總線,但并不意味著網關的延遲控制不重要,在技術上也很容易。網關要處理的連接數通常要遠高于消息總線,網絡吞吐量也高于消息總線幾個數量級。想象下,中國三億股民,一只股票行情數據在消息總線上只需要傳輸幾份副本,而將這個行情數據推送給客戶端,網絡傳輸的數據量得有多大。這個例子有點夸張也不準確,只為說明數量級的差距。交易所通常采用多級分發的策略,由交易所到證券席位和行情供應商,再由他們分發。
除了網絡吞吐量大外,網關還要應對流量尖峰。一旦瞬間網絡流量超過操作系統緩沖大小,超過運營商帶寬,或者經過的交換機問題,都有可能被丟棄,導致網絡重傳,一旦觸發超時機制,延遲都不會太小。
以上這些問題,是網關的共性技術問題,如何解決有不少優秀產品和技術可以借鑒。交易系統的網關在穩定性要求更加嚴格,在業務上也有特有的需求,比如交易網關,行情網關,結算網關,甚至股票和債券交易網關都可以分割開。
安全性考慮,將網關和核心網絡隔離,防止重復登錄,雙向心跳偵測網絡故障更及時。成交回報的推送除了避免網絡上丟失,業務層面也要加入重傳機制。
交易系統是時間敏感的,網關和終端之間日歷和時鐘同步也是至關重要。日歷對延遲容忍性要高點,時鐘就苛刻的多,傳統的NTP誤差在毫秒級,隨著交易頻率越來越高和交易公平性的要求,對時間精度越來越高。撮合原則除了價格優先還有時間優先,簡單的做法以到達撮合系統來標記時間優先順序,這種做法受到傳輸距離影響比較大,高頻量化系統就把服務器搬到交易所機房,減少傳輸距離,拿到時間優先權,更公平的做法是以委托單到交易所的前置機為準。有的交易所會采用GPS時鐘源,早期有報道稱,谷歌在數據中心內部采用原子鐘作為跨數據中心時鐘同步基準,不知道現在交易所有沒有應用。GPS時鐘加原子鐘,這兩種技術混用,以物理世界的真實時間,大大降低了傳輸距離導致的排序偏差,也降低了技術難度。
前置機和網關之間的斷網重連機制也是網關要考慮的重點,畢竟網絡狀況是不可預測的。前置機在斷網后有可能連接失敗,或者重連后可能連接到其他網關。交易系統如何避免重單,在前置機重連后,之前的網關數據如何處理,是業務級別策略。網關是被動接受連接,斷網重連不是技術上難題。
網關除了網絡流量控制外,還要考慮業務上的流速控制,避免某個前置機發單過多,而其他前置機處于饑餓狀態,這是技術導致業務上的不公平。