Skip to content

CRDT 反熵同步

Anti-entropy synchronization · CRDT anti-entropy · 反熵协议

通过周期性 push、pull 或双向比较,使暂时遗漏的复制状态最终重新传播到正确副本。

条目类型
方法

形式陈述

反熵同步是副本间反复比较并修复差异的后台协议。每个正确副本在无限执行中公平地选择伙伴,采用 push、pull 或 push-pull 交换状态、版本摘要或缺失片段。对 CRDT 而言,所需活性条件可表述为:每个已被正确副本持久吸收的更新信息,最终被所有持续正确且属于当前成员集的副本吸收。

全状态 CvRDT 可直接发送 Xi,接收端执行 Xj:=XjXi。结合、交换、幂等使乱序和重复安全;反熵无需记住每个数据包是否已经到达。优化协议先交换版本向量、Merkle tree 或区间摘要,再发送差集,但摘要与修复过程必须无假阴性:不能把实际缺失的信息判成“已经同步”后永远跳过。

网络公平性不是“每轮都成功”。允许暂时分区、丢包和副本崩溃;要求分区最终愈合、同步尝试持续发生,并且更新在至少一个正确副本上保持到传播完成。若所有持有某更新的副本在落盘前永久丢失,任何 epidemic 机制都无法重建它。

伙伴图也必须在时间上提供传播路径。每轮拓扑不必连通,但对任意更新和目标成员,后续成功会话的并集应包含从某个持有者到目标的路径。只让两个机架各自在内部公平 gossip,会在各机架内收敛,却永远不能满足全成员 eventual delivery。

成员身份属于协议状态。新节点需要基线同步,退役节点必须从稳定性计算中安全移除;允许带陈旧磁盘状态的旧身份任意重加入,会破坏删除证据回收所依赖的“所有成员均已见”判断。

直觉

前台复制追求低延迟,偶尔漏掉消息;反熵像周期盘点,不依赖那一次发送是否成功,而是不断比较“我们各自知道到哪里”。状态半格让重复盘点便宜于推理,摘要则让大多数已一致轮次不必搬运全部数据。

Push 让新更新快速扩散,却难以发现发送者不知道自己缺什么;pull 擅长补洞,但远端要先被选中;push-pull 同轮双向交换,通常传播更快。随机 gossip 的概率保证与确定成员轮询的公平保证不同,部署应说明失败概率、伙伴选择和最大修复延迟,而不能只说“最终会 gossip 到”。Rumor mongering 在消息传播若干轮后可能主动停止,anti-entropy 则持续比较完整摘要以发现罕见遗漏;两者可组合但活性论证不同。

反熵保证的是信息传播,不自动提供因果会话。客户端可能先从 A 读到新值,再从尚未同步的 B 读到旧值;read-your-writes、monotonic reads 或因果一致性需要路由、session token 或依赖检查。缩短同步周期只能缩小这种窗口,不能把它变成协议安全保证。

例子与边界

三个副本初态均为空,状态是 grow-only set。A 加入 x{x},B 加入 y{y},C 仍为 。第一轮 A push 给 C:

C:={x}={x}.

第二轮 C 与 B 做 push-pull,双方都得到

{x}{y}={x,y}.

第三轮 B push 给 A,A 也到达 {x,y}。若第二轮数据包重复,集合并不变;若第一轮丢失,后续公平轮次仍会从保有 x 的 A 重新出发,可以直接补给 C,也可以先传给 B 再由 B 接力。

现在让 A 删除 x 并立即物理移除全部删除元数据,而离线 C 仍保存旧 add。C 重连后发送 {x},元素会复活。反熵忠实传播了状态,错误来自状态已经丢失删除证据;传输可靠性不能修补不安全垃圾回收。

Merkle tree 也有边界:相同根摘要可高效证明分片内容相同,但树的分区规则、哈希抗碰撞假设和叶内容编码必须一致。只比较对象数量或最大时间戳不是无假阴性的摘要。

推论与应用

反熵为“eventual”提供可审计机制:可以监控每个伙伴的 acknowledgment frontier、修复队列年龄和分区覆盖,而非仅观察最终读值。Delta-state 同步把全状态差异缩成 delta interval,因果 CRDT 则用版本摘要决定哪些 dots 缺失。监控应按逻辑成员而非短命进程统计,否则频繁重启会掩盖一个成员长期没有完成修复。

垃圾回收常复用反熵确认:只有删除证据已进入所有成员的稳定前沿,才可能回收。这个推论依赖封闭或受控成员集;动态扩缩容必须用 epoch、全量引导或禁止旧身份重入,把“未来不会再带来旧状态”变成协议事实。Acknowledgment 应表示修复内容已持久化,而非仅进入易失接收缓冲区。

参考资料
  • Alan Demers et al., “Epidemic Algorithms for Replicated Database Maintenance,” PODC, 1987, pp. 1–12.
  • Marc Shapiro et al., “A Comprehensive Study of Convergent and Commutative Replicated Data Types,” INRIA RR-7506, 2011, Sec. 3.
  • Werner Vogels, “Eventually Consistent,” Communications of the ACM 52(1), 2009, pp. 40–44.
关系图谱1 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:使用

类型化关系

被这些条目使用