技术洞察与独立研究

CRDT:无冲突复制数据类型的原理与协同编辑应用

CRDT:无冲突复制数据类型的原理与协同编辑应用

CRDT:无冲突复制数据类型的原理与协同编辑应用

如果你用过Notion、Figma或Google Docs的多人实时协作功能,你就在使用CRDT(Conflict-free Replicated Data Types)。与传统的OT(Operational Transformation,操作变换)相比,CRDT正在成为协同编辑的主流技术方案。

CRDT vs OT

OT的核心思想是:当一个用户的操作到达服务器时,服务器根据已有操作序列”变换”这个操作的位置,再广播给其他用户。这要求一个中心化的服务器来维护操作的全局顺序。CRDT的核心思想完全不同:每个用户的操作直接合并到本地数据结构中,数据结构本身保证了无论操作以什么顺序到达,最终结果都是一致的。这意味着CRDT不需要中心化服务器来决定顺序——它可以纯P2P工作。

Yjs的工程实践

Yjs是CRDT在Web领域最成熟的实现。它的Y.Map、Y.Array和Y.Text分别对应JSON对象、数组和富文本的协同编辑。以Y.Text为例:当两个用户同时编辑同一段落时,Yjs将文本表示为一系列”插入”操作的集合,每个操作带有一个唯一的client ID和clock值。合并时Yjs按照client ID的字典序决定并发插入的相对位置,保证所有客户端最终看到完全相同的文本。

适用边界

CRDT非常适合:文本文档、设计画布、代码编辑器、看板工具等编辑粒度细、冲突概率低的场景。不适合:需要严格事务性(转账、库存扣减)或编辑粒度粗(整个文件替换)的场景。在选型时先回答一个问题:你的应用中”编辑冲突”的本质是什么?如果冲突是操作顺序的问题,用CRDT;如果是业务逻辑约束的问题,用传统的锁+事务。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注