基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

ZooKeeper 中Follower 和 Observer 的区别是什么?

知识点图片

在 ZooKeeper 集群中,FollowerObserver 都是用来处理客户端读请求并同步 Leader 数据的角色,但它们在投票权对写性能的影响上有本质的区别。

简单来说:Observer 是没有投票权的 Follower。

以下是详细的区别对比:

1. 核心区别:投票权 (Voting Rights)

这是两者最根本的区别。ZooKeeper 使用 ZAB 协议(ZooKeeper Atomic Broadcast)来保证数据一致性,这涉及到两个场景的投票:

  • Follower:拥有投票权。
    • 写请求投票: 当 Leader 收到写请求(Proposal)时,Follower 会参与投票。只有收到半数以上(Quorum)节点的 ACK,Leader 才会提交该事务。
    • 选举投票: 当 Leader 挂掉时,Follower 会参与新 Leader 的选举投票。
  • Observer:没有投票权。
    • 它不参与写请求的“过半数”确认过程。
    • 它不参与 Leader 的选举过程。
    • 它仅仅是“观察” Leader 的状态,并接收 Leader 发送的 INFORM 消息来同步数据。

2. 对写性能的影响 (Write Performance)

由于 ZooKeeper 的写操作需要集群中“过半数”节点确认才能成功,集群规模的大小直接影响写性能。

  • Follower: 增加 Follower 的数量会降低写性能。
    • 原因:Leader 需要等待更多的 Follower 反馈 ACK,网络通信和同步的开销变大。
  • Observer: 增加 Observer 的数量不影响写性能。
    • 原因:Leader 不需要等待 Observer 的确认,只要核心的 Leader + Followers 构成的法定人数(Quorum)确认即可。

3. 对读性能的影响 (Read Performance)

  • Follower & Observer: 两者都能提升读性能。
    • 客户端可以直接连接 Follower 或 Observer 进行读取。增加这两类节点都可以分担读流量,提高集群的并发读能力。

4. 可用性与容灾 (Availability)

  • Follower: 影响集群的可用性。
    • ZooKeeper 集群存活的条件是“剩余节点数 > N/2”。如果过多的 Follower 挂掉,导致存活节点不足半数,集群将停止服务。
  • Observer: 不影响集群的可用性(只要 Leader 和 Follower 正常)。
    • Observer 挂掉不会影响集群的运行,只会减少提供读服务的节点数量。

总结对比表

特性 Follower Observer
处理读请求
处理写请求 转发给 Leader 转发给 Leader
参与写操作投票 (计入 Quorum)
参与 Leader 选举
增加节点对写性能影响 降低 无影响
增加节点对读性能影响 提升 提升
适用场景 构建核心高可用集群 跨机房部署、读多写少需极高并发读取的场景

为什么需要 Observer?

引入 Observer 主要是为了解决 “扩展性” (Scalability) 问题。

在没有 Observer 之前,如果你想提高 ZooKeeper 的读吞吐量,必须增加 Follower。但增加 Follower 会导致写操作变慢(因为投票节点多了)。这造成了“读性能”和“写性能”的矛盾。

Observer 打破了这种矛盾: 它允许你在不牺牲写性能的前提下,通过无限增加 Observer 节点来线性扩展读性能。此外,Observer 非常适合跨数据中心(跨机房)部署,因为它们不需要参与高延迟的跨机房投票过程,却能提供本地读取服务。

00:00
00:00