因果一致性 是一种比顺序一致性更弱但更高效的模型,它仅关注有“因果关系”的操作。

核心概念

如果操作 A 导致了操作 B(或者操作 B 是在看到操作 A 之后发生的),那么系统保证所有节点都先看到 A,再看到 B

sequenceDiagram
    participant User A as 用户 A
    participant User B as 用户 B
    participant System as 系统节点

    User A->>System: 1. 发布帖子 (A)
    System-->>User B: 2. 看到帖子 (A)
    User B->>System: 3. 回复评论 (B)
    Note over System: A 与 B 存在因果关系
    Note over System: 任何节点必须先显示 A 再显示 B
  • 因果有序:有逻辑关联的操作必须有序。
  • 并发无序:对于没有因果关系的并发操作,不同节点看到的顺序可以不同。

比如:你先发了帖子(A),别人针对帖子回了评论(B)。系统必须保证所有人先看到帖子,才能看到评论。但如果两个互不相识的人同时发帖,谁先谁后并不重要。

实现手段

  • 向量时钟 (Vector Clocks):追踪操作间的依赖关系。
  • 依赖跟踪:在请求中携带上一个操作的版本 ID,确保依赖项已就绪。

适用场景

  • 社交媒体评论区、论坛回帖。
  • 协同办公软件(如文档协作)。