zookeeper 的应用
不建议使用(单独)zookeeper 做分布式队列,有几点原因,以下原因摘抄于curator的官网:
1、zookeeper有1MB的传输限制。而在队列中,拥有很多的数据节点,通常包括数千个,如果有较多的很大的znode,将会降低zookeeper的启动速度。需要自己显式地注明initLimit和syncLimit。
2、znode太大,会导致清理起来很困难,并且getchildren()失效
3、如果zookeeper上有数千个znode 或者子级别的znode,zookeeper的效率将会明显下降
4、zookeeper的数据都是保存在内存中的,无论采取何种方法,包括但不限于使用API ,也只能得到对应的内存信息,其他相关信息都不会得到
下面是应用场景,还需要自测试例子:
1、锁
1.1 共享可重用锁:全局同步的完全分布式锁,这意味着在任何快照中,没有两个客户机认为它们持有相同的锁。也就是说,这个锁可以被重用。
1.2 共享锁:类似于共享可重复锁,但是不是可以重用的。
1.3 共享可重用读写锁:跨jvm工作的可重入读写互斥锁。读写锁维护一对关联锁,一个用于只读操作,一个用于写入。只要没有写入器,读锁可以由多个读取器进程同时持有。写锁是排他的。 ----这个有点叼
1.4 共享信号量——在jvm之间工作的计数信号量。所有使用相同锁路径的jvm中的所有进程都将获得一组进程间有限的契约。此外,这个信号量基本上是“公平的”——每个用户将按照请求的顺序获得一个租约(从ZK的观点来看)。-----这是几个意思?
1.5 多重共享锁:将多重共享锁放在一个实体里面。当调用acquire()的时候,将会获得所有的锁。当调用release()的时候,将会释放所有的锁。
2、Barrier
2.1 Barrier:分布式系统使用障碍来阻止一组节点的处理,直到满足了允许所有节点继续进行的条件。
2.2 Double Barrire:允许客户端同步计算的开始和结束。当足够多的进程加入Barrier时,进程开始计算并在完成Barrier后离开Barrier。
3、计数器
3.1 共享计数器-管理一个共享整数。所有观察同一路径的客户机都将具有共享整数的最新值(考虑到ZK的正常一致性保证)。
3.2 分布式原子长:一个尝试原子增量的计数器。它首先尝试使用乐观锁定。如果失败,将使用一个可选的InterProcessMutex。对于乐观和互斥锁,都使用重试策略来重试增量。
zookeeper 的应用的更多相关文章
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- [译]ZOOKEEPER RECIPES-Leader Election
选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...
- zookeeper源码分析之六session机制
zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- zookeeper源码分析之二客户端启动
ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...
- zookeeper源码分析之一服务端启动过程
zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...
- zookeeper集群的搭建以及hadoop ha的相关配置
1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...
- 如何编译Zookeeper源码
1. 安装Ant Ant下载地址:http://ant.apache.org/bindownload.cgi 解压即可. 2. 下载Zookeeper源码包 https://github.com/ap ...
随机推荐
- 缓冲区(buffer)与缓存(cache) 缓冲:缓解冲击,缓存:临时存储
缓存与缓冲区 简要概述 缓存(cache):故名思意就是临时存储一下数据的存储器,其他设备可能等下还用的到数据.缓存区可以用来做缓冲区 缓冲区(Buffer):故名意思就是解决设备之间速度不匹配的问题 ...
- 【C#表达式树 七】 反射在表达式树中的应用 ListInitExpression
以下都是反射在表达式树中的应用 对象初始化 Expression.MemberInit 反射获取成员(字段 或者属性),绑定数据,然后生成 成员表达式节点 class Animal { public ...
- ibv_free_device_list()函数
void ibv_free_device_list(struct ibv_device **list); 描述 函数用来释放当前可用的RDMA设备数组. 注意 数组一旦释放,指向设备的指针将不能再由i ...
- 将ISO镜像文件制作成USB disk
制作USB Live盘有Universal USB Installer.UNetbootin.WinSetupFromUSB.LinuxLive USB Creator.YUMI(Your Unive ...
- hadoop分布式集群部署①
Linux系统的安装和配置.(在VM虚拟机上) 一:安装虚拟机VMware Workstation 14 Pro 以上,虚拟机软件安装完成. 二:创建虚拟机. 三:安装CentOS系统 (1)上面步 ...
- 图解|从根上彻底理解MySQL的索引
这是图解MySQL的第4篇文章,这篇文章会让你 明白什么是索引,彻底理解B+树和索引的关系: 彻底理解主键索引.普通索引.联合索引: 了解什么是HASH索引,InnoDB和MyISAM索引的不同实现方 ...
- laravel7文件上传至七牛云并保存在本地图片
HTML代码: <form class="layui-form" action="{{route('doctor.store')}}" method=&q ...
- php 23种设计模式 - 解释器模式
给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子.角色:环境角色(PlayContent):定义解释规则的全局信息.抽象解释器(Empress):定义了部 ...
- 使用pip安装扩展包
pip可以对python扩展包进行查找.下载.安装.卸载等
- Control Flow in Tensorflow TF中的控制流解析
写在前面 本文翻译自Tensorflow团队的文章Tensorflow Control Flow Implementation,部分内容加入了笔者自己的理解,如有不妥之处还望各位指教. 目录 概览 控 ...