###Fast Paxos算法:

这个还没看,先留个坑把。

###文件结构:

zookeeper的文件结构大概是这个样子的:

!图 1 Zookeeper 数据甓构](https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/image001.gif)

znode(data node):

  1. 其中的每个子目录就是一个znode,他们也可以有子的znode(临时znode除外)。
  2. 这些znode必须是绝对路径,不允许相对路径。
  3. 每个znode都维护一个stat structure(linux系统文件的结构),其中包括版本号,acl改变等等。每次更新数据会让版本号自增。
  4. 每个znode可以设置一个watches,当watch触发后,zookeeper将发给client一个提醒。
  5. 在znode中数据读写是原子性的。每个znode都有一个ACL(access control list)来控制其读写权限。zookeeper不是用来做数据库的,其中存储的数据可能都是几kb的配置/状态信息。大块数据都存在hdfs中。
  6. Ephemeral node就是临时节点,每次会话结束这些节点都会清空,不允许有子节点。

###Zookeeper Session:

state_dia

###一致性的保证:

zookeeper是一个非常高效、可扩展的服务。其一致性靠以下几点保证:

  1. 顺序的一致性。一个client的更新会依序发送给其他。
  2. 原子性。更新是原子操作,只有成功和失败,没有中间过程。
  3. 服务器会看到完全相同的服务,不论其连接了哪个服务器。
  4. 可靠性。一旦一个更新被部署,他会一直存在,直到被另一个更新覆盖。
  5. 及时性。client对系统的观察在一个时间段内将是最新的。也即系统的改变在这个时间段内client是看见的,或者可以探测到它失败。