Zookeeper用途场景
- Zookeeper分布式服务框架是Apache Hadoop的一个子项目,主要是用来解决分布式应用中经常遇到的一些数据管理问题;
- 如:集群管理、统一命名服务、分布式配置管理,分布式消息队列、分布式锁、分布式通知协调等;
- 越来越多的分布式计算开始强依赖ZK,比如Storm、Hbase;
- Zookeeper对分布式开发带来很多便利,用ZK的独有特性巧妙地解决了很多问题;很多分布式技术用到Zookeeper或多或少特性,尤其是新生代分布式技术几乎都会依赖Zookeeper特性,如Hbase、火爆的Storm;
Zookeeper体系结构
Server端具有fast fail特性,非常健壮。无单点。不超过半数Server挂掉不影响提供服务。Master/slave主流模式。
Zookeeper数据结构
类似文件系统的目录树型结构,同Hadoop HDFS:
Zookeeper名字空间由节点znode构成,其组织方式类似于文件系统,其中各个节点相当于目录和文件,通过路径作为唯一标识。与文件系统不同的是,每个节点具有与之对应的数据内容,同时也可以具有子节点。
zookeeper用于存储协调数据,如状态、配置、位置等信息,每个节点存储的数据量很小,KB级别。
节点维护一个状态stat结构(包括数据变化的版本号、ACL变化,时间戳),以允许缓存验证与协调更新。每当节点数据内容改变,多一个版本号,类似HBase。客户端获取数据的同时也会获取数据版本号。节点的数据内容以原子方式读写。
节点具有一个访问控制列表(Access Control List - ACL)来约束访问操作,即具有权限控制。
Watches
Zookeeper对Node的增、删、改、查都可触发监听;
watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher将watch事件异步发送至观察者;
watch是一次性触发的并且在获取watch事件和设置新watch事件之间有延迟,所以不能可靠的观察到节点的每一次变化;
客户端监视一个节点,总是先获取watch事件,再发现节点的数据变化;
watch事件的顺序对应于zookeeper服务所见的数据更新的顺序;