Zookeeper原理讲解

ZooKeeper定义

ZooKeeper是一项集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。 ZooKeeper简单,分布式,可靠且快速。微服务系统的协调服务。

· 维护配置信息:

它维护集群配置信息,该信息在集群中的所有节点之间共享。

· 命名:

Zookeeper可以用作命名服务,以便集群中的一个节点可以在大型集群中找到另一个节点,例如:1000个节点集群

· 提供分布式同步:

我们还可以使用Zookeeper通过使用锁,队列等来解决集群中的分布式同步问题。

· 提供群组服务:

Zookeeper还可以通过选择集群中的主机来帮助进行群组服务(领导者选举过程)。

ZooKeeper可以在复制模式和独立模式下工作。

Zookeeper的角色

  » 领导者(leader),负责进行投票的发起和决议,更新系统状态

  » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票

  » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

  » 客户端(client),请求发起方

 

 

 • Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协

     议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者

   崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后

    ,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

  • 为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(

   proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识

     leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的

   统治时期。低32位用于递增计数。

  • 每个Server在工作过程中有三种状态:

    LOOKING:当前Server不知道leader是谁,正在搜寻

    LEADING:当前Server即为选举出来的leader

    FOLLOWING:leader已经选举出来,当前Server与之同步

Zookeeper 的读写机制

  » Zookeeper是一个由多个server组成的集群

  » 一个leader,多个follower

  » 每个server保存一份数据副本

  » 全局数据一致

  » 分布式读写

  » 更新请求转发,由leader实施

Zookeeper 的保证 

  » 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

  » 数据更新原子性,一次数据更新要么成功,要么失败

  » 全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的

  » 实时性,在一定事件范围内,client能读到最新数据

Zookeeper节点数据操作流程

 

注:1.在Client向Follwer发出一个写的请求

      2.Follwer把请求发送给Leader

      3.Leader接收到以后开始发起投票并通知Follwer进行投票

      4.Follwer把投票结果发送给Leader

      5.Leader将结果汇总后如果需要写入,则开始写入同时把写入操作通知给Follwer,然后commit;

      6.Follwer把请求结果返回给Client

• 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 .UPTODATE消息:表明同步完成;

    • 5 .REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;

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

Zookeeper leader 选举  

  • 半数通过

    – 3台机器 挂一台 2>3/2

    – 4台机器 挂2台 2!>4/2

zxid

  • znode节点的状态信息中包含czxid, 那么什么是zxid呢?

  • ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id, 该id称为zxid. 由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2发生. 

   创建任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值