当ZooKeeper在ZooKeeper服务器中进行领导者选举时,为什么策展人会在“进程”中进行领导者选举?

时间:2016-05-04 19:14:56

标签: java apache-zookeeper apache-curator

我最近了解了ZooKeeper及其设计。 我知道多个ZooKeeper服务器支持ZooKeeper服务,但是,有必要选择其中一个服务器作为该组的负责人。

接下来,我开始阅读LeaderLatch和LeaderElection的Apache策展人食谱,而不是谈论选择领导者,他们谈论选择一个过程作为领导者(组织者)。

我对此感到困惑。有人可以帮助并向我澄清为什么策展人食谱和ZooKeeper正在谈论两种不同的领导者?

如果他们确实不同,这些领导者如何相互联系?

1 个答案:

答案 0 :(得分:3)

ZooKeeper的用户不关心拥有领导者的ZooKeeper集群。它是一个实现细节。 ZooKeeper服务器选择了一个领导者作为一种方法来强制实施ZooKeeper作为服务提供的一些一致性保证。

作为ZooKeeper的用户(或Curator的用户作为更好的API)你并不真正关心它。事实上,ZK没有公开这个实现细节 - 你不知道你是在与领导者或追随者交谈。

这个ZK内部领导者选举与一个用例ZooKeeper无关,因为服务提供了 - ZooKeeper用户的领导者选举。

如果您使用ZK,您可能自己构建分布式服务,您的服务分布在多台计算机上。与任何其他分布式系统一样,您可能会在某些时候遇到问题(例如任务协调),这通常由领导者选举模式解决:

在这种情况下,您可以继续自己实施一种列出的算法。更好的是 - 您可以使用像ZooKeeper这样的协调服务。在ZK api中,您可以使用顺序和短暂节点实现领导者选举。看看这个食谱:

如您所见,使用裸ZK api实现配方并非易事,因此Curator提供了一个更好的包装器,使您更容易使用。

总之,在谈论ZooKeeper中的领导者选举时,有两个不同的东西:

  • ZK服务器在内部完成领导者选举,作为实现强一致性的机制
  • 领导者选举作为向ZooKeeper用户提供的功能,需要使用ZK原语手动实现,或者用作Curator库中的可用配方