0

你好,我是穆罕默德,一名攻读硕士学位的学生,我想问一个关于 Zookeeper 的问题。

我读到zookeeper中的写操作首先要连接到客户端的服务器必须联系领导者,然后领导者进行投票,当他获得超过一半的服务器时,他会回复连接到的服务器客户为了继续这个操作。

但我的问题是,投票过程是什么?我的意思是他们投票给什么?第二个问题是他们如何投票他们发送消息或他们如何通知领导者。第三个问题是他们为什么需要投票,我读到有一个版本号以便检查更新数据那么他们为什么需要投票???

请任何人尽快回复我。

提前致谢

4

2 回答 2

1

ZooKeeper 遵循简单的客户端-服务器模型,其中客户端是使用服务的节点(即机器),服务器是提供服务的节点。ZooKeeper 服务器的集合形成了 ZooKeeper 集合。在任何给定时间,一个 ZooKeeper 客户端都连接到一个 ZooKeeper 服务器。每个 ZooKeeper 服务器可以同时处理大量的客户端连接。每个客户端都会定期向它所连接的 ZooKeeper 服务器发送 ping,以告知它它是活动的并且已连接。有问题的 ZooKeeper 服务器响应 ping 确认,表明服务器也处于活动状态。当客户端在指定时间内没有收到服务器的确认时,客户端连接到集成中的另一台服务器, 检查此以了解 zookeeper 架构

当客户端请求读取特定 znode 的内容时,读取发生在客户端连接到的服务器上。因此,由于只涉及 ensemble 中的一台服务器,因此读取速度快且可扩展。但是,要成功完成写入,ZooKeeper ensemble 的绝大多数节点都必须可用。当 ZooKeeper 服务启动时,从 ensemble 中选出一个节点作为领导者。当客户端发出写入请求时,连接的服务器会将请求传递给领导者。然后,该领导者向 ensemble 的所有节点发出相同的写入请求。如果绝大多数节点(也称为仲裁)成功响应此写入请求,则认为写入请求已成功。然后将成功的返回码返回给发起写请求的客户端。如果集合中的节点数量不可用,则 ZooKeeper 服务将不起作用。检查此项以了解写入操作的投票过程

为了使服务可靠且可扩展,它被复制到一组机器上。ZooKeeper 使用著名的 Paxos 算法的一个版本来保持副本的一致性。

Zookeeper 给出以下一致性保证

来自客户端的顺序一致性更新将按照它们发送的顺序应用。

原子性更新要么成功要么失败——没有部分结果。

单一系统映像客户端将看到相同的服务视图,而不管它连接到的服务器是什么。

可靠性一旦应用了更新,它将从那时起持续存在,直到客户端覆盖更新。这种保证有两个推论:

及时性 系统的客户视图保证在一定的时间范围内(大约几十秒)是最新的。客户端将在此范围内看到系统更改,或者客户端将检测到服务中断。

以下是您的问题的答案

问题1:投票是关于是否应该提交写操作。

Question2 : zookeeper ensemble中的客户端和服务器之间的通信通过使用ZAB协议的消息交换通过TCP连接发生

问题3:为了使服务可靠和容错,必须将数据复制到一定数量的服务器。

于 2014-10-07T09:35:28.977 回答
1

这是我能做到的最快的。您需要阅读 Nancy Lynch 的《分布式算法》一书,以更好地了解这些系统的工作原理。

背景 - 算法范式称为 Paxos,尽管 Zookeeper 有自己的实现,但有点不同。Zookeeper 在两阶段提交中提交数据。所有通信都使用原子广播协议在 FIFO 通道上进行,以保持顺序。

什么是投票过程 - 投票过程是为了寻找领导者,而不是为了两阶段提交。没有选票什么都没有。zxid 最高的节点是领导者。

投票是为了选举领导人。两阶段提交用于写操作。有关更多信息,请查看 zookeeper 文档,更重要的是 dist 算法书,以了解为什么这些东西会以它们的方式运行 :)。

——赛

于 2011-01-28T05:12:16.047 回答