【Zookeeper】——概念简介

来源:互联网 发布:飞常准和航旅纵横 知乎 编辑:程序博客网 时间:2024/06/06 01:21
        Zookeeper的基本概念介绍,主要为4部分:数据模型、节点特性、Watcher机制、ACL。

数据模型
 
        上图为Zookeeper的数据存储结构,采用的是树形结构,上图中的每个椭圆都是一个数据节点,称为Znode,每个Znode上都可以保存数据,同时还可以挂载子节点。


数据节点


        Znode根据生命周期的不同可以分为三种:持久节点、临时节点、顺序节点。


        持久:创建后一直在Zookeeper服务器上存在,直到有删除操作主动清除该节点。


        临时:临时节点是和客户端的会话绑定在一起的,如果客户端短会失效对应的节点会被自动清理,会话的概念稍后讲解。还有一点说明的临时节点只能作为叶子节点。


        顺序:每个父节点都会给它的第一级子节点维护一份顺序,用来记录每个子节点创建的先后顺序。基于这个顺序在创建子节点的时候可以设置标记,在创建节点过程中zk会自动为给定节点名添加一个数字后缀作为一个新的、完整的节点名。数字都是在前一个顺序节点的数字的基础上+1。


        顺序节点根据生命周期可以分为持久顺序节点和临时顺序节点,他们除了有顺序节点的特性还具有持久节点和临时节点的特性。


ACL

        

        Access Control List,用来实现对数据节点的权限控制。从三个方面理解:权限模式(Sheme)、授权对象(ID)、权限(Permission)。


        权限模式:认证方式,有四个模式ip(通过ip地址进行权限控制,可以控制到某个ip也可以是某个ip段)、digest(类似使用用户名密码的形式)、world(全局开放的,所有的用户可以在不进行权限校验的情况下操作zk的数据)、super(超级 用户,也是可以对zk上的任意节点进行任何操作)

        授权对象:权限赋给谁

        权限:这就是指通过权限检查后可以被允许执行的操作,一般包括create、delete、read、write、admin

        两种形式设置ACL,一种是创建节点的同时进行ACL权限设置,另一种就是使用setAcl命令单独对已经存在的数据节点进行设置。

Watcher机制
        Watcher机制主要包括客户端线程、客户端的watchManager和zk服务器三部分,大致的流程是这样的:

        客户端向服务端注册一个Watcher的同时,会将Watcher对象存储在客户端的WatcherManager中,当Zookeeper服务器端触发Watcher事件后,会像客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。

        回调函数:
                有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去           敲门,这里,“叫醒”这个行为是旅馆提供的,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。

        Client实现zk的watcher接口里的方法完成连接的 ZooKeeper 服务端和接收数据,watcher接口里有一个process方法,这是个回调方法,服务端发来消息客户端就会对相应的 process 方法进行回调,从而实现对事件的处理。


        下面要介绍的是贯穿Zookeeper的ZAB协议,ZAB协议全称Zookeeper Atomic Broadcast,它是专门为Zookeeper设计的一种支持崩溃恢复的解决分布式一致性的原子广播协议。Zookeeper依赖ZAB实现分布式数据一致性,基于该协议Zookeeper实现一种主备模式的系统架构来保持集群中个副本之间数据的一致性。

        

        ZAB协议的核心是定义那些会改变Zookeeper服务器数据状态的事务请求的处理方式,定义如下:所有的事务请求必须有一个全局唯一的服务器来协调处理,这样的服务器被称为Leader,其他的则是follower。Leader将一个客户端事务请求转换成一个事务proposal(事务提议),并将该Proposal分给集群中所有的follower。之后leader等待所有follower服务器的反馈,一旦超过半数的follower进行了正确的反馈,leader就再次向所有的follower服务器发出commit消息,要求其将前一个Proposal进行提交。



ZAB有两种消息模式:崩溃恢复和消息广播


        崩溃恢复
                服务框架启动过程中,或当leader服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB协议就会进         入恢复模式,并选举产生新的leader服务器。当选举产生了新的leader服务器,同时集群中已经有过半的机器           该leader服务器完成了状态同步之后,ZAB协议就会退出恢复模式。

        消息广播
                当集群中已经有过半的Follower服务器完成和Leader服务器的状态同步(状态同步指数据同步),整个服             务框架进入消息广播模式

        模式切换
                当leader服务器出现了崩溃退出或重启,或是集群中已经不存在过半的服务器与该leader服务器保持正常通             信,在开始新一轮的原子广播事务操作之前,所有进程会首先使用崩溃恢复协议来使彼此达到一个一致的状               态,于是整个ZAB流程就会从消息广播模式进入到崩溃恢复模式。


小结
        以上为Zookeeper中几个基本概念,没有什么逻辑相关性,做简单的介绍,下一篇简单介绍搭建Zookeeper单机版和集群版过程。
原创粉丝点击