前言
因为之前做开发也接触到ZooKeeper,是以服务注册中心的方式来使用ZooKeeper,因为现在要探索分布式事务的问题,所以系统性的学习一下ZooKeeper。ZooKeeper是什么呢?Zookeeper是一个开放源代码的分布式协调服务。它的设计目标是将那些复杂而且容易出错的分布式一致性服务封装起来。构成一个高效可靠的API提供给用户使用。
ZooKeeper是什么
Zookeeper是一个典型的分布式数据一致性的解决方案。ZooKeeper可以保证分布式一致性的特性。
①顺序一致性:同一个客户端发起的请求,最终会严格地按照发起的顺序被应用到ZooKeeper中去。
②原子性:所有的事务请求结果在整个集群的所有机器的应用情况是一致的,要么全部应用,要么全部不应用。
③单一视图:无论客户端链接的是哪个ZooKeeper服务器,在服务端数据模型都是一致的。
④可靠性:一旦服务端应用了一个事务,并完成了对客户端的响应,改事务所引起的服务端状态变更会一直保存下来。
⑤实时性:Zookeeper保证在一定的时间段内,客户端最终能够从服务器上读取到最新的数据状态。
ZooKeeper致力于提供一个高性能高可用具有严格的顺序访问控制能力的分布式协调服务。
Zookeeper的基本概念
1.集群角色
在ZooKeeper集群环境中,存在Leader、Follower、Observer。这三种角色。集群中所有的机器通过选举的方式产生一个Leader,除了Leader之外,其他的机器都是Follower和Watcher。这两者的区别以后会解释。
2.会话
会话,也就是session是指一个客户端通过TCP长连接的方式和服务器之间建立的通信。客户端能够通过心跳检测与服务器保持有效的会话和接收服务器端的Watch时间通知。如果服务器出现不可用,那么会在sessionTimeOut的时间范围内,客户端能重新连接上其中任意一台集群中的机器,则会话仍然有效。
3.数据节点
在ZooKeeper中,节点分为两类 。一类是集群中的机器,我们称为机器节点。第二类是数据模型中的数据单元。
4.版本
暂不做解释
5.WATCHER
ZooKeeper允许用户再指定的节点上注册Watcher。在某些动作的触发下,服务端会把事件通知到客户端。在Dubbo分布式项目中,就广泛地使用到这个特性。
6.ACL
采用ACL的策略来进行权限控制。create创建子节点权限,read-获取节点数据和子节点的列表数据,write-更新节点数据的权限,delete-删除子节点的权限,admin设置节点acl的权限。