大家好,我是飞哥!最近简单研究了一下低延迟网络架构,今天分享给大家。说到优秀的低延迟网络架构,大家可能首先想到的是各大互联网公司,比如腾讯、阿里比特,总觉得各大公司一定是做的最好。但实际上,在一般的互联网应用中,用户虽然也讨厌延迟,但整体上对延迟并不太敏感。只要按钮在点击按钮后一秒内能有反应,用户基本感觉不到。甚至需要两三秒来响应用户,这是可以接受的。所以,在如今的互联网公司中,虽然也关注服务访问延迟,但实际上并没有优化到极致。但是整个行业中有这么一个细分领域对延迟极其敏感,那就是高频量化交易场景。因为在这种生意中,同样的价格,先出价的人先成交。如果一家量化交易公司的延迟比其竞争对手多1ms(毫秒),则可能意味着大量资金损失。据专业市场机构评估,在全球电子交易中,如果交易处理时间比对手慢5毫秒,可能损失1%的利润。慢10毫秒,损失按比例增加到10%。因此高频量化交易场景下的网络架构几乎是世界顶级的低延迟网络架构,非常值得学习。在朋友圈咨询了几位从事量化交易的专业人士,也看了一些技术资料,对这个网络架构有了初步的了解。总结出来分享给大家!我们先来看一组数据,某交易所早在2016年就将交易延迟优化到了278us(微秒)。一个网络请求从用户发送到最终处理,它的延迟一般可以分为两部分,一是网络转发延迟,二是系统处理延迟。下面我们分两部分来看看高频量化交易的网络架构到底用了哪些黑科技。1.网络转发延迟在网络上,高频量化交易采用了极致优化。1.1就近部署和专线就近部署是最简单有效的方法。如果链路上的传输很耗时,那么就直接缩短链路。许多交易中心在交易所附近租用服务器。这种方法还有一个特殊的名称,叫做Co-location。另外,如果是跨区域的,是通过专线物理线路连接的。这样可以使用最短的物理线路,也不需要被公网传输的数据干扰,稳定性和安全性也更好。这个在国内还是广泛使用的,因为下面的微波传输网络成本要低很多。1.2微波传输说到光速,我们都知道它的速度是3×10的8次方m/s。但实际上,光在不同介质中的传播速度是不同的。介质密度越大,光在其中的传播速度越慢。空气中的光速比真空中稍慢,但基本接近。但是光纤中的速度就大打折扣了,它的速度大约是真空中光速的50%~66%。另外,如果在两地之间铺设任何光缆,都很难做到完全笔直,总会有很多曲折。比如从哈尔滨到上海,需要经过北京等多个中转节点。这样一来,实际光纤的传输距离也会增加很多。为了在量化交易网络应用中追求极致的低延迟,核心网采用了微波传输。让信号通过空气而不是光纤传播。这样的微波传输网络存在于芝加哥商品交易所和新泽西州的纳斯达克数据中心。将两个地点之间的RTT从2012年的8.7毫秒降低到2016年的7.9毫秒。此外,马斯克的Starlink网络还可以为超远距离场景(跨洋和跨大陆)提供更低延迟的网络传输。1.3InfiniBand替代以太网少数交换机也使用InfiniBand替代以太网。InfiniBand网络有两部分,一是物理链路协议。第二部分是远程直接内存访问(RDMA)。在物理链路协议上,以太网就像一个快递包裹配送网络。网络上的每个节点都需要先接收到网络数据包,然后查看自己的二层或三层地址信息,计算出如何发送,然后选择一个出口扔进发送队列等待发送出去。整个转发过程其实效率不是特别高。还有一种类似于铁路交叉轨道的转运方式。当数据到达时,提前改变轨道,数据包到达后可以直接转发。您不需要先接受所有这些,计算一下然后转发它们。InfiniBand就是这样一种网络。找了个网卡初始延迟数据的对比。基于以太网的TCPUDP应用的发送和接收延迟会在10us左右,而InfiniBand网卡的发送和接收延迟(write,send)在600ns左右。由于转发效率极高,在可靠性方面,InfiniBand网络不像以太网。存在抖动问题。InfiniBand网络的第二个优势是从设计之初就考虑了RDMA,延迟非常低。这个我们后面具体介绍RDMA的时候再说。然而,InfiniBand有很多缺点。它需要一个调度中心,该中心价格昂贵且地址空间有限。所以目前只有少数交易所在使用它。1.4更大的带宽更大的带宽通常可以减少延迟。这很容易理解。当数据包大小固定时,必须在大带宽网络下发送速度更快。因此,10Gbps甚至25Gbps的网络被用于交易场景。1.5低延迟交换机传统交换机工作在第二层。为了解决信号之间的冲突,出现了CSMA/CD等协议。但其实只要不发生冲突,大可不必这么麻烦。Arista出品的交换机设备可以直接在物理层转发,不需要二层转发。它就像一个完整的光纤。信号从一个端口进入,直接无冲突地转发到另一个端口(或多个端口)发出。详见Arista官网:https://www.arista.com/zh/products/7130-series2.系统处理延迟当用户请求到达服务器后,系统才能开始接收并处理请求。在这个过程中,高频交易场景也进行了很多的优化2.1KernelByPass大家一直以为内核经过了很长时间的测试,优化到了极致。对于一般的应用场景是这样,但是对于延迟要求极高的场景,性能开销还是太大了。当一个网络数据包被接收到时,必须经过协议栈层层处理,最后送到接收队列。然后唤醒用户进程,上下文通知用户进程。我在网上的文章中介绍过这个过程。所有文章列表请参考:https://github.com/yanfeizhang/coder-kung-fu另外,用户进程在收到内核通知后不能立即运行,需要在CPU的运行中排队队列。内核中的进程调度不是抢占式的,真正开始运行的时候,可能已经过去了10毫秒。如果采用传统的内核方式,在网络链路上花大价钱节省的几毫秒可能就全部埋没在这里了。Kernelbypass技术是绕过内核协议栈,直接在用户态轮询等待用户请求,一旦有就立即开始处理。节省了大量的内核态开销和内核态与用户态的切换开销。此类技术包括Solarflare的Onload和Exablaze的ExaSOCK,在量化交易中应用广泛!下面是我在Solarflare官网上拍的一张工作原理图。2.2RDMARemoteDirectMemoryAccessRDMA是另一种解决内核开销的方式。我们之前介绍过的InfiniBand本身就支持RDMA。除了InfiniBand,还有两种RDMA方案,RoCE和iWARP。它们都实现了直接远程操作接收器内存的能力,从而减少了延迟。与InfiniBand相比,RoCE和iWARPRDMA解决方案兼容当前的以太网链路层。他们不需要使用特殊的交换机,但也必须使用专用的网卡硬件。RoCE协议有两个版本,RoCEv1和RoCEv2。RoCEv1是基于以太网链路层实现的RDMA协议(交换机需要支持PFC等流控技术以保证物理层的可靠传输),允许同一VLAN内的两台主机进行通信。RoCEv2克服了RoCEv1绑定到单个VLAN的限制。通过更改数据包封装(包括IP和UDP标头),RoCEv2现在可以跨L2和L3网络使用。2.3TOE硬件卸载传统计算由CPU执行。但是,CPU的性能已经发展到极限,无法进一步提升。接下来的改进思路是如何将一些计算工作从CPU卸载掉,交由其他硬件完成,比如DPU、FPGA。TOE的全称是TCPoffloadEngine,指的是将TCP协议卸载到FPGA硬件上。在高频量化交易中,大量使用FPGA编程计算。FPGA相对于GPU的核心优势是低延迟。所有数据都不需要跨越PCIE总线,FPGA中的数据传输不需要多次数据拷贝。其加速效果甚至可以达到CPU的10-100倍。一些公司还使用FPGA,不仅实现了TCP、IP、epoll等机制,还包含了业务逻辑处理,使得系统延迟可达数百纳秒,甚至数十纳秒。2.4其他优化方法除上述方法外,高频量化交易场景会着重在系统各个位置进行耗时优化。在内存方面,大量的内存换取了时间,使用的内存一般1TB起步。在CPU硬件上,会购买主频更高的CPU。一般普通服务器的CPU频率都在3GHz以上,量化交易甚至会采购5GHz频率的硬件。CPU也会通过BIOS调整进入省电降频模式。在进程运行方面,线程会被绑定在单核上运行,独占CPU核心,充分利用CPU缓存,在CacheLine对齐方面会非常活跃。它还会尽可能少地调用系统调用,以避免用户态和内核态切换的开销。延迟以各种方式最小化。3.小结一个网络请求从用户发出到最终处理,它的延时一般可以分为两部分,一是网络转发延时,二是系统处理延时。高频量化交易公司在网络转发延迟方面采用的优化方式有微波传输、InfiniBand、低延迟交换机、就近部署、网络专线等。在系统处理延迟方面,KernelByPass被广泛用于降低内核处理延迟,一些公司也使用类似RDMA的技术。在计算方面,大量的计算密集型工作从CPU卸载到FPGA。当然,传统的优化手段也被量化公司采用,比如大内存交换时间、高频CPU、核心绑定等等。简而言之,量化交易公司采用了行业内的各种先进技术来减少处理延迟。致谢一开始只知道量化交易的网络架构是低延迟的,但是不清楚延迟低的原因以及如何实现。发朋友圈求教,收到了很多相关信息和资料。感谢以下同学在本次学习中对飞哥的帮助:阿飞、原力、曹鹏飞、沈玉东、周志新、Dylan、钟继红、倪风、LERVISNH、阿贝尔、伏特加、逍遥子等同学,在不特定顺序。还要感谢以下文章的作者:低延迟交易系统设计浅谈InfiniBand和以太网络的区别窥探全球最低延迟网络RoCE网络技术解析RoCE、IB、TCP网络基础知识以及他们的差异和对??比技术就是这样,1+1大于2,所以多跟身边的人和行业多交流,我们都能更快的成长,这也是我在很忙的工作之余坚持分享的原因.
