Skip to content

无冲突复制数据类型

Conflict-free replicated data type · CRDT

通过单调状态合并或可交换操作在无协调下保证副本收敛的数据类型。

条目类型
模型

形式陈述

无冲突复制数据类型(CRDT)是带有内建合并规则的复制抽象数据类型:各副本可在不与他人协调的情况下本地接受更新,只要满足传播假设,所有正确副本就收敛到等价状态。两种标准设计:

  • 状态型(state-based):副本状态取自一个具有偏序 的 join-semilattice(见),每次更新使状态单调膨胀(supdate(s)),副本间交换整个状态并以最小上界合并:merge(s1,s2)=s1s2。join 的结合性、交换性与幂等性保证合并结果与到达顺序、重复次数无关。
  • 操作型(op-based):更新在源副本产生效果算子(effector)并广播到各副本执行。它的收敛定理必须连同交付模型一起陈述:因果相关的操作按协议要求保持顺序,并发 effectors 可交换;消息还要可靠交付,并由传输层保证恰一次、由副本去重,或让重复执行本身幂等。

两类设计由不同条件得到强最终一致性。状态型副本把已经吸收的状态信息取 join;只要吸收的信息相同,结合、交换、幂等性便使结果相同。操作型副本则在上述交付条件下执行同一因果闭包:因果顺序被保留,并发 effectors 又可交换,所以结果等价。再要求每份状态信息或每个操作最终到达所有正确副本,才推出全体副本最终收敛。

直觉

传统复制把并发冲突推给两种昂贵机制:要么用共识预先统一操作顺序,要么留给人或应用事后仲裁。CRDT 走第三条路——把冲突解决编译进数据类型的代数结构。状态型的合并满足结合、交换、幂等,因此消息乱序、重复、经由不同路径多次传播都不影响终态;操作型并非让一切顺序都无关,而是保留必要的因果顺序,并让并发操作可交换。可以把状态想成只会向上生长的信息,合并是取两份信息的并;任何两个副本无论经历怎样的交错,只要吸收了同样的信息就站在同一点上。这个视角也标出了方法的天然边界:并非所有语义都能被塞进"单调生长"的模子;若要求各副本在分区期间也立即、不可撤销地选出唯一赢家,就仍旧躲不开协调。

例子与边界

最小的正例是 Grow-only Set:状态为集合,更新是加元素,merge 取并集。副本甲加入 a、副本乙并发加入 b,交换状态后两边都计算 {a}{b}={a,b};交换顺序颠倒、状态重复送达,结果不变——结合、交换、幂等三条性质逐一兑现。稍复杂的 G-Counter 让每个副本维护自己的分量,merge 取逐分量最大值,读数取分量之和,同样满足格结构,说明"计数"也能表达为单调膨胀。

边界情形有三。其一,"最后写入胜"(LWW)寄存器常被当作 CRDT 使用,它的合并确实可交换,但语义全押在时间戳上:物理时钟偏斜可能让"较早"的写入胜出,叫作 CRDT 并不解决时钟语义问题。其二,删除比添加难:从只增集合里删元素会破坏单调性,实际设计需引入 tombstone、因果上下文或 observed-remove 规则,并带来元数据回收的难题。其三,CRDT 的收敛性质本身不自动保证跨对象或全局不变量——两个副本并发扣款可以各自合法、合并后余额为负。能否无协调地维护约束,取决于任意可接受的并发更新在合并后是否仍满足它(即"不变量汇合"):预分配额度(escrow/rights allocation)能让部分约束在无共识下成立;不具备这种性质的约束才需要同步协调,在容错复制系统中常由共识实现。

推论与应用

CRDT 是CAP 定理中选择可用性一侧后的系统性答案:分区期间各副本继续服务,靠代数性质而非拒绝写入来保证愈合后一致,是最终一致性从口号变成可证明规格(强最终一致性)的关键一步。它支撑离线编辑、协作软件、地理复制数据库与边缘计算中的共享状态。

工程选型围绕两类设计的权衡展开:状态型依靠半格 join,对乱序和重复更宽容但状态可能庞大;操作型消息较小,却常依赖去重与因果交付保证。存储服务还可向客户端提供因果一致性,但那是版本可见性合同;CRDT 的收敛结论始终绑定各自的传播与执行条件,不能从数据类型的合并代数直接推出完整会话语义。两类设计的元数据与垃圾回收成本都需单独评估。

参考资料
  • Marc Shapiro et al., “Conflict-Free Replicated Data Types,” SSS 2011,Full paper, convergent/commutative replicated data types and strong eventual consistency。
  • Werner Vogels, “Eventually Consistent,” Communications of the ACM 52(1), 2009, pp. 40–44,Full paper, eventual consistency context and replicated updates。
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。