发布于 2015-12-23 23:05:29
在分布式系统术语中,这两者是非常不同的,并且服务于非常不同的用例。虽然两者的目标都是实现强一致性,但CRDTs通常在不牺牲可用性的情况下这样做,Raft则以牺牲可用性为代价。面对网络分区,CRDT将仍然可用,但Raft集群可以部分或完全不可用。Raft是一种协商一致的算法,它依赖于大多数集群之间的通信来取得进展。
在可以由每个人管理的状态类型上也存在差异。CRDTs的工作是代表一组有限的、定义良好的数据类型,而Raft和其他协商一致的算法可以用来建模更广泛的潜在数据结构和算法。Raft通常用于对复制状态机建模。通过Raft算法记录并复制状态机的命令,并将其应用于状态机。状态机可以用于建模数据结构,如映射和集合,或者通过建模诸如锁、领导人选举和信号量来控制并发。
您还必须从可伸缩性的角度来看待您的系统,Raft和CRTD在这里也有很大的不同。Raft是一个以领导者为基础的系统。Raft选择一个节点作为领导者,所有对Raft复制状态机的状态更改都经过该单个领导人,并在应用到状态机之前同步复制到大多数跟随者。或者,CRDT具有更大的可伸缩性,因为它们不受单个节点的限制。
最终,Raft和CRDTs的区别在于一致性和性能的差异。Raft旨在创建一个单一系统的一致视图,重点是安全性而不是性能。通常,像Raft这样的协商一致算法用于配置管理和服务发现。CRDT的设计是为了在不牺牲可用性的情况下尽可能地快速和一致。通常,CRDT用于在更多的可用性依赖和不太关键的系统中存储。
https://stackoverflow.com/questions/34434011
复制相似问题