学习Hadoop——Zookeeper 介绍(2)

工作流程

Leader工作流程

Leader 主要有三个功能:

1.恢复数据

2.维护与Leader的心跳,接收Learner 请求并判断Learner 的请求消息类型

3.Learner 的消息类型主要有PING 消息、REOUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理

 PING 消息是指Learner的心跳信息:REQUEST消息是Follower 发送的提议信息,包括写请求及同步请求;ACK消息是Follower对提议的回复,超过半数的Follower 通过,则commit 该提议;REVALIDATE 消息用来延长SESSION 有效时间。

Follower 工作流程

Follower 主要四个功能;

1.向Leader 发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE 消息)

2.接收Leader 消息并进行处理

3.接收Client 的请求,如果为写请求,就发送给Leader 进行投票

4.返回Client 结果

 

Follower 的消息循环处理以下几种来自于Leader 的消息;

1.PING 消息:心跳消息

2.PROPOSAL消息:Leader 发起提案,要求Follower 投票

3.commit 消息:服务器端最新一次提案的信息

4.UPTODATA消息:表明同步完成

5.REVALIDATE消息:根据Leader 的REVALIDATE 结果,决定是关闭等待REVALIDATE的SESSION 还是允许其接受消息

6.SYNC消息:返回SYNC结果到客户端,该消息最初由客户端发起,用来强制得到最新的更新。

Zookeeper 数据模型

Zookeeper 数据模型Znode

Zookeeper 拥有一个层次的命名空间,这和标准的文件系统非常相似,Zookeeper 的数据模型在结构上和标准文件的非常相似,都是采用树行层次结构,Zookeeper 树中的每个节点被称为Znode 。和文件系统的目录树一样,Zookeeper 树中每个节点可以拥有子节点。但标准文件系统也有不同之处,表现在

1.引用方式

Znode 通过路径引用,如同Linux 中的文件路径,路径必须有斜杠来开头。除此之外,路径必须是惟一的,在Zookeeper 中,路径是由Unicode 字符串组成,并且有一些限制。字符串“/Zookeeper"用以保存管理信息,比如关键配额信息。

2.Znode 结构

Zookeeeper 命名空间中的Znode 兼具文件和目录两种特点。既像文件一样维护着数据,元信息,ACL,时间戳等数据结构,又像目录一样作为路径标识的一部分。每个Znode 由3个部分组成:

  1.stat:描述该Znode 的版本,版权等信息

  2.data:与该Znode 关联的数据

  3.children:该Znode 下的子节点

Zookeeper 虽然可以关联一些数据,但没有被设计为常规的数据库或者大数据存储,相反,它是用来管理调度数据,比如分布式应用中的配置文件信息,状态信息,汇集位置等。这些数据的共同特征就是他们都很小,通常以KB为单位。Zookeeper 的服务器和客户端都被设计为严格检查并限制为每个Znode 的数据大小至多1M,但实际使用中要远小于此值。

3.数据访问

Zookeeper 中的每个节点存储的数据都要被原子性操作,。每个节点都拥有自己的ACL ,这个列表规定了用户的权限,却限制了特定用户对目录节点可以执行的操作。

4.节点类型

Zookeeper 中的节点有两种,分别为临时节点和永久节点。节点类型在创建过程是即被确定,并且不能被改变。

临时节点:该节点的生命周期依赖于他们创建的会话。一旦会话结束,临时节点将自动删除,或者也可以手动删除。虽然每个临时的Znode 都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,Zookeeper 的临时节点不允许拥有子节点。

永久节点:该节点的生命不依赖于会话,并且只有在客户端显式的执行删除的时候,这些节点才能删除。

5.顺序节点

当创建Znode 的时候,用户可以请求Zookeeper 的路径结尾添加一个递增的计数,这个计数对于此节点的父节点来说是惟一的,它的格式为“%10d”(10位数字,没有数值的数位用0补充)

6.监视器

客户端可以在节点上设置watch ,称为监视器。当节点状态发生改变时(Znode的增,删,改)将会触发watch 所对应的操作。当watch 被触发时,Zookeeper 将会向客户端发送且发送一条通知,因为watch 只会被触发一次,这样可以减少网络流量。

Zookeeper 中的时间

zookeeper 有多种记录时间形式,其中包括以下几种属性:

1.Zxid 

  使得Zookeeper 节点状态改变的每一个操作都将使得节点接收到一个Zxid 格式的时间戳,并且这个时间戳全部有序。czxid是节点的创建所对应的zxid 格式时间戳。mzxid 是修改节点所对应的zxid 格式时间戳。

Zxid 是一个64位的数字,它高32位是epoch 用来标识leader 关系是否改变,每次一个Leader 被选出来,都会有一个新的epoch,低32位是一个递增计数。

2.版本号

对于每个节点操作都会将致使这个节点的版本号增加。每个节点维护着是哪个版本号,它们分别为:

   1.version :节点数据版本号

   2.cversion:子节点版本号

   3.aversion:节点所拥有的ACL 版本号

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值