ZooKeeper Recipes和Apache策展人

时间:2015-06-16 14:58:21

标签: java apache-zookeeper apache-curator

我试图理解完全 Apache ZooKeeper(“ZK”)解决了哪些类型的问题,也许他们的Recipes page是最好的起点。

首先,我正在进行以下假设

  • ZooKeeper API(可在Java和C中使用)公开these 7 simple methods,然后允许您构建自己的使用模式,称为“ZK Recipes”
  • 由您自己决定使用这些ZK食谱来解决分布式编程中的问题
  • 或者,您可以使用Apache Curator
  • 附带的ZK食谱,而不是建立自己的ZK食谱。
  • 无论哪种方式,你都在使用ZK Recipes(再次,本土或由Curator提供)来解决分布式计算问题

我相信Apache Kafka就是一个例子,Kafka使用ZK创建distributed Queue(这是列出的ZK食谱之一)。因此,如果我的假设是正确的,ZK公开了那些API方法,Apache Kafka的创建者直接使用ZK或使用Curator来实现“队列”ZK配方。

如果我上述任何假设都有误,请先纠正我!假设我或多或少走上正轨:

查看ZK Recipes列表,我看到以下内容(非详尽无遗):

  • 障碍
  • 领袖选举

为了让我欣赏这些食谱和他们提出的解决方案,我首先需要了解他们解决的问题!我理解锁定来自基本的Java并发,但我只是没有看到“分布式锁定”何时需要的用例。对于领导选举,我所能想到的 - 作为首先需要的用例 - 如果你正在构建一个你想要带有内置主/从的应用程序或主要/次要能力。也许在这种情况下,您可以使用ZK来实现自己的“领导者选举”配方,或者只是使用Curator的Leader Latch开箱即用。至于障碍,我不知道这些与锁有什么不同。所以我问:

  • 我的主/从或主要/次要问题是否是ZK领导人选举方案的准确用例?
  • 分布式锁定的示例是什么?它解决了什么问题?
  • 同样适用于障碍:锁和障碍之间有什么区别?

1 个答案:

答案 0 :(得分:6)

  1. 是。你的Zk领导人选举食谱示例是正确的。一般来说,如果一个食谱已经存在,为什么要重写呢?
  2. 引用Zookeeper文档:

      

    ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。

    1. 关于分布式锁 - 假设您有一个分布式系统,其中所有配置都保存在Zookeeper上,并且多个实体负责更新某个配置 - 在这种情况下,您希望配置更新为同步。

    2. 关于屏障,我个人从来没有使用过它们 - 但是有了锁,你需要获取锁实际上在节点上做某事,一个等待它自由但不一定需要设置屏障的屏障一旦它是免费的。