今天我们通过下面几张图来了解下Zookeeper的内部工作流程是咋样的,在讲工作流程之前我们先了解下Zookeeper的角色。
一、Zookeeper的角色
Zookeeper主要有下面两种角色,领导者和学习者,其中学习者又包含跟随者和观察者。我们直接看图理解,我们直接看图理解,这是一个由多个server组成的集群,一个leader,多个follower,每个server保存一份数据副本,全局数据一致,分布式读写。
- 领导者(Leader),领导者负责进行投票的发起和决议,更新系统状态。
- 学习者(Learner),跟随者(Follower)和观察者(Observer)。
- 跟随者(Follower),Follower可以接收客户端的请求并返回结果,并参与主过程的投票。
- 观察者(Observer),Observer可以接收客户端的请求,写请求会转发给Leader节点,但不参与投票,主要是扩展系统的读取速度。
二、Zookeeper的工作流程
- 首先client向Follwer发出一个写的请求;
- Follwer会把请求发送给Leader;
- Leader接收到以后开始发起投票并通知Follwer进行投票;
- Follwer把投票结果发送给Leader;
- Leader将结果汇总后如果需要写入,则开始写入同时把写入操作通知给Leader,然后commit;
- Follwer把请求结果返回给client。
通过上面的工作流程,我们可以看出Follower主要有以下四个功能,
- 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
- 接收Leader消息并进行处理;
- 接收Client的请求,如果为写请求,发送给Leader进行投票;
- 返回Client结果。
综合看来,Zookeeper的工作流程还是挺清晰的,follower主要是转发请求、参与投票、返回投票结果;leader则主要是发起投票决议,更新系统状态。