第二章本来是要讲消息总线,审核说是过度宣传,就放弃了,不纠结,先跳过。
网关和消息总线的底层技术都和网络相关,两者也有很重要的差别。消息总线主要用于内网,受交换机和网卡影响比较大,网络状况也比较稳定,网络重传的概率低,为了追求低延迟,软硬件技术非常苛刻。
网关和消息总线有很大不同,它主要面向互联网,交易所通常会要求专线接入,网络状况要优于互联网,但距离的缘故,网络延迟本身就远高于局域网。想象下,光每纳秒也只能传播30厘米,就知道距离对延迟的影响有多大。上海城内平均延迟在10毫秒,上海到北京之间城域网,延迟也要超过30毫秒。另一方面,长距离传输要跳转多个交换机,丢包率就要高于局域网。在这种场景下,网关的技术核心就不是怎么将延迟降到微秒级别,没有意义,而是在处理好不稳定的网络状况后,保证业务的持续性。
因为互联网本身固有的延迟,网关延迟要远高于内网的消息总线,但并不意味着网关的延迟控制不重要,在技术上也很容易。网关要处理的连接数通常要远高于消息总线,网络吞吐量也高于消息总线几个数量级。想象下,中国三亿股民,一只股票行情数据在消息总线上只需要传输几份副本,而将这个行情数据推送给客户端,网络传输的数据量得有多大。这个例子有点夸张也不准确,只为说明数量级的差距。交易所通常采用多级分发的策略,由交易所到证券席位和行情供应商,再由他们分发。
除了网络吞吐量大外,网关还要应对流量尖峰。一旦瞬间网络流量超过操作系统缓冲大小,超过运营商带宽,或者经过的交换机问题,都有可能被丢弃,导致网络重传,一旦触发超时机制,延迟都不会太小。
以上这些问题,是网关的共性技术问题,如何解决有不少优秀产品和技术可以借鉴。交易系统的网关在稳定性要求更加严格,在业务上也有特有的需求,比如交易网关,行情网关,结算网关,甚至股票和债券交易网关都可以分割开。
安全性考虑,将网关和核心网络隔离,防止重复登录,双向心跳侦测网络故障更及时。成交回报的推送除了避免网络上丢失,业务层面也要加入重传机制。
交易系统是时间敏感的,网关和终端之间日历和时钟同步也是至关重要。日历对延迟容忍性要高点,时钟就苛刻的多,传统的NTP误差在毫秒级,随着交易频率越来越高和交易公平性的要求,对时间精度越来越高。撮合原则除了价格优先还有时间优先,简单的做法以到达撮合系统来标记时间优先顺序,这种做法受到传输距离影响比较大,高频量化系统就把服务器搬到交易所机房,减少传输距离,拿到时间优先权,更公平的做法是以委托单到交易所的前置机为准。有的交易所会采用GPS时钟源,早期有报道称,谷歌在数据中心内部采用原子钟作为跨数据中心时钟同步基准,不知道现在交易所有没有应用。GPS时钟加原子钟,这两种技术混用,以物理世界的真实时间,大大降低了传输距离导致的排序偏差,也降低了技术难度。
前置机和网关之间的断网重连机制也是网关要考虑的重点,毕竟网络状况是不可预测的。前置机在断网后有可能连接失败,或者重连后可能连接到其他网关。交易系统如何避免重单,在前置机重连后,之前的网关数据如何处理,是业务级别策略。网关是被动接受连接,断网重连不是技术上难题。
网关除了网络流量控制外,还要考虑业务上的流速控制,避免某个前置机发单过多,而其他前置机处于饥饿状态,这是技术导致业务上的不公平。