《Zookeeper》源码分析(二十)之 Follower

Follower

Leader选举结束后,成为Follower的服务器开始进行Follower的工作,过程如下:
在这里插入图片描述

Leader的过程类似,第一步创建Follower实例,第二步开始执行工作followerLeader()

创建Follower实例

在这里插入图片描述

followLeader()

LeaderLearnerHandler中,当LeaderFollower建立连接后发生的工作流程如下:
在这里插入图片描述

在LearnerHandler的run()方法中我们已经分析了左边Leader的工作,Follower的followLeader()方法则是右边的工作,源码过程如下:
在这里插入图片描述

接下来具体分析第1步~第4步,第5步则会在后文具体请求时再分析。

findLeader()

在这里插入图片描述

connectToLeader()

在这里插入图片描述

在这一步中最关键的是设置了leaderIs与leaderOs,后续Follower与Leader收发信息时都直接使用这两个变量。

registerWithLeader()

当Follower与Leader成功建立连接后,Follower就开始向Leader注册自己的信息,在这个过程中包括发送身份信息、确认epoch
在这里插入图片描述

syncWithLeader()

当Follower与Leader确认完选举轮次epoch之后就要开始进行数据同步:

  1. 首先收到来自Leader的一个确认同步类型的包,即差异化同步DIFF、全量同步SNAP、回滚同步TRUNC
  2. 接收来自Leader的数据,即PROPOSAL,每一个PROPOSAL之后跟随一个COMMIT
  3. 数据同步结束后会收到NEWLEADER包,确认Leader
  4. Leader确认结束之后会收到UPTODATE,表明Follower已经与Leader同步,可以开始处理来自客户端的请求

源码过程如下:
在这里插入图片描述

Follower的初始化工作介绍到此结束。

FollowerZooKeeperServer

它的作用与LeaderLeaderZooKeeperServer类似,所以我们只介绍它定义的Processor
在这里插入图片描述

FollowerRequestProcessor:它的工作主要是识别出当前请求是否为事务请求,如果是事务请求,在提交给CommitProcessor后会继续将其发送给Leader进行处理。

SendAckRequestProcessor:在SyncRequestProcessor完成事务日志记录后会通过SendAckRequestProcessor向Leader发送对Proposal的反馈信息,与Leader的AckRequestProcessor本地操作不同,它是一个远程反馈。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值