zoukankan      html  css  js  c++  java
  • Zookeeper--Watcher 和 ACL

    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

  • 相关阅读:
    8.13实习报告
    8.10实习报告
    8.9实习报告
    8.8实习报告
    8.7实习报告
    关于线索二叉树建立和遍历
    main函数的位置可以任意
    返回指针值的函数和函数指针的区别
    runtime error: store to address 0x625000002048 with insufficient space for an object of type 'double' (solution.c) 0x625000002048: note: pointer points here
    m=-n++
  • 原文地址:https://www.cnblogs.com/luangeng/p/7398172.html
Copyright © 2011-2022 走看看