zookeeper 系列之 1——zookeeper基本概念

来源:互联网 发布:知鸟软件 编辑:程序博客网 时间:2024/06/04 22:13

        最近一段时间在学习dubbo+zookeeper,demo做完之后,感到dubbo过于“轻量级”,几乎没有代码的侵入,只是spring的xml配置文件中注入了一下,因此打算更加深入的去学习dubbo和zookeeper。

        dubbo,好歹也是中国出土的,官网全中文,看起来非常省力气,花了周六一天的时间将官网看了一遍,对dubbo的宏观概念就差不多了,虽说公司并未使用dubbo进行开发,经过官网的学习,对理论有了较深入的了解之后,相信后面进入dubbo的开发也会非常顺利。

        下面就是zookeeper的学习了。zookeeper相对dubbo来讲,更底层一些,买了一本《从paxos到zookeeper分布式一致性原理与实践》,从头到尾比较精读了一下。嗯,虽说很多人会鄙视我这种读书的方式,无奈个人比较笨,只能用笨方法,呵呵。读的过程中最大的难点在于 paxos算法,作者基本上照着原论文翻译,但仍然难以理解,对照着英文的原论文,对该算法仍不敢说理解透彻。有个视频讲解了一些paxos算法,个人感觉比较清晰,地址如下。

http://www.tudou.com/programs/view/L8zg7KsWaxk/?FR=LIAN

         经历了paxos的磨练之后就真正进入到zookeeper的世界了。然而,zookeeper并不是采用paxos算法实现的,而是基于该算法的启发,采用ZAB协议完成的。且zookeeper的目的是提供一个分布式数据一致性的解决方案,paxos则是用于构建一个分布式的一致性状态机系统。

        ZAB协议与paxos算法的联系:

        两者都存在一个类似于Leader的进程角色,用于负责协调多个follower进程的运行;  Leader进程都会等待超过半数的Follower做出正确的反馈后,才会将一个提案进行提交; ZAB协议中,每个proposal都包含一个epoch值,用来代表当前Leader周期,Paxos算法中,存在类似的标识,名字叫做Ballot。


zookeeper的基本概念由以下几个方面:

1、集群角色:也就是Leader、Follower、Observer。

                Leader:事务请求的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各服务器的调度者。

                Follower:处理客户端非事务请求,转发事务请求给Leader服务器; 参与事务请求Proposal的投票; 参与Leader的选举投票。

                Observer:3.3.0版本开始引入。与Follower工作原理基本一致,对于非事务请求,可以进行独立的处理,对于事务请求,则会转发给Leader服务器。区别是Observer不参与任何形式的投票。

2、会话(Session):session指的是客户端会话。

                一个客户端启动的时候会首先与服务器建立一个TCP长连接,从第一次建立长连接开始,客户端session生命周期也就开始了。在sessionTimout规定的时间内能够重新连接上集群中的任意一台服务器,该session仍然有效。

3、数据节点:节点分为两类:构成集群的机器、数据模型中的数据单元

               zookeeper将所有数据存储在内存中,数据模型是一棵树 ZNode Tree,结构与unix的文件系统类似。数据节点分为持久节点、持久顺序节点、临时节点、临时顺序节点几种类型。临时节点的生命周期与客户端的session绑定,当session失效,该节点即被移除。

              每个数据节点ZNode,zookeeper都会为其维护一个stat数据结构,维护了id、time、version等信息

4、版本:上文中提到的ZNode的stat数据结构中维护的version信息,记录了ZNode的三个数据版本,分别是version(当前ZNode版本)、cversion(当前ZNode子节点的版本)和aversion(当前ZNode的ACL版本)。这些版本信息保证分布式数据原子性操作。

5、Watcher:事件监听,在指定节点上注册watcher,并且在一些特定事件触发的时候,zookeeper服务器端会将事件通知到订阅的客户端,该机制是zookeeper实现分布式协调服务的重要性。

6、ACL:Zookeeper的采用的ACL策略进行权限控制,类似于Unix文件系统的权限控制

             create:创建子节点

             read:获取节点数据和子节点列表

             write:更新节点数据

             delete:上传子节点

            admiin:设置节点ACL权限


以上六点为zookeeper的基本概念,也是zookeeper的核心内容。zookeeper的各个特性都是由这几点构成。

个人认为zookeeper的最核心之处在于leader选举和数据节点的管理以及watcher机制。zookeeper的各种应用场景,也大多是对数据节点的操作以及对数据节点watcher订阅完成的。

作者初学zookeeper,文中不足之处以及错误之处,敬请读者指正批评。


1 0
原创粉丝点击