ZooKeeper 食谱和 Apache Curator
ZooKeeper Recipes and Apache Curator
我正在尝试确切地了解 Apache ZooKeeper ("ZK") 解决了哪些类型的问题,也许他们的 Recipes page 是最好的起点.
首先,我做出以下假设:
- ZooKeeper API(在 Java 和 C 中可用)公开 these 7 simple methods,然后允许您建立自己的使用模式,称为 "ZK Recipes"
- 接下来就看你自己使用这些 ZK Recipes 来解决分布式编程中的问题了
- 或者,您可以只使用 Apache Curator
附带的那些,而不是构建您自己的 ZK 食谱
- 所以无论哪种方式,您都在使用 ZK Recipes(同样是自行开发或由 Curator 提供)来解决分布式计算问题
我相信 Apache Kafka is an example of this, where Kafka uses ZK to create a distributed Queue(这是列出的 ZK 食谱之一)。因此,如果我的假设是正确的,ZK 公开了那些 API 方法,Apache Kafka 的创建者要么直接使用 ZK,要么使用 Curator 来实现 "Queue" ZK Recipe。
如果我上面的任何假设是错误的,请首先纠正我!假设我或多或少走上正轨:
查看 ZK 食谱列表,我看到以下内容(非详尽无遗):
- 障碍
- 锁
- 领导人选举
为了让我欣赏这些食谱和它们提供的解决方案,我首先需要欣赏它们解决的问题!我从基本 Java 并发中了解锁是什么,但我只是没有看到何时需要 "distributed Lock" 的用例。对于领先的选举,我能想到的 - 作为 需要 它的用例 - 如果你正在构建一个你想要使用内置的应用程序master/slave 或 primary/secondary 能力。也许在那种情况下,您会使用 ZK 来实现您自己的 "Leader Election" 配方,或者可能只是使用开箱即用的 Curator 的 Leader Latch。至于屏障,我看不出它们与锁有什么不同。所以我问:
- 我的 master/slave 或 primary/secondary 问题是 ZK 领导者选举秘诀的准确用例吗?
- 什么是分布式锁的例子?它解决了什么问题?
- 障碍同上:锁和障碍之间有什么区别?
- 是的。您的 Zk 领导者选举配方示例是正确的。一般来说,如果食谱已经存在,为什么要重写它?
引用 Zookeeper 文档:
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
关于分布式锁 - 假设你有一个分布式系统,其中所有配置都保存在 Zookeeper 上,并且不止一个实体负责更新某个配置 - 在这种情况下你会想要配置更新是同步的。
关于屏障,我个人从来没有使用过它们——但是有了锁,你需要获取锁才能在节点上实际做一些事情,一个屏障,你等到它空闲了,但不一定需要设置障碍一旦它是免费的。
我正在尝试确切地了解 Apache ZooKeeper ("ZK") 解决了哪些类型的问题,也许他们的 Recipes page 是最好的起点.
首先,我做出以下假设:
- ZooKeeper API(在 Java 和 C 中可用)公开 these 7 simple methods,然后允许您建立自己的使用模式,称为 "ZK Recipes"
- 接下来就看你自己使用这些 ZK Recipes 来解决分布式编程中的问题了
- 或者,您可以只使用 Apache Curator 附带的那些,而不是构建您自己的 ZK 食谱
- 所以无论哪种方式,您都在使用 ZK Recipes(同样是自行开发或由 Curator 提供)来解决分布式计算问题
我相信 Apache Kafka is an example of this, where Kafka uses ZK to create a distributed Queue(这是列出的 ZK 食谱之一)。因此,如果我的假设是正确的,ZK 公开了那些 API 方法,Apache Kafka 的创建者要么直接使用 ZK,要么使用 Curator 来实现 "Queue" ZK Recipe。
如果我上面的任何假设是错误的,请首先纠正我!假设我或多或少走上正轨:
查看 ZK 食谱列表,我看到以下内容(非详尽无遗):
- 障碍
- 锁
- 领导人选举
为了让我欣赏这些食谱和它们提供的解决方案,我首先需要欣赏它们解决的问题!我从基本 Java 并发中了解锁是什么,但我只是没有看到何时需要 "distributed Lock" 的用例。对于领先的选举,我能想到的 - 作为 需要 它的用例 - 如果你正在构建一个你想要使用内置的应用程序master/slave 或 primary/secondary 能力。也许在那种情况下,您会使用 ZK 来实现您自己的 "Leader Election" 配方,或者可能只是使用开箱即用的 Curator 的 Leader Latch。至于屏障,我看不出它们与锁有什么不同。所以我问:
- 我的 master/slave 或 primary/secondary 问题是 ZK 领导者选举秘诀的准确用例吗?
- 什么是分布式锁的例子?它解决了什么问题?
- 障碍同上:锁和障碍之间有什么区别?
- 是的。您的 Zk 领导者选举配方示例是正确的。一般来说,如果食谱已经存在,为什么要重写它?
引用 Zookeeper 文档:
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
关于分布式锁 - 假设你有一个分布式系统,其中所有配置都保存在 Zookeeper 上,并且不止一个实体负责更新某个配置 - 在这种情况下你会想要配置更新是同步的。
关于屏障,我个人从来没有使用过它们——但是有了锁,你需要获取锁才能在节点上实际做一些事情,一个屏障,你等到它空闲了,但不一定需要设置障碍一旦它是免费的。