zookeeper概念
zookeeper 是个分布式协调服务的开源框架,解决分布式集群中应用系统的一致性问题
避免同时操作同一数据造成脏读问题
zookeeper 本质是一个分布式的小型文件存储系统,提供类似文件系统的目录树方式进行数据存储,并且对树中的节点进行有效管理,维护存储数据的状态变化
可以做基于数据的集群管理,如:统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等功能
zookeeper 特性
- 全局数据一致性
- 可靠性,消息被一台服务器接收,其他机器上的节点也会接收(删除一个节点的数据,其他节点也被删除该数据)
- 顺序性: 一台服务器中 a消息在 b之前发布,其他所有server 的a,b顺序也必须是 a在 b前
- 数据更新原子性: 有要吗成功(半数以上节点成功),要吗失败,没有中间状态
- 实时性: zookeeper 保证客户端在一个时间间隔内获得服务器更新信息,或者服务器失效信息
事务请求(写操作): 用 leader进行调度处理,保证事务处理的顺序性;
集群内部的各个服务的调度者:对于 create,setData,delete等写操作,转发给 leader,由leader决定编号,执行操作,这个过程叫做一个事务
follower:
处理客户端的非事务(读操作)请求,转发事务请求给 leader
参与集群 leader的选举投票
如果某个 leader挂了,或者加入一个新的节点,就会投票选举一个新的leader
有3种角色:
- leader
- follower
- Observer(观察者)
当访问量比较大的话,可以加入观察者进行横向扩展, 它不会参与任何形式的投票,只是提供非事务的服务,不影响集群事务处理能力的前提下,提升集群处理非事务处理的能力
客户端的响应会更加友好
zookeeper集群的搭建
zookeeper 集群搭建指的是zookeeper分布式模式的安装,通常由 2*N+1 台 servers组成,这是为了保证leader的选举(基于 paxos算法的实现
关于 paxos算法 [ https://blog.csdn.net/u013679744/article/details/79222103 ]
Session 会话: 客户端会话,客户端和服务端建立一个 TCP 长连接 org.apache.zookeeper.ClientCnxn
zookeeper数据结构
状态属性 | 说明 |
czxid | 节点创建时的zxid |
mzxid | 节点最新一次更新发生时的 zxid |
ctime | 节点创建时的时间戳. |
mtime | 节点最新一次更新发生时的时间戳. |
dataVersion | 节点数据的更新次数. |
cversion | 其子节点的更新次数 |
aclVersion | 节点 ACL(授权信息)的更新次数. |
ephemeralOwner | 如果该节点为 ephemeral 节点, ephemeralOwner 值表示与该节点绑定的 session id. 如果该节点不是 ephemeral 节点, ephemeralOwner 值为 0. 至于什么是 ephemeral 节点 |
dataLength | 节点数据的字节数. |
numChildren | 子节点个数. |
顺序号:
创建znode 时设置顺序标识,znode名称后会附加一个值
顺序号是一个单调递增的计数器,由父节点维护
在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
控制访问列表: ACL( Access control list)
org.apache.zookeeper.ZooDefs
内置的 ACL schemes:
world: 默认方式,相当于全世界都能访问
auth: 代表已经认证通过的用户(cli中可以通过 addauth digest user:pwd 来添加当前上下文中的授权用户)
digest: 即用户名: 密码这种方式认证,这也是业务系统中最常用的
ip: 使用 ip地址认证
acl支持权限:
create: 能创建子节点
read: 能获取节点数据和列出其子节点
write: 能设置节点数据
delete:能删除子节点
admin: 能设置权限
Leader 选举:
looking,following ,leading ,observing
cap理论:
分布式领域 CAP 理论
Consistency(一致性), 数据一致更新,所有数据变动都是同步的;
Availability(可用性), 好的响应性能;
Partition tolerance(分区容忍性) ;可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾
一致性协议 :
BASE/Paxos/Raft/zab 等协议
zab算法: https://www.jianshu.com/p/400a44edee88