因果一致性

保证有因果关系的操作在所有节点上按相同顺序可见,无因果关系的操作可乱序;比强一致代价低,又避免“评论早于帖子”这类明显异常。

保序范围同一客户端顺序、读写依赖、传递关系
不保证并发无因果操作的全局顺序
实现版本向量、因果上下文传递、依赖跟踪

因果依赖检查示意

因果依赖检查示意
每个消息携带已见事件集合(版本向量)
- 节点收到消息时先补齐缺失的依赖事件
- 依赖未到则暂存,不提前展示

效果:回复不会先于原帖对用户可见
社交、协作类场景常以因果一致作为折中:既保证用户直觉上的顺序,又保留可用性。

易错点

  • 把因果顺序当成全局顺序,跨用户比较时结论错误
  • 上下文未随请求传递,跨节点后因果关系丢失

数据来源与参考

  • 《数据密集型应用系统设计》(Kleppmann)第 5 章
  • Jepsen 一致性模型参考
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌