我读到在zookeeper中的写操作首先要完成连接到cliend的服务器必须联系领导,然后领导进行投票,当他得到超过一半的服务器然后他回复服务器,这是连接到cliend以继续这个操作。
但我的问题是,投票成功是什么?我的意思是他们投票支持什么? 第二个问题是他们如何投票他们发送消息或他们如何通知领导者。第三个问题是他们为什么需要投票,我读到有一个版本号以便检查更新数据,为什么他们需要投票?
请允许任何人尽快回复我。
提前致谢
答案 0 :(得分:1)
这是我能做的最快的。您需要获得Nancy Lynch出版的“分布式算法”一书,以便更好地理解这些系统的工作原理。
背景 - 算法范例称为Paxos,尽管Zookeeper有自己的实现,但有点不同。 Zookeeper以两阶段提交提交数据。所有通信都通过FIFO通道使用原子广播协议进行,以保持排序。
投票过程是什么 - 投票过程是为了找到领导者而不是两阶段提交。没有选票。具有最高zxid的节点是领导者。
投票是领导人选举。两阶段提交用于写操作。有关更多信息,请查看zookeeper文档,更重要的是请参阅dist algos book以了解这些事情的行为方式:)。
- 西
答案 1 :(得分:1)
ZooKeeper遵循一个简单的客户端 - 服务器模型,其中客户端是使用该服务的节点(即机器),服务器是提供服务的节点。 ZooKeeper服务器的集合形成ZooKeeper集合。在任何给定时间,一个ZooKeeper客户端连接到一个ZooKeeper服务器。每个ZooKeeper服务器可以同时处理大量客户端连接。每个客户端定期向其连接的ZooKeeper服务器发送ping命令,让它知道它处于活动状态并已连接。有问题的ZooKeeper服务器响应ping的确认,表明服务器也是活动的。当客户端在指定时间内没有收到来自服务器的确认时,客户端连接到集合中的另一个服务器,客户端会话透明地转移到新的ZooKeeper服务器。 Check this了解zookeeper架构
当客户端请求读取特定znode的内容时,读取将在客户端连接到的服务器上进行。因此,由于只涉及来自整体的一个服务器,因此读取是快速且可扩展的。但是,要成功完成写入,ZooKeeper集合的严格大多数节点都必须可用。当启动ZooKeeper服务时,集合中的一个节点被选为领导者。当客户端发出写入请求时,连接的服务器会将请求传递给领导者。然后,该领导者向整体的所有节点发出相同的写请求。如果严格的大多数节点(也称为仲裁)成功响应此写请求,则认为写请求已成功。然后将成功的返回码返回给发起写请求的客户端。如果集合中的法定数量的节点不可用,则ZooKeeper服务不起作用。 Check this了解写操作的投票过程
为使服务可靠且可扩展,它将在一组计算机上进行复制。 ZooKeeper使用着名的Paxos算法版本,以保持副本一致。
Zookeeper提供以下一致性保证
顺序一致性客户端的更新将按照发送顺序应用。
原子性更新成功或失败 - 没有部分结果。
单一系统映像无论服务器连接到哪个服务器,客户端都会看到相同的服务视图。
可靠性一旦应用了更新,它将从那时起持续到客户端覆盖更新。这种保证有两个推论:
及时性系统的客户端视图保证在特定时间范围内(大约数十秒)是最新的。该边界内的客户端将看到系统更改,或者客户端将检测到服务中断。
以下是您的问题的答案
问题1 :投票决定是否应该提交写操作。
问题2 :通过使用ZAB protocol
交换消息,通过TCP连接在zookeeper集合中的客户端和服务器之间进行通信问题3 :要使服务可靠且容错,必须将数据复制到法定数量的服务器。