zoukankan      html  css  js  c++  java
  • ZooKeeper

    ZooKeeper - Perl bindings for Apache ZooKeeper  Perl绑定用于 Apache ZooKeeper
    
    监控 master/slave 需要使用zk的临时节点
    
     1072  ./configure --libdir=/usr/lib
     1073  make
     1074  make install
     1075  cpan ZooKeeper
     [root@wx03 c]# perldoc ZooKeeper
     
     my $zk = ZooKeeper->new(hosts => 'localhost:2181');
     
    my $cv = AE::cv;
    my @children = $zk->get_children('/', watcher => sub { my $event = shift; $cv->send($event) });
    my $child_event = $cv->recv;
    
    状态:
    
    不稳定
    
    知道版本1.0.0,一些 API方面的改动,最多和异常处理相关用于命令和watchers.
    
    
    描述:
    
    ZooKeeper  是一个perl 接口到 Apache ZooKeeper C client library.
    
    
    
    与Net::ZooKeeper的不同?
    
    
    ZooKeeper 是编写用于异步程序
    
    
    
    支持异步程序,watchers是作为函数引用实现, 一个ZooKeeper::Dispatcher 异步调用
    
    ZooKeeper 事件数据。
    
    相反,Net::ZooKeeper 被用于Net::ZooKeeper::Watch classes, 用户必须交互的使用wait方法。
    
    
    ZooKeeper  数据是表现为普通的perl 数据类型
    
    
    ZooKeeper 事件和状态数据 是简单的hash引用和数据引用
    
    Net::ZooKeeper 代替提供特定的perl类用于交互这个数据
    
    
    ZooKeeper 利用perl异常处理;
    
    
    代替 返回的C错误代码, 因为Net::ZooKeeper does, ZooKeeper  抛出一个 ZooKeeper::Error 异常对于不期望的返回代码
    
    
    Data Types  数据类型:
    
    
    ACL 是表示一个hash引用的数组引用,每个hash引用包含一个Id,scheme,和权限。
    
    权限标志可以从ZooKeeper::Constants package.导入
    
    
    例子,ZOO_READ_ACL_UNSAFE  将表示为;
    
        [{id => 'anyone', scheme => 'world', perms => ZOO_PERM_READ}]
    
    
    event:
    
    
    一个属性的hash引用用于一个watcher event,包含event的类型(a ZooKeeper::Constants event), 
    
    连接状态(a ZooKeeper::Constants state) 和节点触发事件的路径
    
    
        {
            path  => '/child',
            state => ZOO_CONNECTED_STATE,
            type  => ZOO_CHILD_EVENT,
        }
    
    stat
    A hashref of fields from a C Stat struct.
    
        {
            aversion       => 0,
            ctime          => 0,
            cversion       => 0,
            czxid          => 0,
            ephemeralOwner => 0,
            dataLength     => 0,
            mtime          => 0,
            mzxid          => 0,
            numChildren    => 2,
            pzxid          => 2334,
            version        => 0,
        }
    
    
    Dispatchers 调度器:
    
    
    ZooKeeper  使用ZooKeeper::Dispatchers 对于和用C库注册的回调通信。
    
    那些回调 是被执行在单独的POSIX  threads,
    
    
    写event data 到一个 ZooKeeper::Channel ,通知 dispatcher  一个event 是准备被处理。
    
    这个通过如何发生,perl 回调如何发生,是调度器乐行的不同
    
    
    AnyEvent
    
    
    ZooKeeper 写Unix 管道 使用一个AnyEvent I/O watcher. T
    
    这意味着perl 回调对于watcheres 会通过AnyEvent event loop. 执行
    
    
    Interrupt 中断:
    
    ZooKeeper  使用 Async::Interrupt  回调,这意味着 perl 解释器会安全的中断(等待操作完成)
    
    
    为了执行这个响应的perl回调。
    
    
    查看Async::Interrupt  关于回调如何被执行。
    
    
    要知道这个不会中断系统调用(比如select) 和XScode.
    
    
    这意味着你的代码会被租的在select操作(比如在 AnyEvent recv),
    
    中断的回调不会执行直到请求完成
    
    IOAsync
    
    
    ZooKeeper 写一个Unix管道使用 IO::Async::Handle.
    
    
     IO::Async  调度器需要一个n IO::Async::Loop,  需要手动构建
    
        my $loop = IO::Async::Loop->new;
        my $disp = ZooKeeper::Dispatcher::IOAsync->new(loop => $loop);
        my $zk = ZooKeeper->new(
            hosts      => 'localhost:2181',
            dispatcher => $disp,
        );
    
    
    
    ATTRIBUTES   属性:
    
    一个逗号分隔的列表 
    
        'localhost:2181'
        'zoo1.domain:2181,zoo2.domain:2181'
    
    
    timeout  会话超时用于ZooKeeper connection.
    
    
    watcher:
    
    一个子程序引用被调用通过默认的watcher 对于ZooKeeper 会话事件,
    
    这个属性是读写的:
    
    
    authentication
    
    
    一个数组引用 用于ZooKeeper 认证,这个会传递一个数组到add_auth
    
    
      [$scheme, $credentials, %extra]
    
    buffer_length
    
    
    默认的buffer 长度用于检索ZooKeeper data and paths 默认是2048
    
    
    
    METHODS  方法:
    
    new 实现一个新的 ZooKeeper connection.
    
    
        my $zk = ZooKeeper->new(%args)
    
            %args
                REQUIRED hosts
                OPTIONAL authentication
                OPTIONAL buffer_length
                OPTIONAL dispatcher
                OPTIONAL timeout
                OPTIONAL watcher
    
    
    state:
    
    
    得到ZooKeeper connection的状态,返回一个状态枚举 
    
    
    wait:
    
        调用等待依赖 ZooKeeper::Dispatcher.
    
    
    同步调用一个事件,返回 事件hash引用 watcher 被调用。
    
    可以传递一个timeout(单位秒),会导致等待 undef 如果没有在指定时间完成
    
    
       my $event = $zk->wait($seconds)
    
        OPTIONAL $seconds
    
    
    close:
    
    
    关闭一个 ZooKeeper session.
    
    如果 handle不是通过当前的session创建的,一个 ZOO_CLOSE_OP
    
    不会发送给server,相反,底层的socket会关闭
    
    
    reopen:
    
    重新打开一个 ZooKeeper session  在forking后,
    
    这个创建一个新的 ZooKeeper session, 不会关闭当前的会话
    
    
    create:
    
    
    创建一个新的node 使用给定的path和数据,返回 新创建的节点的path,否则抛出错误
    
    
       my $created_path = $zk->create($requested_path, %extra);
    
            REQUIRED $requested_path
    
            OPTIONAL %extra
                acl
                buffer_length
                ephemeral
                sequential
                value
    
    
    add_auth:
    
    
    添加认证对于session,会自动被调用如果认证属性在构造期间被设置
    
    
    一个 ZooKeeper::Error 会抛出如果请求没有成功, 决定成功或者失败认证,一个watcher 必须被传入
    
    
     $zk->add_auth($scheme, $credentials, %extra)
    
            REQUIRED $scheme
            REQUIRED $credentials
    
            OPTIONAL %extra
                watcher
    
    delete:
    
    
    
    Delete 一个node 在给定的path,Throws a ZooKeeper::Error  如果delete删除失败
    
       $zk->delete($path, %extra)
    
            REQUIRED $path
    
            OPTIONAL %extra
                version
    
    
    ensure_path
    
    exists
    
    检查是否一个节点存在于给定的path, 并可选的设置一个watcher 当节点被创建和删除,
    
    
    如果成功, 返回一个节点的状态的hash引用,否则返回Undef:
    
    
        my $stat = $zk->exists($path, %extra)
    
            REQUIRED $path
    
            OPTIONAL %extra
                watcher
    
    
    get_children:
    
    
    
    得到child 节点在规定的path下, 可选的设置一个watcher 当一个child 被创建或者删除,返回一个child path名字的数组
    
    
      my @child_paths = $zk->get_children($path, %extra)
    
            REQUIRED $path
    
            OPTIONAL %extra
                watcher
    
    
    get:
    
    
    设置数据在给定的path,如果成功,返回一个节点状态hashref,否则一个ZooKeeper::Error is thrown.
    
    
       my $stat = $zk->set($path => $value, %extra)
    
            REQUIRED $path
            REQUIRED $value
    
            OPTIONAL %extra
                version
    

  • 相关阅读:
    Analyzing the Go runtime scheduler from source code perspective
    golang教材
    Kafka#4:存储设计 分布式设计 源码分析
    机器学习应该准备哪些数学预备知识?
    Why does deep learning work?
    Deep Reinforcement Learning
    How do I learn machine learning?
    What are some good books/papers for learning deep learning?
    why deep learning works
    AI 名校课程&书籍 需要学习
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350512.html
Copyright © 2011-2022 走看看