强最终一致性 - CRDT 背后的核心思想#
CRDTs。能够在多个节点间复制、独立编辑、合并回一起,而且一切都能正常工作。但协作文档编辑和多玩家待办事项列表只是冰山一角 —— 我相信更大的应用领域是分布式数据库,为此我们需要讨论一致性。
CRDTs 是强最终一致性的工具。让我们从正常最终一致性的定义开始: 最终交付
一个更新被发送到一个节点,最终会到达所有节点,最终收敛
如果两个节点看到了所有相同的更新,它们最终会处于相同的状态。
强最终一致性(SEC)用强收敛替代了最终收敛:强收敛
如果两个节点看到了所有相同的更新,它们将具有相同的状态。
注意区别!在 SEC 中,两个副本在更新处理后立即具有相同的状态,而不是最终。如果多个节点独立更新,将出现冲突 —— 这是不可避免的。SEC 保证的是这些冲突能够自动且确定性地解决。
这具有重大影响。SEC 意味着低延迟,因为节点不需要协调来处理读和写。这意味着惊人的容错能力 —— 系统中的所有节点除了一个之外可以同时崩溃,读和写仍然可以正常进行。它还意味着即使节点离线或从网络中断开任意时间段,节点仍然能正常运行。
强最终一致性是有效的最终一致性。如果你正在进行本地优先或低延迟地理复制系统 —— 不接受任何替代品。我认为我们应该这样看待 CRDTs—— 强最终一致系统的构建模块。CRDTs 作为应用状态是一回事,CRDTs 作为整个数据库是另一回事。