Skip to content

Delta-state CRDT

Delta-state CRDT · Delta-CRDT · δ-CRDT · 增量状态 CRDT

让 mutator 产生可 join 的小半格元素,并以 delta-group 传播完整状态增长的状态型 CRDT。

条目类型
模型

形式陈述

(S,,) 是一个状态型 CRDT的状态半格。Delta-mutator

mδ:SS

返回一个 delta-state dS,本地更新执行

X:=Xd.

Delta 仍是同一半格中的状态元素,不是必须按一次、按顺序重放的 operation。多个 delta 可组成 delta-group D=d1dk;接收端重复或乱序合并 D,仍由 join 幂等性保持安全。若每个产生的 delta 最终直接或经某个 group 到达所有正确副本,最终状态与传播相同更新后的全 CvRDT 一致。

需要因果上下文的数据类型还要求 causal delta-merging。设副本 j 在状态 Xja 后连续产生 dja,,djb1,区间

Δja,b=ak<bdjk.

副本 i 只有在本地 XiXja 时才合并该区间,才能保证它对应于源副本从 base a 开始的连续状态增长。缺少 base 条件时,join 仍可能代数收敛,但 remove、版本覆盖等依赖因果上下文的语义可能被破坏。

直觉

全状态同步像每次寄整本账簿;delta-state 寄“能让账簿从旧状态增长到新状态的那一小页”,但这页使用的语言仍是账簿状态。它可以合并、缓存、重发和再分组,不具备 operation log 的执行次数语义。

Delta 大小取决于表示。G-Counter 一次增加只需发送本副本的新绝对分量;OR-Set remove 还要发送被移除 dots 的因果上下文,可能并不恒定小。把任何网络 diff 都叫 delta 不够:diff 必须是半格元素,并证明与原 mutator 的 join 效果相同。

区间 base 类似补丁的前置版本。对只增数据,漏掉 base 常只造成暂时缺项;对带删除或版本覆盖的因果数据,孤立 delta 只携带本次变化,并不重述 base 中的全部事实。接收者不能把它当成完整后继状态,更不能把带缺口的高序号 dot 直接压成连续版本向量。

例子与边界

两副本 G-Counter 状态为 (a,b)、join 逐分量取最大。A 当前为 (2,0),执行一次 increment 后 delta-mutator 返回

d=(3,0),(2,0)(3,0)=(3,0).

B 当前状态为 (1,4),收到 d 后得

(1,4)(3,0)=(3,4).

重复收到 d 不再增加,正确读数为七。若把 delta 错写成普通数值增量 (1,0),B 取最大仍是 (1,4),A 的更新反而丢失;若把它当 operation 相加,多次重传又会重复计数。正确 delta 是“新绝对下界”这一 lattice element。

Base 条件可以直接在分量半格上复算。设源副本在区间起点为 Xja=(5,4),下一次本地更新产生 delta d=(6,0),于是 Xja+1=(6,4)。若接收者只有 (4,0) 却越过 base 直接合并 d,得到 (6,0);合并完整后继状态则得到 (6,4),两者并不相等。对计数器,缺失的第二分量以后补到仍可最终收敛;对用连续版本向量压缩 dot context 的因果 CRDT,这种缺口还会使前缀摘要失去依据。因此反熵要么验证接收者已支配 base,要么补发缺失区间或完整状态。

Delta buffer 也不能无限覆盖尚未确认的区间后立即删除。伙伴确认的是摘要还是实际持久化状态、崩溃后确认是否保留,都会影响 eventual dissemination。一次 delta 丢失并不会因“delta 很小”自动修复;必须重传、由后继 delta-group 包含其信息,或最终进行 full-state repair。

推论与应用

Delta-state 允许在保留 CvRDT 乱序与重复容忍性的同时,把带宽从对象大小降到近期增长大小。实践中可周期聚合 delta、以 acknowledgment frontier 修剪 buffer,并在伙伴差距过大时回退到全状态传输。

优化正确性应比较抽象状态:对任意初态与更新序列,合并全部必要 delta 的结果必须等价于执行原 CvRDT mutator 后交换全状态。只比较最终 query 会漏掉未来 merge 所需的删除上下文。伙伴不同步时,发送方可依据 acknowledgment 选择连续 interval;不能从本地最新序号猜测对方 base。

参考资料
  • Paulo Sérgio Almeida, Ali Shoker, and Carlos Baquero, “Delta State Replicated Data Types,” Journal of Parallel and Distributed Computing 111, 2018, pp. 162–173.
  • Paulo Sérgio Almeida, Ali Shoker, and Carlos Baquero, “Efficient State-Based CRDTs by Delta-Mutation,” PaPoC 2015, Article 5.
  • Vitor Enes, Paulo Sérgio Almeida, Carlos Baquero, and João Leitão, “Efficient Synchronization of State-Based CRDTs,” ICDE 2019, pp. 148–159.
关系图谱1 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:分类

分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。