8

我试图准确了解 Apache ZooKeeper(“ZK”)解决了哪些类型的问题,也许他们的食谱页面是最好的起点。

首先,我做出以下假设

  • ZooKeeper API(在 Java 和 C 中都可用)公开了这 7 个简单的方法,然后允许您建立自己的使用模式,称为“ZK 食谱”
  • 然后由您自己使用这些 ZK 食谱来解决分布式编程中的问题
  • 或者,您可以使用Apache Curator附带的那些,而不是构建自己的 ZK 食谱
  • 因此,无论哪种方式,您都在使用 ZK 食谱(同样,自产或由 Curator 提供)来解决分布式计算问题

我相信Apache Kafka就是一个例子,其中 Kafka 使用 ZK 创建分布式队列(这是列出的 ZK 配方之一)。因此,如果我的假设是正确的,ZK 会公开这些 API 方法,Apache Kafka 的创建者要么直接使用 ZK,要么使用 Curator 来实现“队列”ZK 配方。

如果我的上述任何假设是错误的,请从纠正我开始!假设我或多或少走上了正轨:

查看 ZK 食谱列表,我看到以下内容(非详尽):

  • 障碍
  • 锁具
  • 领袖选举

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

  • 我的主/从或主要/次要问题是 ZK 领导者选举配方的准确用例吗?
  • 分布式锁的例子是什么?它解决了什么问题?
  • 障碍同上:锁和障碍有什么区别?
4

1 回答 1

8
  1. 是的。您的 Zk 的领导人选举配方示例是正确的。一般来说,如果一个配方已经存在,为什么要重写它?

引用 Zookeeper 文档:

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

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

  2. 关于屏障,我个人从未使用过它们 - 但是使用锁,您需要获取锁才能在节点上实际执行某些操作,您需要等到它空闲时才设置屏障,但一旦它空闲就不一定需要设置屏障。

于 2015-06-17T13:55:46.077 回答