以示例形式说明 zk 食谱。

假定有 4 个客户端,分别执行 create -s -e /lock/read xx 或 create -s -e /lock/write 获取锁。

一、获取读锁的情况:
/lock/write001
/lock/write002
/lock/read003
/lock/read004

客户端 3 获取读锁:
1. 创建 /lock/read003
2. 获取 /lock 的孩子
3. 发现 writexxx 的最小序号 1 比 3 小
4. 发现 /lock/write002 存在
5. watch /lock/write002 节点,获得通知后,再进入步骤 2

/lock/write001
/lock/read002
/lock/read003
/lock/read004

客户端 2 获取读锁:
1. 创建 /lock/read002
2. 获取 /lock 的孩子
3. 发现 writexxx 的最小序号 1 比 2 小
4. 发现 /lock/write002 不存在
5. 进入步骤 2

/lock/read001
/lock/write002
/lock/read003
/lock/read004

客户端 1 获取读锁:
1. 创建 /lock/read001
2. 获取 /lock 的孩子
3. 发现 writexxx 的最小序号 2 比 1 大,则获得锁

二、获取写锁的情况:
/lock/write001
/lock/read002
/lock/read003
/lock/read004

客户端 1 获得写锁:
1. 创建 /lock/write001 节点
2. 获得 /lock 孩子
3. 发现最小的序号是 001,就是自己,则获得锁

/lock/write001
/lock/read002
/lock/write003
/lock/read004

客户端 3 获得写锁:
1. 创建 /lock/write003 节点
2. 获得 /lock 孩子
3. 发现 001 是最小的序号
4. 发现 xx002 存在
5. watch xx002,等待通知进入步骤 2

/lock/write001
/lock/write002
/lock/read003
/lock/read004

客户端 2 获得写锁:
1. 创建 /lock/write002 节点
2. 获得 /lock 孩子
3. 发现最小的序号是 001
4. 发现 xx002 不存在,因为自己就是
5. 进入步骤 2

三、leader 选举
创建顺序、瞬时节点:create -s -e /election/n- xx

假定 4 个客户端,分别创建如下节点:
/election/n-001
/election/n-002
/election/n-003
/election/n-004

则:
/election/n-001 是 leader

为了避免出现羊群效应,不让所有的客户端 watch 同一个节点。
/election/n-002 watch /election/n-001
/election/n-003 watch /election/n-002
/election/n-004 watch /election/n-003

zookeeper 食谱的更多相关文章

  1. ZooKeeper食谱(八)

    使用ZooKeeper构造高级别应用的指南 在这个文章中,你将会发现使用ZooKeeper来实现高级别功能的指南.所有的它们在客户端上被实现而不需要ZooKeeper特别的支持.希望社区将注意到这些约 ...

  2. ZooKeeper之service discovery

    Zookeeper整体介绍 ZooKeeper is a centralized service for maintaining configuration information, naming, ...

  3. ZooKeeper文档(二)

    ZooKeeper:因为协调的分布式系统是一个动物园 ZooKeeper对分布式应用来说是一个高性能的协调服务.它暴露通常的服务-比如命名,配置管理,同步,和组服务-用一种简单的接口,所以你不用从头开 ...

  4. Zookeeper客户端Curator使用详解

    Zookeeper客户端Curator使用详解 前提 最近刚好用到了zookeeper,做了一个基于SpringBoot.Curator.Bootstrap写了一个可视化的Web应用: zookeep ...

  5. ZooKeeper动态配置(十四)

    概述 在3.5.0发行之前,ZK的全体成员和所有其它的配置参数是静态加载的在启动的时候并且在运行的时候不可变.操作员诉诸于"滚动重启" - 一个手动密集和改变配置文件容易出错的方法 ...

  6. zookeeper(六):Zookeeper客户端Curator的API使用详解

    简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsEx ...

  7. 转:Zookeeper客户端Curator使用详解

    原文:https://www.jianshu.com/p/70151fc0ef5d Zookeeper客户端Curator使用详解 前提 最近刚好用到了zookeeper,做了一个基于SpringBo ...

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. [译]ZOOKEEPER RECIPES-Leader Election

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

随机推荐

  1. jmeter命令行模式运行,实时获取压测结果

    jmeter命令行模式运行,实时获取压测结果 jmeter很小,很快,使用方便,可以在界面运行,可以命令行运行.简单介绍下命令行运行的方式: sh jmeter.sh -n -t my-script. ...

  2. C++中substr函数的用法

    #include<iostream> #include<string> using namespace std; int main(){ string str("12 ...

  3. 两个DIV并排显示

    今天做的一个项目,需要做3个div,一个是总框(Div1),另外两个是子框,按比例填满div1,我设置好两个div的width和height,发现效果是两个子div上下显示,如图所示: 要想将两个DI ...

  4. 【SQL Prompt】SQL Prompt7.2下载及破解教程

    基本介绍 SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动进行检索,智能的为用户提供唯一合适的代码选择.自动脚本设置为用户提供了简单的代码易读性--这在开发者使用的是不大熟悉的 ...

  5. pandas计数 value_counts()

    来自:曹骥 在pandas里面常用value_counts确认数据出现的频率. 1. Series 情况下: pandas 的 value_counts() 函数可以对Series里面的每个值进行计数 ...

  6. openmodelica警告及错误

    Warning: The initial conditions are not fully specified. simulate(TCS.TCS,startTime=0,stopTime=200.0 ...

  7. 力扣(LeetCode)231. 2的幂

    给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 1: 输入: 1 输出: true 解释: 20 = 1 示例 2: 输入: 16 输出: true 解释: 24 = 16 示例 3: ...

  8. Android JNI 数组操作

    JNI 中有两种数组操作,基础数据类型数组和对象数组,JNI 对待基础数据类型数组和对象数组是不一样的. 基本数据类型数组 对于基本数据类型数组,JNI 都有和 Java 相对应的结构,在使用起来和基 ...

  9. 新建ng工程

    有问题多看官网文档https://www.angular.cn/guide/quickstart 1 在远程仓库建立 1个完全空的仓库,不要建立readme.MD  ng cli创建时会创建readm ...

  10. ubuntu 18.04编译opencv3.4.3 with python3.6 cuda9.2 gdal

    惭愧,之前一直没在linux下编译过opencv,也没用过纯命令行版的cmake,现在咬牙编译一次.其实感觉还凑合. opencv官网文档还是那么烂:https://docs.opencv.org/m ...