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. HDU 2062 Subset sequence 数位dp,思路 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=2062 Subset sequence Time Limit: 1000/1000 MS (Java/Others ...

  2. JTable的应用

    最近项目中使用到一个table表格,表格的样子如下: 可以修改数量,以及折扣,对应的最终价会相应的变化. 随手写了份插件,命名为JTable,可以给热爱jquery 的友友们一个参考: 代码如下: / ...

  3. Redis--初入

    安装 .下载源码,解压缩后编译源码  $ wget http://download.redis.io/releases/redis-4.0.1.tar.gz $ tar xzf redis-4.0.1 ...

  4. python金融分析项目

    1.进入ipython: C:\Users\Administrator>ipython Python (v3. , ::) [MSC v. bit (AM D64)] Type 'copyrig ...

  5. ROW_NUMBER() OVER(PARTITION BY)

    select * from (select *,ROW_NUMBER() OVER(PARTITION BY GoodsID ORDER BY IsMain desc,OrderNum) as Mai ...

  6. android 编译环境 & 开发教程 【持续更新】

    一. 优秀博文推荐 1.ubuntu 搭建 android源码编译环境 ubuntu14.04LTS android 源码编译环境的搭建 2.开源网站 2.android 开源 网站 2015最流行的 ...

  7. Android深入理解JNI(一)JNI原理与静态、动态注册

    前言 JNI不仅仅在NDK开发中应用,它更是Android系统中Java与Native交互的桥梁,不理解JNI的话,你就只能停留在Java Framework层.这一个系列我们来一起深入学习JNI. ...

  8. Java内存模型的深入理解

    基础 并发编程的模型分类 在并发编程需要处理的两个关键问题是:线程之间如何通信 和 线程之间如何同步. 通信 通信 是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存 ...

  9. Django的CBV

    CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承.封装.多态).所以Dja ...

  10. [转载][QT][SQL]sql学习记录4_sqlite约束

    转载自:定义以及示例请见 : http://www.runoob.com/sqlite/sqlite-constraints.html SQLite 约束 约束是在表的数据列上强制执行的规则.这些是用 ...