初识Zookeeper
Zookeeper介绍
Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群关联、Master选举、分布式锁和分布式队列等功能
- 顺序一致性
从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到ZooKeeper中 - 原子性
所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的 - 单一视图
客户端无论连接哪个ZooKeeper,其看到的服务端数据模型都是一致的 - 可靠性
- 实时性
ZooKeeper仅仅保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态
ZooKeeper的基本概念
集群角色:
- 在传统的分布式系统中,构成集群的每一台机器都有自己的角色,最典型的就是Master/Slave模式。
- 但在ZooKeeper中,这些概念被颠覆了。它引入了Leader/Follower/Observer三种角色。(感觉类似Redis的集群模式,Redis在集群模式下,有哨兵进行监督)
会话:
- 当由于服务器压力过大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在sessionTimeout规定时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。
数据节点
- 构成集群的机器,机器节点
- 数据模型中的数据单元——数据节点(这个暂时不清楚是指什么)
版本
Watcher
- Watch(事件的监听器)。zookeeper运行用户在指定节点上注册一些watcher,并且在一些特殊事件触发时,ZooKeeper服务端会将事件通知到感兴趣的客户端上
ACL Access Control List来进行权限控制,类似Linux上的权限
Zab算法
ZAB特性
- 一致性保证
a. 可靠性提高,如果一个事务被一个server提交(commited),那么它最终一定会被所有server提交
b. 全局有序,假设有A、B事务,有一台server先执行A再执行B,那么最终可以保证所有server上A始终都在B之前执行
c. 因果有序,如果发送者在事务A提交之后再发送B,那么B必将再A之前执行