为什么当 ZooKeeper 在 ZooKeeper 服务器之间进行领导者选举时,Curator 在 'Process' 中进行领导者选举?

Why does Curator does Leader Election among 'Process' when ZooKeeper has a Leader Election among ZooKeeper Servers?

我最近了解了 ZooKeeper 及其设计。 我了解 ZooKeeper 服务由多个 ZooKeeper 服务器支持,但是,有必要选择其中一个服务器作为组的领导者。

接下来我开始研究 LeaderLatch 和 LeaderElection 的 Apache Curator 秘诀,他们没有谈论选择领导者,而是谈论选择一个进程作为领导者(组织者)。

我对此感到困惑。有人可以帮助我澄清为什么 Curator 食谱和 ZooKeeper 谈论的是两种不同类型的 Leader 吗?

如果他们确实不同,那么这些领导人之间有什么关系?

ZooKeeper 的用户不关心 ZooKeeper 集群是否有领导者。它是一个实现细节。 ZooKeeper 服务器在它们之间选出一个领导者作为强制执行 ZooKeeper 作为服务提供的一些一致性保证的一种方式。

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

此 ZK 内部领导者选举与 ZooKeeper 作为服务提供的用例无关 - ZooKeeper 用户的领导者选举。

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

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

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

综上所述,ZooKeeper 中的 Leader Election 有两种不同的情况:

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