zookeeper 食谱
以示例形式说明 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 食谱的更多相关文章
- ZooKeeper食谱(八)
使用ZooKeeper构造高级别应用的指南 在这个文章中,你将会发现使用ZooKeeper来实现高级别功能的指南.所有的它们在客户端上被实现而不需要ZooKeeper特别的支持.希望社区将注意到这些约 ...
- ZooKeeper之service discovery
Zookeeper整体介绍 ZooKeeper is a centralized service for maintaining configuration information, naming, ...
- ZooKeeper文档(二)
ZooKeeper:因为协调的分布式系统是一个动物园 ZooKeeper对分布式应用来说是一个高性能的协调服务.它暴露通常的服务-比如命名,配置管理,同步,和组服务-用一种简单的接口,所以你不用从头开 ...
- Zookeeper客户端Curator使用详解
Zookeeper客户端Curator使用详解 前提 最近刚好用到了zookeeper,做了一个基于SpringBoot.Curator.Bootstrap写了一个可视化的Web应用: zookeep ...
- ZooKeeper动态配置(十四)
概述 在3.5.0发行之前,ZK的全体成员和所有其它的配置参数是静态加载的在启动的时候并且在运行的时候不可变.操作员诉诸于"滚动重启" - 一个手动密集和改变配置文件容易出错的方法 ...
- zookeeper(六):Zookeeper客户端Curator的API使用详解
简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsEx ...
- 转:Zookeeper客户端Curator使用详解
原文:https://www.jianshu.com/p/70151fc0ef5d Zookeeper客户端Curator使用详解 前提 最近刚好用到了zookeeper,做了一个基于SpringBo ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- [译]ZOOKEEPER RECIPES-Leader Election
选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...
随机推荐
- RN 使用第三方组件之react-native-image-picker(拍照/从相册获取图片)
首先给个github地址:https://github.com/react-community/react-native-image-picker 英文不行的看下面这个笔记 该插件可以同时给iOS和 ...
- Codeforces 629 E. Famil Door and Roads
题目链接:http://codeforces.com/problemset/problem/629/E 询问这个简单环的期望.考虑将这个环拆成两部分. 令${deep[x]>=deep[y]}$ ...
- Web Api:基于RESTful标准
参考链接:http://www.cnblogs.com/lori/p/3555737.html 简单的了解到RESTful架构后,跟着以上链接做了一个小练习. Step1: 新建WebApi项目,新建 ...
- FZU oj 2277 Change 树状数组+dfs序
Problem 2277 Change Time Limit: 2000 mSec Memory Limit : 262144 KB Problem Description There is ...
- 【三十四】thinkphp之curd操作
1.数据创建(create) 接受提交过来的数据,比如表单提交的 POST(默认)数据.接受到数据后,还可以对数据进行有效的验证.完成.生成等工作 // 这里 create()方法就是数据创建,数据的 ...
- linux例行性任务(定时作业)
linux定时作业(例行性任务) linux有两种定时作业方式: • at : 这个工作仅执行一次就从 Linux 系统中的排程中取消: • cron : 这个工作将持续例行性的作下去! at仅执行一 ...
- TextView显示内容不全
今天开发遇到一个问题,发现TextView显示不全,很纳闷,看图: 正常情况应该是这个样子的: 造成这种情况的原因是: TextView被快速并且多次的设置内容值造成的. 我的场景: 我点击全选按钮, ...
- vue-router两种模式的区别
参考文献:https://blog.csdn.net/lla520/article/details/77894985/ https://segmentfault.com/a/1190000015123 ...
- ZOJ 3962 Seven Segment Display
Seven Segment Display 思路: 经典数位dp 代码: #include<bits/stdc++.h> using namespace std; #define LL l ...
- java再次学习
1.maven配置.