zoukankan      html  css  js  c++  java
  • [译]ZOOKEEPER RECIPES-Barriers

    Barrier

    在分布式系统中常使用Barrier来阻塞进程,当满足一定条件后再恢复进行后续操作。Barrier在Zookeeper中可以通过设计一个Barrier节点来实现。Barrier 节点存在时会进行阻塞,下面是伪代码:
    1.客户端调用exists方法来检查Barrier节点是否存在,并设置watch为true。
    2.如exists返回false,表示Barrier条件满足,继续运行。
    3.如exists返回true,客户端等待Zookeeper的节点上的watch事件。
    4.当watch触发后,返回第一步继续进行检查exist直到节点被删除。

    双重Barrier(Double Barrier)

    双重Barrier让客户端同步地开始和结束进程。当进程数满足Barrier需求,就开始运行,并在运行完后释放Barrier,下面介绍如何使用Zookeeper的节点创建一个双重Barrier。
    在本例的伪代码中创建一个节点b作为Barrier。每个客户端p注册在Barrier节点上并在离开时注销。一个节点通过下面的注册流程进行注册,直到x个客户端注册后再继续运行。(x可以由你自己系统决定)

    注册 注销
    1.定义n = b+"/"+p
    2.设置watch进行判断是否存在:exists(b + "/ready", true)
    3.创建子节点create( n, EPHEMERAL)
    4.获得存在的子节点L = getChildren(b, false)
    5.如果L的个数比x小则等待watch事件
    6.否则创建create(b + "/ready", REGULAR)
    1.获得存在的子节点数L = getChildren(b, false)
    2.如果没有子节点则退出
    3.如果p是唯一子节点,则删除n并退出
    4.如果p是L中最小的子节点,等最大的节点注销
    5.否则delete(n),并等待最小的节点删除
    6.返回第1步

    在注册时,所有进程监视ready节点并在Barrier节点下创建一个ephemeral节点。除了最后注册的节点,每个进程在第5步等待ready节点创立,最后一个进程会看到所有x个子节点并创建ready节点,从而唤醒其他进程。
    在注销时,由于需要监视的是节点的删除,就无法使用ready标志了。注册时,使用ephemeral节点,就算进程在触发Barrier之后报错也不会影响其他正常的进程。当进程准备退出,他们需要删除自己的进程节点并等待其他进程全部删除。
    b下没有进程子节点时,进程退出。然而,为了提高效率,你可以使用最小的进程节点作为ready标志。所有其他进程准备删除时,watch最小的进程节点删除,而最小的进程本身,监视其他任何一个节点(为了方便可以取最大的那个节点)。这意味着,每个节点删除最多只会唤醒一个进程,只有最后一个节点在删除时会唤醒所有进程。

    使用Curator

    Barrier

    public DistributedBarrier(CuratorFramework client,String barrierPath)
    /** client         客户端实例
        barrierPath    barrier节点的路径**/
    public void waitOnBarrier()    阻塞进程
    public void setBarrier()       设置Barrier
    public void removeBarrier()    移除Barrier
    

    双重Barrier

    public DistributedDoubleBarrier(CuratorFramework client,String barrierPath,int memberQty)
    /** client        客户端实例
        barrierPath   barrier节点的路径
        memberQty     期望节点的数量**/
    public void enter()    注册
    public void leave()    注销
    

    返回引言

  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/resentment/p/6194361.html
Copyright © 2011-2022 走看看