1. 服务器角色 (Roles)
ZooKeeper 集群中的服务器主要有三种角色:
1.1 Leader (领导者)
- 核心职责:事务请求的唯一处理者。
- 功能:
- 处理所有的事务请求(写请求),并发起投票。
- 协调集群内所有节点的数据同步。
- 处理读请求。
1.2 Follower (跟随者)
- 核心职责:参与投票,处理读请求。
- 功能:
- 处理非事务请求(读请求),如果收到写请求,会转发给 Leader。
- 参与 Proposal 投票:参与 ZAB 协议的事务提交投票。
- 参与 Leader 选举投票:当 Leader 挂掉时,有资格竞选新 Leader。
1.3 Observer (观察者)
- 核心职责:只提供读服务,不参与投票。
- 功能:
- 处理读请求,转发写请求给 Leader。
- 不参与任何投票(既不参与事务提交,也不参与选举)。
- 存在意义:扩展系统读性能。增加 Follower 会导致投票节点增多,从而拖慢写性能(因为需要更多 ACK)。Observer 可以在不影响写性能的前提下,线性扩展读性能。
2. 服务器工作状态 (States)
服务器在运行过程中,会在以下几种状态间切换:
- LOOKING (寻找状态)
- 服务器处于寻找 Leader 的状态。
- 通常发生在服务器刚启动,或者 Leader 宕机后进行新一轮选举时。
- LEADING (领导状态)
- 当前节点是 Leader。
- 负责广播事务、同步数据。
- FOLLOWING (跟随状态)
- 当前节点是 Follower,且已经和 Leader 建立同步。
- OBSERVING (观察状态)
- 当前节点是 Observer,且已经和 Leader 建立同步。
3. 总结
面试官:ZooKeeper 的服务器有几种角色?Server 有哪些工作状态?
候选人: ZooKeeper 集群主要有三种角色:
- Leader:核心主节点,负责处理所有写请求,协调数据同步。
- Follower:从节点,处理读请求,参与选举和事务投票。
- Observer:观察者,只处理读请求,不参与任何投票。它的作用是扩展读性能而不降低写性能。
对应的,服务器有四种工作状态:
- LOOKING:正在选举 Leader。
- LEADING:我是 Leader。
- FOLLOWING:我是 Follower,正在跟随 Leader。
- OBSERVING:我是 Observer,正在观察 Leader。