ZooKeeper和任何分布式Key-Value商店之间有什么区别?

One*_*ero 9 distributed distributed-system key-value-store apache-zookeeper

我是zookeeper和分布式系统的新手,我自己也在学习它.

根据我现在的理解,似乎ZooKeeper只是一个键值存储,其键是路径,值是字符串,这与Redis没什么不同.(显然我们也可以使用斜线分隔的路径作为redis中的键.)

所以我的问题是,ZooKeeper和其他分布式KV商店之间的本质区别是什么?为什么ZooKeeper使用所谓的"路径"作为键,而不是简单的字符串?

kuu*_*ujo 15

您正在将ZooKeeper的高级数据模型与其他键值存储进行比较,但这并不是它的独特之处.从分布式系统的角度来看,ZooKeeper与许多其他键值存储(尤其是Redis)不同,因为它非常一致,并且可以在大多数群集连接时容忍故障.此外,虽然数据保存在内存中,但它同步复制到群集的大部分并由磁盘支持,因此一旦写入成功,它就可以保证写入不会丢失(除非导弹打击).这使得ZooKeeper对于存储少量任务关键状态(如配置)非常有用.

相反,Redis不是分布式系统,并且不提供ZooKeeper所做的相同种类的保证,并且分布的许多其他密钥值存储最终是一致的.换句话说,无法保证一旦写入值,分布式系统中的所有其他进程都可以看到该值.

最后,除了用于存储状态的接口等文件系统之外,ZooKeeper还提供了相当低级别的功能,可以解决更复杂的问题.有关Apache Curator的示例.策展人使用ZooKeeper的短暂节点(当创建它们的客户端断开连接时消失的节点)来构建锁定和领导者选举等对协调分布式系统非常有用的东西.因此,从这个角度来看,ZooKeeper的数据模型和相关特性可以作为原语,可以在其上构建用于分布式协调的更高级别的工具.


小智 5

您可以将 zookeeper 与其他分布式键值存储(例如 etcd 和 consul)进行比较。这些工具还提供与 apache zookeeper 相同的好处。zookeeper 的主要优点是它负责避免分布式应用程序中的死锁和竞争条件。Zookeeper 不仅是一个键值存储,它还可以用于服务发现和集中服务,用于维护分布式应用程序中的配置信息。

Zookeeper 存储其键值对的方式与其他键值存储略有不同,Zookeeper 使用 z-node 作为键。它看起来像一个 unix 文件系统树,它以斜杠(/)开头。它可能是持久的或短暂的。此键值通过 RAM 提供。每个节点都有自己的 ACL。Zookeeper 存储事务日志和快照,以便在发生灾难时恢复节点,它旨在充当容错和分布式 kv 存储,因此应将其部署为集群。一组zookeeper服务器称为zookeeper ensemble。这里有一个 zookeeper 领导服务器,其余的是跟随者。这种leader和follower关系来源于集群中zk服务器之间的leader选举。

Zookeeper 主要用于 Hadoop Namenode 和 YARN Resource manager 的 HA 实现,这里负责提升这些守护进程的主备状态,Kafka 旨在使用 Zookeeper 来存储主题和偏移信息。

Zookeeper 也可以作为 Kubernetes 控制平面中 etcd 的替代品。