外观主题
阅读语言

CRDT —— 并发编辑不协调也能收敛,冲突不复存在

软件 本站软件 2小时前
https://yxp.hk/p/hJPAST

📦 开源仓库:learn_crdt_merge · 纯 Python 标准库 · 学习演示项目

多副本并发写同一份数据,同步时怎么合并?协调者仲裁?太重。CRDT(Conflict-free Replicated Data Type)直接在数据结构层面消灭冲突:只要合并运算满足交换律、结合律、幂等性,所有副本最终必然收敛到同一状态——不需要主节点、不需要锁、不需要协商。

核心思路

  副本 A:计数 +2                副本 B:计数 +1
        │                              │
        └───────── 同步 / 合并 ─────────┘
                          │
                          ▼
            逐槽取 max → 两个副本都 = 3(收敛)
  • G-Counter:每个副本只写自己的槽位,合并 = 逐槽取 max
  • OR-Set:添加带唯一标签,删除只记标签;元素存活当且仅当它的添加标签没被删光——并发的添加+删除永不丢更新
  • 无 leader、无锁、无协商,合并结果确定且与顺序无关

为什么值得学

  • 离线优先/协作应用:断网随便编辑,联网自动合并,没有冲突弹窗
  • 高可用:副本本地直接接写,不用等协调者往返
  • 强最终一致性白送:合并数学保证收敛

演示场景

  1. G-Counter:A 加两次、B 加一次,合并后双方都是 3
  2. OR-Set:s1 加 x,s2 并发删 x 又加 y,合并后双方都有 x 和 y——不丢更新、不报冲突

运行

python run_all.py

纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_crdt_merge,欢迎 Star 与提 Issue。