《从Paxos到ZooKeeper》第七章总结一:ZooKeeper技术内幕之系统模型

1 系统模型

1.1 数据模型

视图结构类似一棵树,每个数据节点称为ZNode,是ZooKeeper中数据的最小单元
在这里插入图片描述
事务ID:ZXID
在这里插入图片描述

1.2 数据节点特性

分为持久节点、临时节点、顺序节点,可以组成生成以下四种:
在这里插入图片描述
数据节点保存的内容:存储数据内容和数据节点本身的一些状态信息,如事务ID、版本信息、子节点个数等
在这里插入图片描述

1.3 版本-保证分布式数据原子性操作

数据节点具有三种类型的版本信息:
在这里插入图片描述
对数据节点的任何更新操作就会引起版本号的变化,即版本表示修改次数

  • version

含义:表示当前节点自从创建之后,被更新的次数(数据一样的更新也算),从0开始计算

作用:实现乐观锁机制的”写入校验“(乐观锁有数据读取、写入校验、数据写入三阶段)
在这里插入图片描述
数据更新时乐观锁的实现:
在这里插入图片描述

1.4 Watcher-数据变更的通知

流程:
在这里插入图片描述

1.4.1 Watcher接口

通知状态和事件类型:
在这里插入图片描述

1.4.2 Watcher事件

常见事件类型和通知状态
在这里插入图片描述

1.4.3 回调方法process()

process方法Watcher接口中的一个回调方法
在这里插入图片描述
WatchedEvent封装了服务端事件并传递给Watcher:
在这里插入图片描述

1.4.4 工作机制

三个过程:客户端注册Watcher、服务器处理Watcher、客户端回调Watcher

  • 客户端注册Watcher
    在这里插入图片描述
    标记request为”使用Watcher监听“

WatchRegistration用于暂时保存数据节点的路径和Watch的对应关系

设计思想:非完全序列化:传输WatchRegistration时,只序列化了requestHeader和request属性,减轻服务端内存紧张问题

  • 服务端处理Watcher

流程图:
在这里插入图片描述

1.服务端接收Watcher并将其存储起来的过程

可以把request对应的ServerCnxn看作是一个Watcher对象,数据节点的节点路径和ServerCnxn最终会被存储在WatchManager的watchTable和watch2Paths中:
在这里插入图片描述
ServerCron是一个ZooKeeper客户端和服务器之间的连接接口,代表一个客户端和服务器的连接,基于Netty实现,实现了Watcher的process接口

2.服务端触发Watch的过程

Watcher监听的对应数据节点的数据内容发送变更,即调用了setData方法,此方法会调用dataWacthers.triggerWatch方法触发事件

dataWatches|childWatches管理器的Watcher触发逻辑:
在这里插入图片描述
可以看到,ServerCron的process方法本质上并不是处理客户端Watcher真正的业务逻辑,而是借助当前客户端连接的ServerCnxn对象来实现对客户端的WatchedEvent传递,真正的客户端Watcher回调与业务逻辑执行都在客户端

3.客户端回调Watcher

客户端收到WatcherEvent事件后,开始处理此事件

1.SendThread接收事件通知:
在这里插入图片描述
2.EventThread处理事件通知:SengThread调用EventThread.queueEvent将事件传递给EventThread线程
在这里插入图片描述

总结

在这里插入图片描述

特性:

一次性:客户端和服务端都是
在这里插入图片描述
客户端串行执行:
在这里插入图片描述
轻量:
在这里插入图片描述

1.5 ACL-保障数据安全

ACL为访问控制列表,可以从三个方面:权限模式、授权对象、权限来标识一个有效的ACL信息

1.5.1 权限模式:Scheme

用来确定权限验证过程中使用的检验策略

ZooKeeper开发中,使用最多的是以下四种权限模式:

IP:
在这里插入图片描述
Digest:
在这里插入图片描述
World:
在这里插入图片描述
Super:
在这里插入图片描述

1.5.2 授权对象:ID

指权限赋予的用户或一个指定实体

不同权限模式下授权对象不同:
在这里插入图片描述

1.5.3 权限:Permission

指通过权限检查后可以被允许执行的操作

对数据的操作权限分为五类:
在这里插入图片描述

1.5.4 权限扩展体系

可以以插件形式插入到ZooKeeper的权限体系中去

1.5.4.1 实现自定义权限控制器

实现AuthenticationProvider接口,如CustomAuthenticationProvider

将自定义权限控制器进行注册:
在这里插入图片描述

1.5.5 ACL管理
1.5.5.1 设置ACL

两种方式

一:在数据节点创建的同时进行ACL权限的设置
create [-s] [-e] path data acl

二:使用setAcl命令单独对已经存在的数据节点进行ACL设置
setAcl path acl

1.5.5.2 Super模式的用法

出现的问题:
在这里插入图片描述
解决:
在ACL的Super模式下,使用超级管理员权限来进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值