有三个时钟,就有三种顺序
一句话总结
交易所时间、网关接收时间、应用程序处理时间是不同的时钟,根据用哪个时钟进行排序,对“取消先还是结算先”的答案会颠倒。
为什么需要这个?
一个活动通常有两个以上的视觉效果。第一次看时不知道为什么会有这么多,就随便选一个排序。那个选择会改变结论。
ts_exch 거래소가 그 일이 일어났다고 찍은 시각
ts_recv 우리 게이트웨이가 그 메시지를 받은 시각
ts_proc 우리 애플리케이션이 그것을 처리한 시각
三个时间点的间隔会根据网络路径和队列长度而变化。问题是路径不是一个。如果结算通知和取消响应通过不同的会话、不同的线路、不同的进程,交易所先发生的事情我们以后才会收到。
怎么行动
将前面的课程的那个命令排成两块表盘的话,会这样切换。
거래소 시각 순서 수신 시각 순서
cancel_req cancel_req
fill (누적 300) cancelled
cancelled fill (누적 300)
-------------------------- --------------------------
마지막 이벤트 = cancelled 마지막 이벤트 = fill
결론: 취소된 주문 결론: 체결된 주문
同样的六行,同样的折叠规则,不同的答案。而且这种差异并不罕见。因为取消回复是短消息,所以快速到达和签订通知通常走相对较慢的路径,因此取消和签订在几毫秒内竞争时,几乎每次都会改变顺序。
应该以哪一方为依据。在市场上实际发生的事情的顺序是交易所的视角。我们的接收视角是我们的基础设施的情况,而不是事实。因此,事后重组、审计、纠纷应对是按交易所的视角排序。如果两个事件在同一时间发生,则按交易所给出的序列号进行区分。如果只有一个排序标准,那么在同一输入中每次都会得到不同的答案。
但是也不丢弃接收时间。两个时间差是延迟,用于寻找延迟突出的部分。而且实时处理器看不到未来,只能按照到达的顺序处理。承认实时结果和事后重组结果可能不同,并设置事后重组是正确答案,实时结果以此进行校正的程序是现实的答案。
**最好的设计是让顺序不会决定结果。**在这种情况下,如果规则这样改变,两个时钟的答案就会相同——播放结束后,如果累计成交数量超过订单数量,状态就是成交。依据在域中。成交是不可逆转的事实,取消仅适用于余量。对于余量为0的订单,取消到达是正常的,但这不会删除成交。
在现场相遇的样子
如果交易所发生纠纷,双方都会拿出各自的日志。交易所以自己的视角,我们以自己的视角出示整理好的表格。如果两张表格的顺序不同,从那时起就不是确认事实的问题,而是要承认哪个时钟的问题,合同书和规定通常以交易所的视角为基准编写。所以只留下自己的视角,抛弃交易所的视角的日志设计,在纠纷中使我们处于弱势地位。
另外,一台NTP不合规的服务器被调查几周。在一个地方,两台网关中的一台时钟比约400ms快,但该设备只记录了过去订单中只有取消订单先于签约。光看数据,看起来像是特定品种·特定时间段聚集,所以找了很长时间市场因素。在处理时间的研究中,首先怀疑时钟本身可以节省时间。
下次实习要做的事情
将相同的事件日志分别按交易所时间和接收时间排序,制作两副最终状态表,准确地提取出结论颠覆的订单。然后加入不受顺序左右的规则,确认两副相同。