Appearance
向量时钟:判断分布式事件的先后与并发
修订于 2026-10-12。本文为概念解释,不把 Git 或某个现有数据库的实现误称为通用向量时钟。
分布式节点不能只依赖墙上时钟判断因果。Lamport 的“先发生于”关系描述:同一进程中的顺序和消息发送到接收所建立的顺序;互不影响的事件可能并发。Lamport 标量时钟可保持因果先后,但不同标量值本身不证明两个事件存在因果关系。
向量怎样比较
设系统有两个参与者 A、B。一个事件的版本向量可写为 [a,b],分别记录已知的计数。若向量 X 的每个分量都不大于 Y,且至少一个分量更小,可判定 X 在 Y 之前;如果 X、Y 各有一个分量更大,则两者不能按此关系排序,代表并发版本。
例如 [2,1] 与 [1,2] 并发。系统不能仅凭时间戳安全地认定一个版本覆盖另一个;应根据业务含义合并、保留冲突版本或交由用户处理。
工程边界
向量随参与者数量增长;节点身份变化、历史压缩和长期离线会让实现复杂。Amazon 的 Dynamo 论文曾使用向量时钟跟踪对象版本并协调冲突,但这不意味着今天所有 DynamoDB API 都采用同一种机制。讨论具体产品时应以该产品当前文档为准。