工程笔记

时间戳不等于顺序保证

序列范围、时钟域,以及可复现重建背后的数据契约。

约 5 分钟

三个不同的问题

序列号、事件时间戳和接收时间戳描述不同性质。源序列可能规定某个通道中的顺序;事件时间戳由源端赋值;接收时间戳记录消费者何时观察到消息。具体含义需要由数据源规范定义。

明确排序的作用范围

序列号可能属于某个连接、分区、通道或标的。在不同作用范围之间,更大的序列号未必表示更晚。使用序列号检测缺口或重建状态前,应先明确其作用范围。

排序无法替代语义

传输延迟或重放可能使接收顺序不同于源事件顺序。时间戳精度相同或来自不同时钟时,按事件时间排序也可能不合适。确定性的排序不自动等于正确的重建。

三条消息的示例

考虑同一对象的 SET 消息:序列 1 将数量设为 10,序列 2 设为 4,序列 3 设为 7。契约规定单一序列范围和覆盖语义,每次 SET 替换上一数量。

按源序列重放最终为 7,按接收顺序 1、3、2 重放最终为 4。两种程序都可以是确定性的,但只有前者遵循本例契约。其他协议可能需要不同处理,因此不能据此给所有行情按名为 sequence 的字段排序。

运行公开实验

一个可复现的实验

Aurora Lab 公开示例使用三条合成消息,其中一条更新延迟到达。比较按源序列与按接收顺序重放的结果;最终值的差异说明重建需要明确的顺序契约。

记录契约

记录时间戳单位、时钟域、序列范围、重复消息处理及恢复程序。在标准化表示之外保留原始字段。本例关注数据完整性,不涉及价格预测或交易执行。

恢复也是模型的一部分

实际处理器需要明确应对重复、缺口和会话重置。根据协议,可能需要缓冲、请求恢复、加载快照或将状态标记为不可用。重新排列已经到达的消息,并非通用恢复程序。

记录状态何时恢复可信,以及哪些证据支持恢复。在标准化记录之外保留原始字段。下游消费者应能区分不完整状态与有效状态,无需重新检查全部事件历史。

返回研究目录继续查看实验

搜索网站

    方向键选择 · Enter 打开 · Esc 关闭Ctrl / ⌘ K

    浏览器设置

    隐私与显示

    设置适用于当前网站与浏览器,可随时通过页脚重新调整。

    必要设置

    在当前设备记住本次选择。

    始终启用

    未安装广告或受众分析工具。拒绝可选存储不影响阅读或联系。

    Cookie 与存储详情