这是一个非常好的问题,它触及了 ZooKeeper 核心设计理念的关键点。简单来说,ZooKeeper 的写操作必须由 Leader 处理,是为了保证整个分布式系统数据的强一致性和线性一致性。 下面我们从几个层面来详细解释为什么必须这样做: 1. 核心目标:强一致性 ZooKeeper 的设计目标不是高吞吐或高可用(虽然它也具备这些特性),而是提供强一致性 的服务。这意味着: 全局有序:所有客户端看到的更新顺序都是完全一致的。 线性一致性:一个写操作一旦完成,后续的所有读操作都必须能读到这个新值。 为了实现这个目标,ZooKeeper 采用了 ZAB 协议,而 ZAB 协议的核心就是一个主从架构,其中 Leader 扮演着至关重要的角色。 --- 2. ZAB 协议与 Leader 的角色 ZAB 协议是 ZooKeeper Atomic Broadcast 的缩写,它定义了 Leader、Follower 和 Observer 之间的通信规则。Leader 在其中的作用至关重要: a) 唯一的事务发起者 当客户端发起一个写请求(如 , , )时,这个请求首先会被发送到任意一个 ...