上篇文章 咱们已经安装上了zookeeper,也简单的体验了一把,可是若是让你给别人介绍下zookeeper,可能也是说不出来。本篇文章就参考了网上各位优秀博主的文章,整理出本身更能理解的内容html
http://www.cnblogs.com/sunddenly/category/620563.htmlnode
https://mp.weixin.qq.com/s/Gs4rrF8wwRzF6EvyrF_o4A程序员
Zookeeper是一种分布式协调服务异步
以前的工做都是单机部署应用,并无接触过zookeeper,如今 的新公司动不动就集群,什么主从,分布式,渣渣的我听得一脸蒙蔽,项目中也使用zookeeper进行应用配置以及使用了elasticjob。分布式
Zookeeper的数据模型如同文件系统的目录。
设计
Zookeeper的数据存储是基于节点,这种节点叫作Znode。htm
data:blog
Znode存储的数据信息。事件
ACL:事务
记录Znode的访问权限,即哪些人或哪些IP能够访问本节点。
stat:
包含Znode的各类元数据,好比事务ID、版本号、时间戳、大小等等。
child:
当前节点的子节点引用
Zookeeper是为读多写少的场景所设计。Znode并非用来存储大规模业务数据,而是用于存储少许的状态和配置信息,每一个节点的数据最大不能超过1MB。
Zookeeper包含了哪些基本操做呢?这里列举出比较经常使用的API:
create 建立节点
delete 删除节点
exists 判断节点是否存在
getData 得到一个节点的数据
setData 设置一个节点的数据
getChildren 获取节点下的全部子节点
这其中,exists,getData,getChildren属于读操做。Zookeeper客户端在请求读操做的时候,能够选择是否设置Watch。
Watch是什么意思呢?
咱们能够理解成是注册在特定Znode上的触发器。当这个Znode发生改变,也就是调用了create,delete,setData方法的时候,将会触发Znode上注册的对应事件,请求Watch的客户端会接收到异步通知。
具体交互过程以下:
1.客户端调用getData方法,watch参数是true。服务端接到请求,返回节点数据,而且在对应的哈希表里插入被Watch的Znode路径,以及Watcher列表。
2.当被Watch的Znode已删除,服务端会查找哈希表,找到该Znode对应的全部Watcher,异步通知客户端,而且删除哈希表中对应的Key-Value。