异度部落格

学习是一种生活态度。

0%

Zookeeper源码分析-Zookeeper角色

在 Zookeeper 集群中,主要分为三者角色,而每一个节点同时只能扮演一种角色,这三种角色分别是:

  • Leader:接受所有 Follower 的提案请求并统一协调发起提案的投票,负责与所有的 Follower 进行内部的数据交换(同步);
  • Follower:直接为客户端服务并参与提案的投票,同时与 Leader 进行数据交换(同步);
  • Observer:直接为客户端服务但并不参与提案的投票,同时也与 Leader 进行数据交换(同步);

Follower 与 Observer 并称为 Learner。

zookeeper-server-roles

Leader

在 Zookeeper 集群中,只有一个 Leader 节点,其主要职责:

  • 恢复数据;
  • 维持与 Learner 的心跳,接收 Learner 请求并判断 Learner 的请求消息类型;

Leader 的工作流程简图如下所示,在实际实现中,流程要比下图复杂得多,启动了三个线程来实现功能。

leader-workflow

PING:Learner 的心跳。
REQUEST:Follower 发送的提议信息,包括写请求及同步请求。
ACK:Follower 的对提议的回复,超过半数的 Follower 通过,则 commit 该提议。
REVALIDATE:用来延长 SESSION 有效时间。

Follower

在 Zookeeper 集群中,follower 可以为多个,其主要职责:

  • 向 Leader 发送请求;
  • 接收 Leader 的消息并进行处理;
  • 接收 Zookeeper Client 的请求,如果为写清求,转发给 Leader 进行处理

Follower 的工作流程简图如下所示,在实际实现中,Follower 是通过 5 个线程来实现功能的。

follower-workflow

PING:心跳消息。
PROPOSAL:Leader 发起的提案,要求 Follower 投票。
COMMIT:服务器端最新一次提案的信息。
UPTODATE:表明同步完成。
REVALIDATE:根据 Leader 的 REVALIDATE 结果,关闭待 revalidate 的 session 还是允许其接受消息。
SYNC:返回 SYNC 结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。

Observer

此处 Observer 就不再分析,其与 follower 基本相同,唯一不同就在于 Observer 不参与投票。