不建议使用(单独)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 的应用的更多相关文章

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

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

  2. [译]ZOOKEEPER RECIPES-Leader Election

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

  3. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  4. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  5. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  8. zookeeper源码分析之一服务端启动过程

    zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...

  9. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  10. 如何编译Zookeeper源码

    1. 安装Ant Ant下载地址:http://ant.apache.org/bindownload.cgi 解压即可. 2. 下载Zookeeper源码包 https://github.com/ap ...

随机推荐

  1. 目前市面上报表软件下载排名的TOP5

    目前,大部分的工作仍然离不开表格,而且工作表格的呈现更酷.效率要求更高.可以简化复杂的操作,大大提高工作效率.在企业管理中,报表可以以图表等简洁的方式向用户显示数据,从而提高工作效率.许多哦公司紧跟信 ...

  2. Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)

    目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...

  3. Winfrom中关于toolStrip工具栏中按钮背景的设置

    在ToolStrip中可以存放很多种控件,一般来说,主要使用的是Button和DropDownButton,通常情况下,Button需要设置图片和文字,网上找了很多个方法都不太靠谱,自己试验了下,下面 ...

  4. weblogic 升级bsu_Weblogic补丁升级之坑坑洼洼

    转至:https://blog.csdn.net/weixin_30682635/article/details/111911952 [概述] 虽然当前国内去IOE波涛汹涌,但不可否认OracleWe ...

  5. shell脚本的调试sh-x

    转至:https://blog.csdn.net/yjgithub/article/details/80908079 目录 一.简介 二.sh -x 脚本名.sh 三.set -x 一.简介 使用sh ...

  6. Java:List(一)——概述

    说明 在集合类中,List是最基础的一种集合--有序List. List的行为和数组几乎相同:List内部按照放入元素先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组相同,都是 ...

  7. 自己创建bmp图像

    随便找一张图片,右键选择打开方式为画图,再在画图中保存为bmp即可 如果要保存为png文件,也可以这样

  8. LeetCode-086-分隔链表

    分隔链表 题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前. 你应当 保留 两个分区中每个节点的初始相对 ...

  9. CoLAKE: 如何实现非结构性语言和结构性知识表征的同步训练

    原创作者 | 疯狂的Max 论文CoLAKE: Contextualized Language and Knowledge Embedding 解读 01 背景与动机 随着预训练模型在NLP领域各大任 ...

  10. JAVA基础01----第1章Java开发环境搭建

    一. Java开发环境中涉及的名词:JDK,JRE,JVM A:什么是JVM JVM是java虚拟机(JVM Java Virtual Machine),java程序需要运行在虚拟机上,不同平台有自己 ...