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:为了使服务可靠和容错,必须将数据复制到一定数量的服务器。