http://zookeeper.apache.org/doc/r3.4.5/zookeeperOver.html
ZooKeeper:用于分布式应用的分布式协同服务
Zookeeper 是分布的、开源的分布式协同服务。它提供了几个简单的原语,分布式应用可以基于这些原语来实现高层的服务,以实现同步、配置管理、grougs and naming (这个怎么翻译?)。Zookeepr 的设计目标是易于编程,并采用类似于文件系统的目录树结构这样一种风格的数据模型。ZooKeeper 运行于 Java 上并提供 Java 和 C 访问接口。
协同服务很难正确地实现,他们很容易由于竞争条件或死锁等原因而出错。Zookeeper 的动机就是减轻分布式应用实现协同服务的难度。
设计目标
Zookeeper 必须简单:Zookeeper 允许分布式应用通过一个共享的层次式的名字空间(其结果类似标准文件系统)来来彼此协同。这个名字空间由数字节点 znode 组成,znode 就如同目录或文件,不同的是文件系统用来存储,而 Zookeeper 的数据保持在内存里面,这意味着 Zookeeper 可以做到高吞吐量和低延迟。
Zookeepr 的实现强调高性能、高可用性、严格有序访问。高性能的特征符合大规模分布式系统的要求;高可靠性的特征保证 Zookeeper 不会成为单点故障;严格有序意味着高等的同步原语可以在客户端实现。
ZooKeeper 复制:Zookeeper 在多台机器上(组成一个 ensemble)复制数据;提供 Zookeeper 服务的多台服务器必须相互知道对方的地址。他们维护状态的内存映像,并在持久化存储中维护事务日志和快照。只要超过半数的服务器存活,ZooKeeper 就可以提供服务。
客户端连接到一台 ZooKeeper 服务器,维持 TCP 连接以发送请求、获取响应、得到观察事件、发送心跳信号。如果 TCP 连接中断,客户端连接到另一台服务器。
ZooKeeper 保证有序:Zookeeper 给每个更新赋予一个数字戳以反映其在所有事务中的顺序。这个序号可以用于实现更高级的抽象,如同步原语。
ZooKeeper 强调速度:尤其是在读主导的负载类型中。Zookeeper 应用可以运行在数以千计的机器上,在读多于写的场景中,读写比为 10:1 时性能最好。