Zookeeper--Watcher 和 ACL

Watcher (观察)

Zookeeper中的znode可以被监控,这是zk的核心特性。

通过exists,getChildren和getData这些读操作可以设置观察,通过create,delete和setData这些写操作触发观察。当一个观察被触发时会产生一个事件,这个观察和触发它的操作共同决定了观察事件的类型。

1.当所观察的znode被创建,删除或其数据被更新时,设置在exists操作上的观察被触发。

2.当所观察的znode被删除或其数据被更新时,设置在getData操作上的观察被触发。创建znode不会触发getData上的观察。

3.当所观察的znode的子节点被创建或删除,或所观察的znode被删除时,设置在getChildren上的观察会被触发。通过观察事件的类型来判断被删除的是znode还是其子节点:NodeDelete或NodeChildrenChanged。

观察和触发映射表:

创建节点               创建子节点                      删除节点                     删除子节点                       setData

exists                    NodeCreated                                              NodeDeleted                                                    NodeDataChanged

getData                                                                                  NodeDeleted                                                   NodeDataChanged

getChildren                                   NodeChildrenChanged           NodeDeleted              NodeChildrenChanged

观察事件参数中可获取到被观察节点的路径,因此对于NodeCreated和NodeDeleted事件可获取到是哪个节点被创建和获取。

对于NodeChildrenChanged事件则需要使用getChildren方法获取新创建的节点。

对于NodeDataChanged事件则需要调用getData方法获取更新后的数据。注意:观察被触发后和获取数据之间节点可能又发生了变化。

ACL相关的操作不触发任何观察。

ACL (访问控制表)

每个znode被创建时都需要指定一个ACL列表,定义了该节点被执行各种操作的权限。

ACL依赖于Zookeeper的客户端身份验证机制。zk提供了以下几种验证方式:

Digest    通过用户名和密码来识别客户端

sasl     通过Kerberos来识别客户端

IP      通过客户端IP地址来识别客户端

每个ACL都是验证方式和赋予权限的组合,如 new ACL(Perms.READ, new ID("ip", "10.11.19.18"));  使用IP验证方式赋予READ权限

注意exists操作不需要任何权限,因此任何客户端都可以调用。

ACL权限表:

CREATE  允许create

READ   允许getChildren  getData

WRITE       允许setData

DELETE    允许delete

ADMIN   允许setACL

在ZookDefs.Ids中定义了一些ACL,如OPEN_ACL_UNSAFE,将除ADMIN外的其他权限赋予每个客户端。

end

Zookeeper--Watcher 和 ACL的更多相关文章

  1. java zookeeper权限控制ACL(digest,IP)

    java zookeeper权限控制ACL(auth,digest,ip) 学习前请参考:https://www.cnblogs.com/zwcry/p/10407806.html zookeeper ...

  2. 8.7.ZooKeeper Watcher监听

    1.ZooKeeper Watcher ZooKeeper 提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象, 当这个主题对 ...

  3. ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表

    zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...

  4. zookeeper Watcher API 说明

    Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而 ...

  5. Zookeeper——Watcher原理详解

    文章目录 引言 正文 一.如何注册监听 二.如何触发监听事件 三.事件类型有哪些 四.Watcher可以被无限次触发么?为什么要这么设计? 五.Watcher实现原理 1. 客服端发送请求 a. 初始 ...

  6. [转载] Zookeeper中的 ACL(Access Control List)访问控制列表

    zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...

  7. Zookeeper Watcher 解析

    1.Watcher 接口源码 1. 当客户端向zookeeper注册了watcher时,当服务器向客户端发送一个watcher事件通知时,客户端会调用回调方法process(WatchedEvent ...

  8. zookeeper watcher

    ZooKeeper 的  watcher 机制主要包括客户端线程.客户端 WatchManager 和 ZooKeeper 服务器三部分. 工作方式:客户端在向 zk 服务器注册 Watcher 的同 ...

  9. ZooKeeper Watcher注意事项

    zookeeper watch的定义如下:watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher. 需要注意三点: 1.一次性触发器 c ...

  10. Zookeeper Watcher接口

    在ZooKeeper中,接口类Watcher用于表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了 ...

随机推荐

  1. C++复习1.内存管理的知识

    C++ 内存管理 1.内存分配的方式有三种: 从静态存储区分配:在程序编译期间已经分配好了,这些在程序的生命周期内都是有效的,如全局变量,static变量 一个例子: char * p = " ...

  2. 内存保护机制及绕过方法——利用Ret2Libc绕过DEP之VirtualProtect函数

    利用Ret2Libc绕过DEP之VirtualProtect函数 ⑴.  原理分析: i.相关概念: VirtualProtect()函数: BOOL WINAPI VirtualProtect( _ ...

  3. 【Html 学习笔记】第五节——表格

    表格也是日常用到的. 普通表格:<table> 表格边框:border 表头:th 表格标题:caption 横/纵向合并的单元格:colspan .rawspan 表格内标签: 单元格间 ...

  4. 随机生成验证码及python中的事务

    1.随机生成验证码 # import random # print(random.random()) #-1的小数 # print(random.randint(,)) #包括1和3 # print( ...

  5. 逐步实现hash算法(基于BKDRhash函数)

    哈希(Hash)算法,即散列函数.它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程.同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出.hash算法 ...

  6. (转)Android学习笔记②——HelloWorld的创建已经基本知识

    开发第一应用 可以开发属于自己的应用,是否有点小激动?好吧!让我们开始,首先点击Start a new Android Studio Project创建工程:接下来需要输入应用名称(第一个字母要大写) ...

  7. Conky配置文件

    Conky是一个可以在linux系统中实时显示系统性能的工具,美观且十分好用,我们选择安装conky-all程序包 # set to yes if you want Conky to be forke ...

  8. vscode 实用插件

    1.Auto Rename Tag,非常实用!要修改标签名称的时候自动修改结束标签,节省一半时间,提升效率,非常棒! 2.vscode-icon,这款必须要推荐,明显提升效率的小插件,在项目文件多类型 ...

  9. vue.js 源代码学习笔记 ----- Dep

    /* @flow */ import type Watcher from './watcher' import { remove } from '../util/index' let uid = 0 ...

  10. idea解决mybatis逆向工程

    1.pom.xml <?xml version="1.0" encoding="UTF-8"?><project xmlns="ht ...