我试图准确了解 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 领导者选举配方的准确用例吗?
- 分布式锁的例子是什么?它解决了什么问题?
- 障碍同上:锁和障碍有什么区别?