• 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

  • 相关阅读:
    would clobber existing tag
    已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: TCP 提供程序, error: 0
    C#搭建简单的http服务器,访问静态资源
    使用iis反向代理
    WorkerServices部署为Windows服务
    mongo 操作数据库的方式
    odoo db_name 指定多个数据库
    odoo 如何设置字段变更跟踪
    odoo qweb 视图使用widget
    odoo 代码片段比较全的扩展
  • 原文地址:https://www.cnblogs.com/luangeng/p/7398172.html
Copyright © 2020-2023  润新知