Zookeeper的角色有什么,区别是什么

Zookeeper的三种角色也就是Zookeeper服务器的三种节点类型(需要区分这里的“节点”和名字空间中的“节点”):群首(leader),追随者(follower),观察者(observer)。

领导者(leader)
Leader服务器为客户端提供读服务和写服务。Leader作为整个ZooKeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求。它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的FIFO。这里补充一下ZooKeeper的请求类型。对于exists,getData,getChildren等只读请求,收到该请求的zk服务器将会在本地处理,因为由第一讲的ZAB理论可知,每个服务器看到的名字空间内容都是一致的,无所谓在哪台机器上读取数据,因此如果ZooKeeper集群的负载是读多写少,并且读请求分布得均衡的话,效率是很高的。对于create,setData,delete等有写操作的请求,则需要统一转发给leader处理,leader需要决定编号、执行操作,这个过程称为一个事务(transaction)。ZooKeeper事务和关系型数据库事务相似之处是都具备原子性,即整个事务(编号+执行)要么一起成功要么一起失败。另外事务还具备幂等性,即对一个事务执行多次,结果永远都是一致的。但ZooKeeper事务不具备关系型数据库事务的回滚机制,原因是不需要,因为ZAB协议已经保证消息是严格FIFO的,并且只有一个leader实际处理事务。(回忆两阶段提交2PC,之所以需要2PC的原因,归根结底是有不止一个“主”,必须保证这么多“主”看到的结果都是一致的),  另一个重要话题是leader选举,ZAB一章中已经提到有三种选举算法,目前默认的版本是FastLeaderElection,另两种已经被标记为deprecated。其过程如下:
数据恢复阶段:首先,每个ZooKeeper服务器先读取当前保存在磁盘的事务数据,从而得知当前自己能看到的最大zxid
首次发送自己的投票值。在读取数据之后,每个ZooKeeper服务器发送自己提议的leader,这个协议中包含了以下几部分的数据:
          1)所选举leader的id,在初始阶段,每台服务器的这个值都是自己的id
          2)服务器的最大zxid,因为FIFO原则,这个值越大说明该服务器离主越近
          3)逻辑时钟的值,也就是epoch,每次选举leader这个值会加1

学习者(learner)

跟随者(follower)
Follower服务器为客户端提供读服务,参与Leader选举过程,参与写操作“过半写成功”策略。Follower的逻辑就比较简单了。除了响应本服务器上的读请求外,follower还要处理leader的提议,并在leader提交该提议时在本地也进行提交。Follower处理提议的过程已经在ZAB一章中描述过了。
    另外需要注意的是,leader和follower构成ZooKeeper集群的法定人数,也就是说,只有他们才参与新leader的选举、响应leader的提议。
观察者(observer)
Observer服务器为客户端提供读服务,不参与Leader选举过程,不参与写操作“过半写成功”策略。用于在不影响写性能的前提下提升集群的读性能。如果ZooKeeper集群的读取负载很高,或者客户端多到跨机房,可以设置一些observer服务器,以提高读取的吞吐量。Observer和Follower比较相似,只有一些小区别:首先observer不属于法定人数,即不参加选举也不响应提议;其次是observer不需要将事务持久化到磁盘,一旦observer被重启,需要从leader重新同步整个名字空间。
客户端(client)
服务请求发起方。

Zookeeper的角色的状态:

LOOKING:当前Server未知集群中的Leader,并且正在寻找。
LEADING:当前Server即为选举出来的Leader。
FOLLOWING: 当前Follower已与选举出来的Leader同步。
OBSERVING:当前Observer已与选举出来的Leader同步。

Zookeeper中的请求:
事务请求:在Zookeeper中,会改变服务器状态的请求称为事务请求(包括:创建节点、更新数据、删除节点、创建会话等) 。
非事务请求:从Zookeeper仅仅读取数据,不会对服务器数据状态进行任何修改的请求称为非事务请求。

Zookeeper的角色的作用:

Leader的作用:在ZAB崩溃恢复之后,消息广播之前,进行集群中的数据同步,维持与Learner的心跳,接收Learner请求消息,并据不同的消息类型,进行不同的处理。
Learner处理的消息类型包括:PING消息、REQUEST消息、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请求结果

ollower的消息循环处理以下来自Leader的消息 (1)PING消息:心跳消息;(2)PROPOSAL消息:Leader发起的提案,要求Follower投票;(3)COMMIT消息:服务器端最新一提案的信息;(4)UPTODATE消息:表示同步完成;(5)REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;(6)SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的数据更新;

Observer的作用:Observer角色除了不参与Leader选举和Proposal投票外,与Follower的作用相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值