因果一致性 是一种比顺序一致性更弱但更高效的模型,它仅关注有“因果关系”的操作。
核心概念
如果操作 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,确保依赖项已就绪。
适用场景
- 社交媒体评论区、论坛回帖。
- 协同办公软件(如文档协作)。