为了账号安全,请及时绑定邮箱和手机立即绑定

zookeeper工作原理(详细)

标签:
Java

» 领导者(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与之同步

  其他文档:http://www.cnblogs.com/lpshou/archive/2013/06/14/3136738.html

2、Zookeeper 的读写机制

  » Zookeeper是一个由多个server组成的集群
  » 一个leader,多个follower
  » 每个server保存一份数据副本
  » 全局数据一致
  » 分布式读写
  » 更新请求转发,由leader实施

3、Zookeeper 的保证 

  » 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
  » 数据更新原子性,一次数据更新要么成功,要么失败
  » 全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的
  » 实时性,在一定事件范围内,client能读到最新数据

4、Zookeeper节点数据操作流程

      

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

      2.Follwer把请求发送给Leader

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

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

      5.Leader将结果汇总后如果需要写入,则开始写入同时把写入操作通知给Leader,然后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结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消