以示例形式说明 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. memset()函数用法及其作用

    memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...

  2. R工具包一网打尽

    这里有很多非常不错的R包和工具. 该想法来自于awesome-machine-learning. 这里是包的导航清单,看起来更方便 >>>导航清单 通过这些翻译了解这些工具包,以后干 ...

  3. 八皇后问题 递归实现 C语言 超详细 思路 基础

    八皇后问题 :假设 將八个皇后放到国际象棋盘上,使其两两之间无法相互攻击.共有几种摆法? 基础知识: 国际象棋里,棋盘为8X8格. 皇后每步可以沿直线.斜线 走任意格. 思路: 1.想把8个皇后放进去 ...

  4. Broken Keyboard (a.k.a. Beiju Text) 思路

    问题:You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem ...

  5. hdu 2034 改革春风吹满地 多边形面积

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem ...

  6. MVC路由 路由的三种扩展 替换MVC内置的Handler

    Global.asax 是 程序入口文件 路由配置   为什么localhost:8088/Home/Index/1 能返问到我们写的 会去掉前缀跟端口号  变成Home/Index/1 用这个跟路由 ...

  7. git Bash下复制粘贴

    git复制:Ctrl+insert git粘贴:Shift+Insert git常用快捷键链接地址:https://www.jianshu.com/p/cc1fbd89e087 在gitHup上下载他 ...

  8. Navicat for MySQL 查看BLOB字段内容

    转载地址:https://blog.csdn.net/lwei_998/article/details/41871329

  9. firewalld管理防火墙常用命令

    1.查看防火墙的状态 [root@localhost HMK]# firewall-cmd --state 查看防火墙的运行状态 not running [root@localhost HMK]# s ...

  10. seo中的竞价排名是什么

    seo中的竞价排名是什么 一.总结 一句话总结:竞价排名的基本特点是按点击付费,推广信息出现在搜索结果中(一般是靠前的位置),如果没有被用户点击,则不收取推广费. 搜索引擎的一种推广广告的方式 1.竞 ...