CRDT和RAFT协议之间是否存在关系 - 或者它们是正交的吗?

时间:2015-12-23 10:52:01

标签: distributed-computing distributed-system raft shared-state crdt

以多人网络游戏的用例为例。您很快就会遇到通过网络复制和协调共享状态的问题。

似乎有多个工具针对这个问题的方面,特别是两个似乎重叠:

  1. Conflict-free Replicated Data Types(CRDT) - 用于
  2. RAFT consensus algorithm - 用于选择分布式网络中的事务负责人以帮助达成共识。
  3. 我的问题是: CRDT与RAFT协议之间是否存在关联 - 或者它们是正交的吗?

1 个答案:

答案 0 :(得分:3)

在分布式系统术语中,两者完全不同,并且服务于非常不同的用例。虽然两者都旨在实现强一致性,但CRDT通常在不牺牲可用性的情况下这样做,而Raft以牺牲可用性为代价。面对网络分区,CRDT将保持可用,但Raft群集可能部分或完全不可用。 Raft是一种共识算法,它依赖于大多数群集相互通信来进步。

每个国家可以管理的国家类型也存在差异。 CRDT用于表示有限且定义明确的数据类型集,而Raft和其他一致性算法可用于建模更广泛的潜在数据结构和算法。 Raft通常用于建模复制状态机。通过Raft算法记录和复制状态机的命令,并将其应用于状态机。状态机可用于建模数据结构,如地图和集,或通过对锁,领导者选举和信号量等事物进行建模来控制并发性。

您还必须在可扩展性方面考虑您的系统,而Raft和CRTD在这里也有重要意义。 Raft是一个基于领导者的系统。 Raft选择单个节点作为领导者,并且对Raft复制状态机的所有状态更改都通过该单个领导者并在应用于状态机之前同步复制到大多数关注者。或者,CRDT的可扩展性显着提高,因为它们不受单个节点的限制。

最终,Raft和CRDT之间的区别在于一致性和性能之间的差异。 Raft旨在创建单一系统的一致视图,重点关注性能安全性。通常,像Raft这样的共识算法用于配置管理和服务发现之类的事情。 CRDT设计为快速且尽可能一致,而不会牺牲可用性。通常,CRDT用于存储在更多可用性和不太关键的系统中。