概览
目的:解决分布式系统中的单点问题
设计目标:将复杂容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以简单易用的api提供给用户使用。
典型应用场景:生产者和消费者的注册中心
底层功能:1.管理(存储、读取)用户程序提交的数据;2.为用户提供数据节点监听服务。
重要概念
1.session
ZooKeeper 服务器与客户端的会话,在为客户端创建会话之前,会创建一个sessionID,作为此次会话的唯一标识。
一个session为一个TCP长连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向 Zookeeper 服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的 Watch 事件通知。当由于服务端过载、网络故障或客户端主动断开等原因导致连接断开时,只要在超时时间内连接上集群中的任意一台服务器,会话仍然有效。
2.znode
znode指数据模型中的数据单元(即数据节点),以树型将所有数据存储在内存中。
znode分持久节点和临时节点两类:持久节点顾名思义,一旦建立,除非主动删除,否则会一直在zookeeper上;临时节点的生命周期与session绑定,session结束时创建的所有临时节点都会被释放。
此外,znode还有一个SEQUENTIAL属性:若被标记此属性,创建节点时,zookeeper会自动在节点名后追加一个编号(整型,自增)。
3.watcher
watcher是zookeeper用来实现distribute lock, distribute configure, distribute queue等应用的主要手段。要监控data_tree上的任何节点的变化(节点本身的增加,删除,数据修改,以及子节点的变化),都可以在获取该数据时注册一个watcher。一旦该节点数据变化,Follower会发送一个notification response,客户端收到notification响应,则会查找对应的watcher并回调他们。
客户端可以在某个znode上设置一个watcher,来监控该znode上的变化。如果该znode上有相应的变化,就会触发这个watcher,把相应的事件通知给设置watcher的客户端。需要注意的是,watcher是一次性的,即触发一次就会被取消,如果想继续watch的话,需要客户端重新设置。
4.权限设置(ACL)
- create:创建子节点的权限
- read:获取节点数据和子节点列表的权限
- write:更新节点数据的权限
- delete:删除子节点的权限
- admin:设置节点ACL的权限
5.zookeeper特点
- 顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
- 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的
- 单一系统映像:无论客户端连到哪一个 zookeeper 服务器上,其看到的服务端数据模型都是一致的
- 可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖
常见问题
1.为什么最好使用奇数台服务器构成 ZooKeeper 集群?
zookeeper中采用Zab协议,核心思想为:多数server写成功,则任务数据写成功。因而选择奇数台server能节约server资源
网友评论