你确定你的交易系统最快?
——谈交易系统中的时间问题

作者:柳峰 盛立金融软件

除了稳定性外,衡量一个交易系统的重要指标——延迟和吞吐量都和时间有关。从提供服务的期货公司或者证券公司的角度来说,除了拼公司的服务外,交易速度也是吸引客户的重要手段。现在常用的比较交易速度的方法是在不同公司的交易环境里,比较同一个策略在同一个行情触发时下的单子的交易所单号的大小。这种方法可以看出些总体效果,但是一种比较粗糙的方法,无法知道交易环节里的各模块如行情、柜台、交换机和交易所的线路的具体延迟和性能到底如何。只有明确知道了各模块和竞争对手的具体差别,才能对症下药地做调整,取得事半功倍的效果。没有精准的数据,很大部分可能都是做无用功。带着这些问题,我们来讨论下交易系统中的时间问题。

要讨论交易系统中的时间问题,我们首先来谈一谈时间本身。网络设备的参考时间通常是指协调世界时间(Coordinated Universal Time,简称UTC),该时间以原子时秒长(铯原子基态的两个超精细能级间在海平面、零磁场下跃迁辐射9,192,631,770周所持续的时间)为基础,从1972年起,协调世界时被确定为全世界的官方时间和国际民用时间标准。中国现代时间标准是中国科学院国家授时中心(英文缩写为NTSC)建立并保持的原子时标准,中国科学院国家授时中心利用一组原子钟(目前为19台铯原子钟,4台氢原子钟),通过测量比对和算法设计,建立并保持着高精度中国原子时标准TA(NTSC)和中国协调世界时标准UTC(NTSC),并通过卫星与世界上主要时间实验室保持定期时间对比,国家授时中心保持中国协调世界时UTC(NTSC)与UTC之差已经控制在50纳秒以内。美国的类似机构包括美国海军天文台(USNO)和美国标准技术研究院(NIST),其中美国海军天文台维持的UTC (USNO) 与UTC之差在10纳秒以内,两个机构之间会定期比较各自维持的时间(通过大约10颗卫星进行),两者之差通常在20纳秒以内。全世界有约50个这样的机构(时间实验室),共有约200多台原子钟,他们会将各自的数据定期传送给设在法国巴黎的国际权度局(BIPM),并由其建立并保持国际原子时。

网络设备里的时间是通过与UTC同步来获取的的。而UTC是通过无线电信号的方式传播的,通常的方式有GPS和CDMA。GPS信号来自GPS卫星,信号强度较弱,但由于GPS卫星上配备原子钟,其提供的时间精度很高,能够达到与UTC相差小于40纳秒。CDMA信号比GPS强,但提供的时间精度不如GPS信号,与UTC相差只能达到10微秒级别。除了这两种方式之外,有一种相对较新的技术叫STL (Satellite Time and Location),它使用的信号比GPS强1000倍,可以穿透建筑物,同时信号也是加密的,能够提供几百纳秒级别的精度。

网络设备时间与参考时间同步,通常有两种方式,一种是通过网络时间协议(NTP),通过该协议,网络设备可以与局域网或者因特网里的时间服务器同步,该协议所提供的精度较低,在局域网(LAN)里能够达到小于1毫秒,在广域网(WAN)里能够达到几十毫秒,我们日常所用的计算机里的时间通常就是由NTP协议提供的。另外一种同步协议是精确时间协议(PTP),该协议用于在局域网中的多个系统之间进行时间同步,支持PTP的硬件设备(如网卡)通常能够达到100纳秒的精度(主从时钟的时间差),理想情况下,比如网卡直连或者通过特定交换机,精度能够达到10纳秒以内。

这里我们顺便提一下普通计算机里提供时钟源的设备,由于计算机芯片本身并不具备时钟信号源,因此必须由专门的时钟电路提供时钟信号,石英晶体振荡器(Quartz Crystal OSC,简称晶振)就是一种最常用的时钟信号振荡源,石英晶体振荡器的频率稳定度可达1E-9/日,甚至1E-11。例如10MHz的振荡器,频率在一日之内的变化一般不大于0.1Hz,这对普通计算机来说足够稳定,后面我们会谈到,原子钟可以提供更高的频率稳定度。

在前面的讨论中,我们提到“精度”,其实这里涉及到两个概念,一个是准确度(Accuracy),另外一个概念叫精确度(Precision),对于时间同步而言,准确度是指同步时钟与参考时钟的平均时间差,可以通过多个测量点的均值和标准差来体现,精确度是指同步时钟与参考时钟时间差的方差,仅仅有高精确度并不一定表示同步性能很好。比如,对于时间同步而言,如果同步时间设备的时钟频率稳定度高,其精确度就会相对高,但这并不表示同步时钟与参考时钟的平均时间差小,即准确度不一定高,准确度还会受其他因素影响,比如设备时钟的分辨率以及使用的算法等。

上面提到的UTC是一个绝对时间的概念, 另外一个概念是相对时间,我们通常所说的延迟是指的相对时间,对于同一个局域网内的系统,即使在没有与UTC同步的情况下,如果待测数据包都接入同一个测量设备,并由该设备对每个数据包记录时间戳,由于这里只用到一个设备,只有一个参考时间,因此没有同步误差,能够得到高精度的延迟测量。典型的延迟测量环境如下图所示,这里待测数据包在进入待测设备前后分别被复制到测量设备,并由该测量设备记录时间戳,通过比较时间戳来计算待测设备的延迟。这里的测量设备可以是普通的计算机,通过软件记录日志的方式记录时间戳,也可以是带有硬件时间戳功能的网卡、带抓包和记录时间戳功能的交换机、基于FPGA的抓包设备等。

这里提到时间戳的概念,在交易系统中通常使用的是Unix时间戳(Unix time, POSIX time或Unix timestamp等),是指从1970年的1月1号00:00:00(世界标准时间,UTC)开始所经过的秒数(不考虑闰秒),根据表示的精确度的不同,Unix时间戳有10位(秒级)、13位(毫秒级)、19位(纳秒级)等。

在测量网络延迟性能时,延迟测量精度取决于时间戳的精度。具体来说,这里的时间戳指的是当某一事件发生时(比如某个数据包达到时,这里数据包到达时间可以是数据包的开始时刻,也可以是一个数据包完整接收的时刻),系统记录下的时间,准确的说并不是事件本身发生的时间,因为系统得知事件发生、获取当前系统时间、对时间进行记录(比如将时间信息写入日志文件或者写入扩展包头部分),这一系列动作也需要时间,记录下的时间戳与真实事件发生时间之间会有误差。这个问题在用计算机软件系统记录的时间戳尤其明显。虽然计算机主时钟频率很高,但由于操作系统延迟的不确定性等原因,这种类型时间戳的精度通常较低,大致在毫秒或百微秒级别。要获取更高精度,需要特殊的硬件设备来记录时间戳,由于硬件系统的确定性特定(不依赖于操作系统),可以在得知事件发生之后的下一个时钟周期及时触发记录时间动作,并且这种设备支持高分辨率的时钟,因此可以获得高分辨率的时间戳(个位数纳秒级别)。上面提到的带有硬件时间戳功能的网卡、带抓包和记录时间戳功能的交换机、基于FPGA的抓包设备等都是这种硬件设备的例子。以FPGA板卡为例,如果FPGA的主时钟频率可以达到250MHz以上,其时钟的精度能达到4纳秒,因此时间戳的分辨率也能够达到4纳秒。这里顺便提一句,在谈相对时间的时候,一定要确定是从哪里到哪里。很多时侯,大家用的是同一个名词,但其实谈的是不一样的东西。一些基于软件的系统,特别喜欢用含糊的“内部处理时间”这个名词。 这个名词其实很有误导性 ,必须细究下到底指的是内部哪个模块的处理时间,以及这个时间的测量方法。相比来说,基于硬件的可确定性,硬件的系统会好很多。 计算机的问题首先在于本身的时间精度不高,另外它时间记录的过程也稳定性不高,导致在微秒级别差异的时候,很难得出准确结果。在平常的工作中,尤其是行情系统的快慢比较时,很多时候差别是微秒级的,如果要做到在软件上的正确比较,对程序的设计,数据接收保存的方法,如何减少操作系统切换的影响,都是需要精心设计的,才能得到基本数量级正确的值。

前面说的是同一个地理位置的情况,但很多时候我们需要比较两个或两个以上不同地方的时间。由于不同地理位置的网络中的测量设备使用的参考时间不一样,延迟测量精度还会受同步误差的影响,因此测量精度取决于各个网络中的参考时间与UTC同步的精度。要得到最高的精度,需要使用上面提到的GPS信号。每一个网络中需要有一个主时钟(Master Clock)与UTC同步,然后延迟测量设备需要与主时钟同步,并用其提供的时钟作为参考时钟,这里可以使用PTP协议的方式同步,对于某些特定的设备,也可以通过秒脉冲(1PPS)信号与主时钟同步,后者的精度通常更高,同步之后的测量设备给网络数据包打上高分辨率的时间戳,然后通过比较数据包的时间戳来判断系统延迟性能。这里由于不同地理位置的网络需要各自与UTC同步,同步误差无法排除,而由于GPS信号能够提供的时间精度所限,延迟测量精度只能到达几十纳秒级别。

在某些情况下,交易系统所在的数据中心或者机房内可能没有GPS信号,或者GPS信号不稳定,不能保证随时都能接收到,因此网络里的主时钟设备可能丢失与UTC的同步,在这种情况下,主时钟设备可能选择使用原子钟作为参考时钟。原子钟是一种时钟,它以原子共振频率标准来计算及保持时间的准确,原子钟是世界上已知最准确的时间测量和频率标准,最好的铯原子钟精度可以达到每500万年相差1秒,目前的商用原子钟(比如铷原子钟)可以输出稳定的10MHz脉冲或秒脉冲(由铷振荡器频率信号分频得到),并且在与GPS信号锁定时同步于GPS输出的UTC时间(对于不同的产品,同步过程需要几分钟到几十小时不等),在GPS信号丢失时自动切换到原子钟提供的稳定脉冲(铷原子钟的月频率漂移约为1E-11到4E-11),维持参考时钟的精度。在完全没有GPS信号的情况下,可以通过CDMA或者STL信号来获取参考时间。 举例来说,如果要测试两家公司的行情时间,而且两家没有GPS信号,可以先在外面用GPS或者同一网络进行同步,再切换成机器上的原子钟信号,这样就能保证两个在不同机房的机器基本同步,可以保证在6个小时内保持在一个微秒内的差别。这中间当然有保持电源等细节需要关注.这种办法经过测试,可行性挺高。

随着网络带宽的不断提高,比如40G和100G以太网,时间同步和高精度时间戳变得越来越重要,许多对数据的分析都依赖于高精度的时间,要获取最高的精度,需要使用GPS来获取时间,并且使用专门的硬件设备记录时间戳,其他只需要足够精度的应用,可以选择使用NTP或者CDMA的方式。总之,合适的时间同步方案,以及用何种方式记录时间,应该取决于应用的需求,以上讨论可以作为参考。

(转)你确定你的交易系统最快?相关推荐

  1. 夹子机器人/pancakes科学家机器人这种骗局到现在还有人会上当!每天骗取上千万!带大家一同揭秘!!

    "CCR现货机器人"和"CCG合约机器人"更全面更智能的交易系统! 快长按图片识别二维码了解吧! 如果让你用一个3000元的成本去尝试一个方法,有1%的几率让你 ...

  2. 送书 | 《商品期货量化交易实战》

    今天是周三,又到了给大家送书的时刻啦!这次给大家带来的是<商品期货量化交易实战>!       (文末查看送书规则) 简介 本书首先讲解量化交易基础和Python编程入门:再讲解量化交易A ...

  3. python 大智慧 dll 下单_大智慧闪电下单

    大智慧闪电下单(分类:股票软件下载)大智慧闪电下单下载针对大众客户群体设计,资讯及时实用,界面经典容易操作,大字模式轻松看盘,后台升级自动省心. 大智慧闪电下单的功能特点: 1.先登陆股票委托买卖软件 ...

  4. 票据交易系统-票据交易快人一步

    一.系统介绍 票据交易系统为持票人.票据机构.企业.银行提供建立发布及交易撮合一站式服务平台,全方位为广大有票据流转交易需求的用户提供便捷.安全.全面的电子票据交易渠道,致力于为每个平台会员打造一个& ...

  5. 快被系统性能逼疯了?你需要这份性能优化策略

    来自:DBAplus社群 作者介绍 刘迪伟,就职于世界五百强银行.负责公司网银业务系统的设计和交付,擅长并持续关注Java性能优化.DevOps等领域. XX银行网银系统是一套全新的对公业务渠道类系统 ...

  6. 饿了么交易系统应用架构演进

    内容来源:2017 年 12 月 2 日,饿了么研发总监石佳宁在"IAS2017互联网架构峰会"进行<饿了么交易系统应用架构演进>演讲分享.IT 大咖说(微信id:it ...

  7. 量化延时法时间测量_「交易技术前沿」交易系统低延时测试与分析

    本文选自 <交易技术前沿>总第三十三期文章(2018年12月) 证券期货行业测试中心(中金所) 魏畅 陈冬严 张鸿晔 摘要:订单延时(Latency)是衡量交易系统性能的重要指标.本文利用 ...

  8. 高并发资金交易系统设计方案—百亿双十一、微信红包背后的技术架构

    21CTO社区导读 : 今天带来的是一个长篇文章.主要讲解高可用的互联网交易系统架构,包括双十一.支付宝&微博红包技术架构,以及微信红包的技术架构,希望能给各位提供价值. 概述 话说每逢双十一 ...

  9. 如何实现32.5万笔/秒的交易峰值?阿里交易系统TMF2.0技术揭秘

    阿里妹导读:基于TMF 2.0关键模型,阿里交易平台实现了业务定义可视.可管.可配.今天我们来一起了解交易平台遇到的挑战.TMF2.0解决的关键问题.以及TMF 2.0的关键模型. 本文作者为毗卢,阿 ...

  10. 为什么《梦幻西游》能这么长寿(二):拆解其交易系统的高深之处

    不过,你可能还会问,搭建这个官方交易系统,"梦幻"好像也没多赚钱啊?不对,我可以收税. 在<梦幻西游>的游戏体系里,有着各种各样的交易系统. 每个玩家在这里都相当于一位 ...

最新文章

  1. 数据结构---基础概念
  2. 在sdk中添加源文件_实用干货 | 一步一步教你在SpringBoot中集成微信刷卡支付
  3. 论机智,还是国产安卓旗舰花样多,从2999到10999元,各有各的“开窍点”
  4. 进阶学习(3.6) Prototype Pattern 原型模式
  5. php携程语比,PHP 协程
  6. c语言float转换为int_关于C语言的类型
  7. PMP考试的一点学习感悟
  8. 04.SpringBoot 自定义配置
  9. Num37 spring 事务 ssh整合
  10. php当前页面删除处理,php删除记录同时刷新当前页面的实现代码
  11. java项目计算器关键思路_JAVA项目实战(计算器)
  12. Android m3u8网络视频播放
  13. 通灵学院|游戏设计研习1:人类的需求与动机★(1200字)
  14. 计算机二级选择题瞎蒙,一级消防员考试,一级消防员考试题大全
  15. JAVA教材(推荐新手学习)
  16. 第十三届蓝桥杯大赛软件赛决赛(C/C++ 大学B组)
  17. Python之进程 3 - 进程池和multiprocess.Poll
  18. Android实现button一边圆角一边直角
  19. 1.layer弹窗在使用时,原本隐藏的div,在打开弹窗后竟然显示出来了
  20. opencv C艹:读取视频文件,保存图像,视频文件,读取保存XML YAML文件

热门文章

  1. Nova reboot 和 lock 操作 - 每天5分钟玩转 OpenStack(32)
  2. [java实战篇]--java的GUI(1)
  3. 《JavaScript权威指南》读书笔记一
  4. 轻松取消Excel中的“自动添加超链接”
  5. 向日葵,teamviewer
  6. Codeforces Round #436 (Div. 2) B. Polycarp and Letters
  7. Openfire+Spark+Spark Web安装配置(一)
  8. 数据源Display方法
  9. python 异步IO编程
  10. 图形数据库Neo4j(1)----简介及使用