阿八博客
  • 100000+

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

Zookeeper工作过程详解

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/1010/116546.html

一、Zookeeper工作机制

分布式和集中式系统相比,有很多优势,比如更强的计算能力,存储能力,避免单点故障等问题
但是由于在分布式部署的方式遇到网络故障等问题的时候怎么保证各个节点数据的一致性和可用性是比较关键的问题

那么,对于分布式集群来说,我们需要一个能够在各个服务和节点之间进行协调和服务的中间人——Zookeeper

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的回应

二、数据结构

Zookeeper的数据结构和linux的目录结构类似,也像数据结构中的树,如下图:

data:Znode存储的数据信息ACL:记录Znode的访问权限,即哪些人或哪些IP可以访问本节点child:当前节点的子节点引用,类似于二叉树的左孩子右孩子stat:包含Znode的各种元数据,比如事务ID、版本号、时间戳、大小等等
stat 查看根目录的详细信息:

[zk: localhost:2181(CONNECTED) 0] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

三、选举机制

首先要有一个main()线程在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)通过connect线程将注册的监听事件发送给Zookeeper在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程listener线程内部调用了process()方法

五、API应用

Zookeeper常用的API如下:

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!