因果一致性

转载部分取自

检查 MongoDB 的因果一致性

因果一致性模型

CC

causal consistency

允许不同节点以不同的顺序执行非因果的依赖操作,并且每个节点可以修改这些顺序的决策。折磨你了解决非因果依赖之间的冲突机制,其中每个站点都推测此类作之间的顺序,并可能在稍后执行时根据需要回滚其中一些作,例如 Bayou 和 COPS。

CCV

causal consistency with visible writes

假设非因果依赖假设非因果依赖作之间存在总顺序,并且每个站点只能按该顺序执行作(当它看到这些作时)。因此,不允许站点修改其非因果依赖运算的顺序,并且所有站点都以相同的顺序执行它们可见的作,例如,Gentle-Rain、Bolt-On 因果一致性。

说人话:如果一个写操作A因果先于B(如回复社交媒体的帖子),那么先观察到B的进程也必须观察到A(即依赖的写操作不能被跳过)。

Gentle-Rain

causal memory

因果一致性的另一种形式,通常指分布式共享内存系统中的因果一致性模型。所有进程对内存的读写要满足因果顺序。用于多进程共享内存的系统中,保证因果访问顺序一致。

目标:高效实现因果一致性减少同步开销。出自论文 GentleRain: Cheap and Scalable Causal Consistency with Physical Clocks

使用逻辑时间戳(比如lamport时钟或者向量时钟)和依赖跟踪来维护因果顺序。每个节点维护一个Rain时间戳,表示该节点已知的全局最新时间。通过比较时间判断操作间的因果关系,确保因果关系的操作按顺序执行。

优点:低延迟,适合WAN(广域网)减少不必要的同步

Bolt-on

目标:在现有的最终一致性系统上追加bolt-On因果一致性支持无需重构底层存储。出自论文,Bolt-on Causal Consistency。

核心思想:通过客户端或中间层跟踪和传递因果依赖关系(例如向量时钟或时间戳)。

系统本身秩序支持最终一致性,有Bolt-On层额外保证因果顺序。

优点:兼容性强,可适配多种数据库。无需修改存储引擎,实现成本低。

CM

允许一个站点在非因果依赖的顺序上与另一个站点不同,但不允许稍后其修改顺序。

历史覆盖

History Preservation

在最终一致性(eventual consistency)的分布式存储系统(如Cassandra、Dynamo)中,数据以多副本形式存储,不同节点可能在不同时间收到更新。当多个客户端并发写入同一数据项时,系统可能通过覆盖(overwrite)机制处理冲突(如"最后写入获胜"策略)。这会直接丢弃旧版本数据及其关联的因果依赖元数据,导致以下问题:

  • 因果链断裂:若操作B因果依赖于操作A(例如评论B回复了帖子A),但存储系统覆盖了A的版本(或A的元数据),后续读取可能观察到B却无法看到A,违反因果一致性。
  • 元数据丢失:因果一致性需要跟踪操作之间的依赖关系(如向量时钟、版本向量),但底层存储的覆盖写入会破坏这些元数据。

分布式共享内存

分布式共享内存(DSM) 是一种抽象模型,它使分布在多台计算机上的进程能够像访问本地内存一样访问共享的内存空间,即使这些内存物理上位于不同的节点上。DSM 系统隐藏了底层的数据分布和通信细节,为程序员提供了类似于多线程共享内存的编程模型,简化了分布式系统的开发。

  • 共享内存抽象:让多个节点上的进程可以读写同一逻辑地址空间,就像在单机多线程环境中一样。
  • 数据分布透明性:程序员无需关心数据具体存储在哪个节点,由 DSM 系统负责数据的迁移、复制和一致性维护。
  • 通信透明性:进程间通过内存读写交互,而不是显式发送消息(如 MPI 或 RPC)。

DSM 是一种软件抽象,它让多个独立的物理机器(节点)看起来像是在共享同一块连续的内存空间。应用程序可以像访问本地内存一样访问远程节点上的内存。

Last modification:July 1, 2025
如果觉得我的文章对你有用,请随意赞赏