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() 注销

返回引言

[译]ZOOKEEPER RECIPES-Barriers的更多相关文章

  1. ZooKeeper Recipes and Solutions 翻译

    ZooKeeper 秘诀 与解决方案 A Guide to Creating Higher-level Constructs with ZooKeeper Out of the Box Applica ...

  2. ZooKeeper Recipes and Solutions

    原文地址:http://zookeeper.apache.org/doc/current/recipes.html 参考:https://zookeeper.apache.org/doc/trunk/ ...

  3. [译]ZOOKEEPER RECIPES-Locks

    锁 全局式分布式锁要求任何时刻没有两个客户端会获得同一个锁对象,这可以通过使用ZooKeeper实现.像优先级队列一样,首先需要定义一个锁节点. 在ZooKepeer的发布中src/recipes/l ...

  4. [译]ZOOKEEPER RECIPES-Queues

    队列 分布式队列是一种常见的数据结构.为了在ZooKepeer中实现分布式队列,第一步是要使用一个znode代表队列本身.分布式客户端通过create()方法将内容放入一个名叫"queue- ...

  5. [译]ZooKeeper recipes-引言

    ZooKeeper高级应用 本系列将指导使用ZooKeeper来实现高级功能,所有功能都在客户端完成,不需要ZooKeeper的特殊支持.希望可以得到社区的支持将这些加入到一个标准的客户端类库中(Cu ...

  6. [译]ZOOKEEPER RECIPES-Leader Election

    选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...

  7. [译]ZOOKEEPER RECIPES-TWO PHASED COMMIT

    两段式提交 两段式提交协议可以让所有分布式系统中的客户端达成协议同时提交或回滚事务. 在ZooKeeper中你可以通过协调者(coordinator)创建一个事务节点来实现两段式提交.例如" ...

  8. <译>Zookeeper官方文档

    apache原文地址:http://zookeeper.apache.org/doc/trunk/zookeeperOver.html ZooKeeper ZooKeeper: A Distribut ...

  9. [译]Zookeeper的优点与局限性

    1.Zookeeper的优点与局限性 在学习了Zookeeper(后文都简称zk)的介绍和功能后,您已经很好地理解了zk. 现在,在这个zk教程中,我们将讨论zk的优点和局限性. zk有几个功能对用户 ...

随机推荐

  1. 一起学微软Power BI系列-使用技巧(4)Power BI中国版企业环境搭建和帐号问题

    千呼万唤的Power BI中国版终于落地了,相信12月初的微软技术大会之后已经铺天盖地的新闻出现了,不错,Power BI中国版真的来了,但还有些遗憾,国际版的一些重量级服务如power bi emb ...

  2. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  3. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  4. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  5. MVC Core 网站开发(Ninesky) 1、创建项目

    又要开一个新项目了!说来惭愧,以前的东西每次都没写完,不是不想写完,主要是我每次看到新技术出来我都想尝试一下,看到.Net Core 手又痒了,开始学MVC Core. MVC Core最吸引我的有三 ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(70)-微信公众平台开发-成为开发者

    系列目录 前言: 一.阅读这段系列之前,你必须花半天时间大致阅读微信公众平台的API文档,我尽量以简短快速的语言与大家分享一个过程 二.借助微信公众平台SDK Senparc.Weixin for C ...

  7. SQL Server2016升级前几点自检

    SQL Server2016已经出来一段时间了,而且最新的SP1包也于2016年11月18日正式发布,各种新的特性推出让我们跃跃欲试.那么对于我们真实的业务环境,特别是生产环境要不要"跟风& ...

  8. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  9. PAT甲级 1001. A+B Format (20)

    题目原文: Calculate a + b and output the sum in standard format -- that is, the digits must be separated ...

  10. BPM费控管理解决方案分享

    一.方案概述费用是除经营成本外企业的最主要支出,费用管理是财务管理的核心之一,加强企业内控管理如:费用申请.费用报销.费用分摊.费用审批.费用控制和费用支付等,通过科学有效的管理方法规范企业费用管理, ...