zookeeper设计上易于编码,数据模型构建在咱们熟悉的树形结构目录风格的文件系统中。java
zookeeper运行在java中,同时支持java和C 语言。正确的实现协调服务是公认的难干的差事。 他们及其容易出错,好比资源竞争和死锁.node
zookeeper命名空间由数据寄存器组成,zookeeper中,咱们称他为,znodes, 这跟文件和目录很是相似..算法
不像一个典型的文件系统,其设计时就是为了存储数据.而zookeeper 数据是保存在内存中的,这也就意味着zookeeper能实现一个高吞吐量和低延迟.(由于内存操做效率高)数据库
zookeeper是有副本的, 就像分布式的处理协调服务同样,zookeeper 自己就打算在服务器集群中使用副本机制,咱们称之为全体.编程
组成zookeeper 服务的全部机器节点互相之间都必须感知到对方. 他们维护着当前机器状态的内存快照,有事务日志和持久化存储的快照.缓存
客户端链接到其中一台zookeeper服务器,客户端和zookeeper服务器保持一个tcp链接,经过tcp链接发送请求得到响应,服务器
获取事件监听,发送心跳等等. 若是TCP链接被中断了,客户端会链接到另一台zookeeper服务器.网络
zookeeper是有序的, zookeeper给每一次更新操做都赋予一个编号,他这个编号反应了对zookeeper的事务性修改顺序.框架
随后的操做可以使用这一顺序去实现更高级别的抽象,好比同步原语.tcp
不像标准的文件系统,zookeeper 命名空间中的每一个节点可以有数据关联,也有子节点.
就比如是文件系统中一个文件对象便可以是一个文件也能够是一个文件夹.(zookeeper被设计用来存储协调数据:
状态信息,配置信息,位置信息等等, 所以数据存储在每一个节点中一般很是小,从几个字节到几千字节之间),
咱们使用znode这个术语来使得咱们讨论zookeeper数据节点相关内容时语义更加清晰明确.
znode管理着包含这一个状态结构数据,它包含数据修改的版本号,ACL修改及时间戳, 容许缓存校验和协调更新.
znode数据每修改一次,版本号加一. 举个实际的例子,每次客户端收到数据的同时,也收到当前数据的版本号.
zookeeper 也有会话级别的节点的语义支持,这些znode节点随着会话的建立而激活,会话的结束的时候节点被删除.
zookeeper支持监听, 客户端可以设置监听znode节点. 当znode节点变动时可能触发或者移除监听.当监听事件被触发了,
客户端将会收到数据通知包,告诉客户端节点数据被修改了. 同时若是当前客户端和zookeeper节点的链接被断开了.
zookeeper 简单而性能优异. 因为他简单快速的目标,他成为构建许多更加复杂服务的基础,好比同步服务,他提供了一系列的保证.
1 顺序一致性: 来自客户端的更新操做将会按照顺序被做用.
2 原子性操做: 更新要么所有成功,要么所有失败,没有部分的结果.
3 统一的系统镜像: 不管客户端连接的是哪台服务器,都能得到一样的服务视图,也就是说他是无状态的.
4 可靠性保证: 一旦写入操做被执行(做用到服务器),这个状态将会被持久化,直到其余客户端的修改生效.
5 时间线特性:客户端访问服务器系统镜像能在一个特定时间访问内保证当前系统是实时更新的
zookeeper的设计原则之一就是提供简单的编程接口. 所以,他仅仅提供了如下几个操做.
zookeeper的编程接口 设计的很是简单,可是用这些能实现一些其余更高级别的操做,好比同步原语,对成员进行分组和选举等等.
zookeeper 被设计的号称高性能框架,可是事实状况如何呢?
来自雅虎的zookeeper开发团队的研究证实了这点.
(能够查看下zookeeper 吞吐量随着读写比例变化的图表,即上图)
在读占主要比例的应用中,性能尤佳,由于写操做涉及到服务器之间状态的同步.尤为是在协调服务这个典型案例中表现的尤为突出.
zookeeper 吞吐量和读写比例的变化关系用的是zookeeper3.2版本,运行在 双核 2Ghz 及SATA 15k RPM 处理器配置的服务器中.
其中一个负责zookeeper 日志设备. 快照信息写入操做系统驱动中.
写入请求是1Kb写入, 读请求也是1kb的写入(读写单元都是1Kb).
servers 标示着 整个zookeeper的集群大小, 即组成zookeeper服务的服务器数.
为了展现下,咱们系统随着时间的推移及错误出现,咱们运行了一个一个由7个机器组成的zookeeper服务中,咱们使用和此前同样饱和度的基准测试,
这个图中有几个比较关键的观测点.首先,若是从节点失败并快速恢复了,即便从节点失败了,zookeeper仍然可以承受住一个比较高的吞吐量.
可是,更为重要的一点事,leader节点的选举算法 能让系统快速恢复,防止吞吐量在短期内迅速下降.观察发现, zookeeper能在200毫秒内选举出新的leader节点,
zookeeper 已经在许多企业级应用中得到成功,雅虎内部使用zookeeper 进行协调和失败恢复服务,及消息中间人服务
他管理成千上万个消息主题,能够实现副本和数据传输的功能.
zookeeper在雅虎内部还用于数据抓取服务,即网络爬虫,同时致力于失败恢复.