LabHub
学习 学习路径 课程

资本市场与清结算

序号存在的理由

在 LabHub 中继续学习

一句话总结

行情信息流位于不保证顺序或到达时间的传输之上,因此每个消息都附有顺序号——唯一区分遗漏和延迟的手段就是这个数字。

流程图: UDP多播 · 按到达顺序计号的方式总是会夸大。 · 重新发送请求 · 间隙被判定为顺序的集合。

为什么需要这个?

行情数据与其他数据的要求条件完全相反。比起几毫秒延迟的准确值,现在到达的值更有用,一只股票的最高价在1秒内会变化数十次。所以交易所的行情通常不是TCP,而是UDP多播。没有重发和顺序保证,但发送一次,所有订阅者都会同时收到。

没有保证意味着两种情况实际上都会发生。

유실   보낸 메시지가 우리에게 오지 않는다
재정렬 나중에 보낸 메시지가 먼저 도착한다

在接收方看来,这两个看起来一样。如果顺序100之后出现102,在那一刻,不知道101是不是没有了,还是来晚了。所以**按到达顺序计号的方式总是会夸大。**在实际数据中,按到达顺序计算的差距有1,138件,在该课程的练习中,可以直接看到真正遗漏了204件的情况。

为什么这种差异是问题呢,因为发现差距的推特处理器要做的就是重新发送请求。如果请求1,138次,那么请求流量就会占用线路,如果线路堵塞的话,延迟会更大,延迟越大,重新排序会越大,重新排序越大,差距就会越明显。自己制造的问题自己放大。实际上,开业后不久就会陷入这种循环,推特会每隔几分钟就瘫痪一次,这种事故反复发生。

怎么行动

间隙被判定为顺序的集合。收集到达的顺序,在预期范围内只排除一次都没有来的情况。迟到的就进入集合,所以会自动被排除。判定中附带等待时间——通常等了几十毫秒后也没有就确认为当时被排除。

弥补遗漏的办法有三种。

A/B 중재    거래소가 같은 내용을 두 채널로 따로 보낸다.
            한쪽 구멍은 대개 다른 쪽에 있다. 요청 없이 메워진다.
재전송 요청 빠진 순번을 콕 집어 다시 달라고 한다.
            거래소 재전송 버퍼를 넘어가면 못 받는다.
스냅샷 복구 현재 호가창 전체를 다시 받는다.
            무겁지만 한 번에 끝난다. 구멍이 길면 이쪽이 싸다.

顺序就是成本顺序。在A/B仲裁之前不先尝试,直接请求重新传输的实现很常见,在实习数据中,A通道的204个孔中,180个只要看B通道就会被填补。88%不需要请求本身。

**重复也是正常的。**如果同时收到A/B两个频道,就会收到两次相同的消息。如果收到重新发送,也会收到。如果不按顺序过滤掉的话,结算量统计会翻倍,如果用那个值制作交易金额排名,排名就会完全颠倒。

**延迟不是平均值,而是从尾巴看。**在实习数据中,整体平均值是10,071微秒,中位数是1,049微秒。平均值是中位数的几倍,这意味着少数非常慢的事情拖累了平均值,而这个少数恰好是事故区间。如果把平均值作为监控指标,这个事故在指标上看起来什么都没发生。

**百分比位数甚至计算方式都不能确定。**最近接近排名方式和线性插值方式在同一数据中会产生不同的值。如果我们的仪表板和交易所SLA文件使用不同的定义,那么同一线路,一边说违反,一边说没有违反。实际上会召开这样的会议。

在现场相遇的样子

在某个地方有举报称“只有在开始阶段价格上涨”。延迟仪表盘只显示平均值,开业后不久也保持在12ms左右的平稳状态。截图后按分秒拆分,09:00分和09:08分两个区间的p99超过了380ms,其中两个区间超过10ms的案例占95%。其余九个区间的p99为1.6ms。一个平均值将两个世界混合成一个数字。

延迟超过300ms意味着我们正在看到的行价已经过去的值。以那个值计算指定价下单的话,可能会无法成交,或者相反会以不利的值成交。如果p99是310ms,那么100件中有1件是看到0.3秒晚的图片下单的。这就是为什么市价质量就是金钱的原因。

顺序中断时实际要做的事情

在行情信息中,顺序(sequence)中断并不是例外情况,而是日常。 因此,如何处理中断决定了系统的质量。

**首先确定性地检测到中断。**如果收到的顺序比预期大,那么中间是空的。 如果较小的话,就会有重复或顺序发生变化。两个应该分别处理。

expected = last + 1
if seq == expected:      정상 처리
elif seq >  expected:    갭 — 복구 시작
else:                    중복 — 버린다(이미 반영했다)

出现差距时,将该项目的状态更改为“怀疑”。继续处理的话,错误的行价栏 上面重新计算。比什么都不给的更糟糕的是错误的值正常化 就像那样给予

恢复路径是三个中之一。重新发送请求(replay)、快照重新接收,以及辅助 转换为推特。无论使用哪个,在恢复时不要丢弃收到的实时消息。 堆积在队列中,应用快照后,按顺序依次发送该队列。 如果不遵守这个顺序,恢复后会再次出现差距。

**将延迟的时钟统一调整为一个。**交易所拍下的时间和我们收到的时间 虽然差异是延迟,但如果两个时钟不一致,就会出现负数或延迟被夸大。PTP 用NTP调整,保存两个时间,以便以后进行校正。

在狂奔时提前决定要放弃什么。每秒信息超过处理能力时 Q会长大。这时如果试图全部处理的话,延迟会不断变大,最终非常久远的 价格会像是最新的一样发送。因为只考虑最新价格才有意义,所以**中间价格 跳过(conflation)**这是对的,不能丢弃任何协议,所以通过单独的路线 处理。

只要抓住两个指标就大不相同。 发生差距的次数和处理延迟的尾值。 平均延迟不会表现出暴走。

下次实习要做的事情

直接制作12,000个顺序号的A/B双重化数据采集,以到达顺序确认传感器间隙和顺序集合中传感器间隙的差异。用B通道填充,与真正的孔区分开,剩余孔用重新传输和快照分开。延迟以最近接近排名百分位数为准,按库存分段划分,识别尾部聚集的区间。