答案
Zookeeper 是一个开源的分布式协调服务,由 Apache 基金会维护,主要用于解决分布式应用中的协调问题。
核心特性
- 一致性保证:Zookeeper 提供强一致性保证,确保所有客户端看到的数据视图是一致的
- 可靠性:通过 ZAB 协议保证数据的高可用性和持久性
- 简单性:提供类似文件系统的层次化命名空间,易于理解和使用
- 高性能:读操作性能优异,适合读多写少的场景
数据模型
Zookeeper 使用类似文件系统的树形结构存储数据:
- ZNode:Zookeeper 中的数据节点,每个节点称为 ZNode
- 路径:使用斜杠分隔的路径标识节点,如
/app/config - 数据:每个 ZNode 可以存储少量数据(通常不超过 1MB)
- 版本:每个节点维护多个版本号(dataVersion、cversion、aversion)
ZNode 类型
- 持久节点:节点创建后一直存在,除非显式删除
- 临时节点:绑定客户端会话,会话结束后自动删除
- 持久顺序节点:持久节点基础上自动添加序号后缀
- 临时顺序节点:临时节点基础上自动添加序号后缀
应用场景
- 配置中心:集中管理应用配置,支持动态更新
- 服务注册与发现:实现微服务架构中的服务治理
- 分布式锁:实现跨进程的互斥访问控制
- 分布式协调:实现 Leader 选举、Barrier 等协调机制
- 命名服务:提供分布式环境下的唯一标识生成
工作原理
Zookeeper 集群由多个 Server 组成,通常采用奇数个节点(3、5、7等):
- Leader:处理写请求,协调数据一致性
- Follower:处理读请求,参与 Leader 选举
- Observer:只处理读请求,不参与选举(提升读性能)
客户端连接到任意 Server,通过 TCP 长连接进行通信,支持 Watcher 机制实现事件通知。