# Zookeeper源码分析-Zookeeper角色

- URL: https://www.yidoo.xyz/zookeeper-server-roles
- 作者: 核动力蜗牛
- 发布时间: 2014-10-17
- 更新时间: 2014-10-17
- 分类: Zookeeper源码分析
- 标签: zookeeper

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

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

Follower 与 Observer 并称为 Learner。

![zookeeper-server-roles](https://www.yidoo.xyz/images/7fd35e068630dc2382f15e5fa95d66a0.png)

# Leader

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

- 恢复数据；
- 维持与 Learner 的心跳，接收 Learner 请求并判断 Learner 的请求消息类型；

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

![leader-workflow](https://www.yidoo.xyz/images/941a5d1197da6349d89426393a9ceab1.jpg)

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

# Follower

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

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

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

![follower-workflow](https://www.yidoo.xyz/images/98ebd3901bcd98d85bd1d0c74e74a786.jpg)

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

# Observer

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