ZooKeeper和etcd都是分布式协调服务,提供了一种管理配置数据、同步分布式系统、保持高可用性的方式。它们被许多分布式系统用来保证一致性、容错性和可靠性。
ZooKeeper:
- Apache开发了ZooKeeper,这是一个分布式协调服务,提供了一种层次化的键值存储。
- 它基于ZAB(ZooKeeper原子广播)协议,确保了强一致性和持久性。
- ZooKeeper是用Java写的,有Java、C、Python等语言的客户端绑定。
- 它使用了一种基于多数决的共识算法,这意味着至少要有一半的节点同意变更,变更才能生效。
- ZooKeeper提供像监视器、暂时的节点和序列的节点这样的功能来帮助管理分布式系统。
- 它已经被广泛采用和用于许多大规模分布式系统,例如Hadoop,Kafka和HBase。
- etcd 是一个分布式键值存储系统。 etcd: etcd 是一个分布式键值存储系统。
etcd:
- 由 CoreOS 开发,etcd 是一个分布式键值存储,用于高可用性和强一致性。
- 它基于Raft共识算法,提供强一致性、容错性和分区容错性。
- etcd是用Go写的,并且有Go、Java、Python和Ruby的客户端绑定。
- 它使用领导者-追随者方法来达成共识,其中只有一个节点被选举为领导者,所有其他节点都遵循领导者的决定。
- etcd 提供了像 watches, leases, 和 transactions 这样的功能来帮助管理分布式系统。
- 它已经被各种各样的项目所采用,包括Kubernetes、Cloud Foundry和Rook。
比较
1.一致性模型:ZooKeeper和etcd都提供了强一致性,确保了集群中的所有节点都有相同的数据视图。
2. 性能:etcd 一般比 ZooKeeper 有更好的性能,尤其是在写密集型工作负载方面。这主要是因为 Raft 共识算法比 ZAB 协议更有效率。
3. 语言和生态系统:ZooKeeper是用Java写的,有更大的生态系统,而etcd是用Go写的,有更小的生态系统。然而,这两个系统都有各种语言的客户端绑定。
4. 易用性:etcd被认为比ZooKeeper更容易设置和维护,主要是因为它的配置更简单,文档更好。
5. 特性: 两个系统都提供类似的功能,比如时钟、租赁和交易。然而,ZooKeeper还有一些额外的功能,比如临时节点和顺序节点,在某些用例中可以很有用。
6. 采用:ZooKeeper已经存在了一段时间,并且已经被许多大规模分布式系统广泛采用。然而,Etcd在最近几年变得越来越受欢迎,尤其是在Kubernetes等容器编排系统兴起之后。
总而言之,ZooKeeper 和 etcd 都可以用来管理配置数据,同步分布式系统,并保持高可用性。在性能要求、易用性、语言偏好和具体用例之间做出选择。
ZAB和Raft
ZAB选举原则:节点间通过PK竞争,事务ID最大当选,事务ID一致则节点ID最大的当选。
Raft选举原则:一张选票、先到先得;里面包含了一个随机等待时间的概念,来保证最多几次选举就能完整选举过程。
Raft 的领导者选举,需要通讯的消息数更少,选举也更快。