1. Zookeeper 特点

一个分布式协调服务
- **顺序一致性**：从同一客户端发起事务请求，最终会严格按照顺序应用到 ZooKeeper 中
- **原子性**：所有事务请求的处理结果在整个集群中所有机器的应用情况是一致的
- **单一系统映像**：无论客户端连接到哪一个 Zookeeper 服务器上，看到的服务的数据模型是一致的
- **可靠性**：一旦一次更改请求被应用，更改结果就会持久化

2. Zookeeper 应用场景

- **命名服务**：可利用 Zookeeper 的顺序节点生产全局唯一 ID
- **数据发布/订阅**：通过 Watcher 机制可以很方便的实现数据发布/订阅
- **分布式锁**：通过创建唯一节点获取分布式锁，当获得锁执行完之后或挂掉就释放锁

3. 重要概念
	1. Date model

	采用层次化的多叉树形结构，每个节点可以存储数据，可以拥有n个子节点，每个数据节点成为znode

	2. znode
	
	每个数据节点都是znode
	- **持久类**：一旦创建就一直存在直到删除
	- **临时节点**：临时节点生民周期与session绑定，会话消失节点消失，只能做叶子节点
	- **持久顺序节点**：除了持久节点特点外还有顺序性
	- **临时顺序节点**：除了临时节点特性外还有顺序性

	组成：
	- **stat**：状态信息
	- **data**：节点存放的具体内容

	3. version

	stat中记录的三个相关版本
	- **dataVerdion**：当前znode节点的版本号
	- **cverdion**：当前znode子节点的版本
	- **alcVsersion**：当前znode的ACL版本

	4. ACL

	使用 ACL 进行权限控制
	- **CREATE**：
	- **READ**：
	- **WRITE**：
	- **DELETE**：
	- **ADMIN**：

	cerate和delete都是针对子节点的权限控制

	5. Watcher

	允许用户在指定节点上注册一些Watecher，当一些事件触发后，将事件通知到感兴趣的客户端上

	6. Session

	服务器与客户端的一个TCP长连接，每一个sessionID都是唯一分配个每个客户端的

4. Zookeeper 集群
	1. 集群角色

	`Leader`：为客户端提供读和写服务，负责投票发起和决议，更新系统状态,
	`Follower`：为客户端提供读服务，写服务转发给Leader，擦浴选举投票,
	`Observer`：提供读服务，不参与“过半写成功”策略，不参与投票，提高写性能，
	集群之间通过ZAB协议保持数据一致性

	2. Leader 选举过程

	- **选举阶段**：一开始都是选举阶段，一个节点获得半数就当选准 Leader
	- **发现阶段**：followers跟准leader通信，同步follower最近接受的事务提议
	- **同步阶段**：利用leader前一阶段获得的最新提议历史，同步集群中所有副本，同步完成之后准leader变为真正leader
	- **广播阶段**：Zookeeper 可以正式对外提供事务服务，leader 可以进行消息广播，新节点加入对新节点进行同步

	服务器状态：
	- **LOOKING**
	- **LEADING**
	- **FOLLOWING**
	- **OBSERVING**

	3. 集群为啥最好奇数台

	保持超过过半才可用，偶数是增加了一个不需要的节点

	4. 选举过半机制防止脑裂



5. [[ZAB协议]]和 [[Paxos算法]]

6. 一致性问题



7. 一致性协议和算法

	1. 2 PC



	2. 3 PC



	3. Paxos 算法



8. 引出 ZAB



9. 几个理论知识



10. 几个典型应用场景


