动物园管理员如下一个简单的客户端 - 服务器模型,其中客户端节点(即,机器),使使用该服务,和服务器是提供服务的节点。 ZooKeeper服务器的集合形成一个ZooKeeper集合。在任何时候,一个ZooKeeper客户端连接到一个ZooKeeper服务器。每个ZooKeeper服务器可以同时处理大量的客户端连接。每个客户端周期性地向它连接的ZooKeeper服务器发送ping命令,让它知道它是活着的并且已连接。有问题的ZooKeeper服务器会响应ping的确认,表明服务器也处于活动状态。当客户端在指定的时间内没有收到服务器的确认信息时,客户端连接到集成中的另一台服务器,客户端会话将透明地传输到新的ZooKeeper服务器。 Check this了解动物园管理员架构
当客户端请求读取特定znode的内容时,读取发生在客户端连接到的服务器上。因此,由于只涉及集合中的一台服务器,所以读取快速且可扩展。但是,要成功完成写入操作,ZooKeeper集合的绝大多数节点必须可用。当ZooKeeper服务启动时,来自整体的一个节点被选为领导者。当客户端发出写请求时,连接的服务器将请求传递给领导。然后该领导者向集合的所有节点发出相同的写入请求。如果绝大多数节点(也称为仲裁)成功响应此写入请求,则认为写入请求已成功。然后成功的返回代码返回给发起写入请求的客户端。如果法团的法定节点在集体中不可用,则ZooKeeper服务不起作用。 Check this了解写操作的投票过程
为了服务的可靠性和可扩展性,它被复制到一组机器上。 ZooKeeper使用着名的Paxos算法的一个版本来保持副本的一致性。
动物园管理员给出以下稠度从客户端保证
顺序一致性更新将在它们被发送的顺序来应用。
原子性更新成功或失败 - 没有部分结果。
单个系统映像无论服务器连接到哪个服务器,客户端都会看到相同的服务视图。
可靠性一旦应用更新,它将一直持续到此时间,直到客户机覆盖更新为止。这个保证有两个推论:
及时性该系统的客户端视图保证在一定的时间范围内(大约几十秒)是最新的。客户可以在此范围内看到任何系统更改,或者客户端将检测到服务中断。
以下是回答您的问题
问题1:投票是写操作是否应该被提交或不。
问题2:在动物园管理员合奏客户端和服务器之间的通信发生在使用ZAB protocol
问题3通过消息交换的TCP连接:对于服务是可靠的和容错,数据必须复制到服务器的法定人数。
其实在两阶段提交中也有投票。追随者“投票”提交。如果有足够的追随者“投”了提交,那么主人可以提交写入。在这种情况下,可以保证在每个仲裁(超过一半的服务器)中至少有一台服务器已经看到提交。 – 2011-01-28 14:19:59