我现在正在读Apache ZooKeeper。我在互联网上看了很多文档和文章,但我越来越困惑于ZooKeeper到底是如何工作的?
目前,我知道ZooKeeper为跨节点同步提供了一个基础设施,应用程序可以使用它来确保跨集群的任务是序列化或同步的。它维护了一种由“znode”组成的树型文件系统。例如,我有一个集群,它是一个主服务器和两个从服务器,并且在所有服务器中,这种树文件系统结构总是相同的?如果我在其中一个追随者服务器上创建一个新的znode,整个集群会被同步吗?
另一个问题是,每个znode只能包含1M数据,因为ZooKeeper不是设计为容纳非常大的数据值的大型数据存储。但是,如果我需要一种存储大量数据的分布式数据库,我如何使用ZooKeeper来实现呢?如果这些大型数据没有存储在znode中,那么它应该存储在哪里,ZooKeeper如何获取这些数据?
发布于 2014-01-16 04:38:49
但是,如果我需要一种存储大量数据的分布式数据库,我如何使用ZooKeeper来实现呢?不要这样做。搅拌机不是汽车;Zookeeper也不是大型数据存储。
Zookeeper基本上是一个lock server,并不意味着要存储大量数据。相反,它通过公开同步工具来帮助其他大型数据存储(如HBase)实现consistency。
作为最终用户(只想使用分布式数据库的人),zookeeper并不是很有趣。它的目标受众是服务/数据存储作者,他们编写了最终用户可能想要的东西。
发布于 2014-02-20 02:17:44
ZooKeeper集成必须与多数(包括主节点)保持一致:您无法保证集成的特定节点与主节点保持最新。要获得这种保证,您必须通过该节点实际编写一些内容:然后该节点将被更新,随后它将发布其更新。这是因为写入是线性的,即为了一致性,写入是严格排序的。
出于上述原因,我不会将ZooKeeper用于大型存储:每次存储内容时,都会强制大多数节点进行更新。频繁的写入传播显然与您想要的分布式字符背道而驰。坚持使用ZooKeeper进行客户端之间的协调,并利用这种协调来执行对实际的分布式/分片数据库的写入。
https://stackoverflow.com/questions/21147574
复制相似问题