利用 ZooKeeper 生成全局唯一 ID 是一种经典且可靠的方法。其核心思想是利用 ZooKeeper 的顺序节点 和 临时节点 特性来生成一个不会重复的、可排序的 ID。 下面我将从原理、具体实现方案、代码示例以及优缺点等方面进行详细阐述。 核心原理 1. 顺序节点:当在 ZooKeeper 中创建一个节点时,如果指定其类型为 (持久顺序节点)或 (临时顺序节点),ZooKeeper 会自动在节点路径后附加一个单调递增的序列号(例如 可能会变成 )。这个序列号由 ZooKeeper 服务器集群统一维护,保证在同一个父节点下是唯一的。 2. 高可用性:ZooKeeper 本身是一个集群(Ensemble),通过 ZAB 协议保证了数据的一致性。因此,即使部分服务器宕机,生成的 ID 也不会重复。 3. 时钟同步:ZooKeeper 的序列号是基于其服务器自身的逻辑时钟生成的,不依赖于客户端的系统时间,避免了因客户端时间回拨导致 ID 重复的问题。 --- 常见的实现方案 主要有两种模式:简单顺序节点模式 和 分段缓存模式。 方案一:简单顺序节点模式(最直接) 这是最基础、最容...