Zookeeper简介及核心概念
文章目录
- Zookeeper简介及核心概念
-
- 一、Zookeeper简介
- 二、Zookeeper设计目标
-
- 2.1 目标一:简单的数据模型
- 2.2 目标二:构建集群
- 2.3 目标三:顺序访问
- 2.4 目标四:高性能高可用
- 三、核心概念
-
- 3.1 集群角色
- 3.2 会话
- 3.3 数据节点
- 3.4 节点信息
- 3.5 Watcher
- 3.6 ACL
- 四、ZAB协议
-
- 4.1 ZAB协议与数据一致性
- 4.2 ZAB协议的内容
-
- 1. 崩溃恢复
- 2. 消息广播
- 五、Zookeeper的典型应用场景
-
- 5.1 数据的发布/订阅
- 5.2 命名服务
- 5.3 Master选举
- 5.4 分布式锁
- 5.5 集群管理
- 参考资料
一、Zookeeper简介
Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护。Zookeeper 可以用于实现分布式系统中常见的发布/订阅、负载均衡、命令服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。它具有以下特性:
- 顺序一致性:从一个客户端发起的事务请求,最终都会严格按照其发起顺序被应用到 Zookeeper 中;
- 原子性:所有事务请求的处理结果在整个集群中所有机器上都是一致的;不存在部分机器应用了该事务,而另一部分没有应用的情况;
- 单一视图:所有客户端看到的服务端数据模型都是一致的;
- 可靠性:一旦服务端成功应用了一个事务,则其引起的改变会一直保留,直到被另外一个事务所更改;
- 实时性:一旦一个事务被成功应用后,Zookeeper 可以保证客户端立即可以读取到这个事务变更后的最新状态的数据。
二、Zookeeper设计目标
Zookeeper 致力于为那些高吞吐的大型分布式系统提供一个高性能、高可用、且具有严格顺序访问控制能力的分布式协调服务。它具有以下四个目标:
2.1 目标一:简单的数据模型
Zookeeper 通过树形结构来存储数据,它由一系列被称为 ZNode 的数据节点组成,类似于常见的文件系统。不过和常见的文件系统不同,Zookeeper 将数据全量存储在内存中,以此来实现高吞吐,减少访问延迟。

2.2 目标二:构建集群
可以由一组 Zookeeper 服务构成 Zookeeper 集群,集群中每台机器都会单独在内存中维护自身的状态,并且每台机器之间都保持着通讯,只要集群中有半数机器能够正常工作,那么整个集群就可以正常提供服务。

2.3 目标三:顺序访问
对于来自客户端的每个更新请求,Zookeeper 都会分配一个全局唯一的递增 ID,这个 ID 反映了所有事务请求的先后顺序。
2.4 目标四:高性能高可用
ZooKeeper 将数据存全量储在内存中以保持高性能,并通过服务集群来实现高可用,由于 Zo