不建议使用(单独)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. BI能给企业带来什么收益,企业应该如何选择好的BI工具?

    ​任何从事数据分析的小伙伴,或多或少都会听说BI这个数据分析工具.希望进入数据分析工作的小伙伴也一定绕不开BI这个话题,那么BI到底是什么呢?为什么BI如此重要?BI能给企业带来什么?如何选择BI工具 ...

  2. ContOS 7安装Docker使用及部署MySQL和Nginx

    此文章采取狂神说Java https://space.bilibili.com/95256449 Docker学习网址: Docker官网:https://www.docker.com/ Docker ...

  3. C语言qsort()函数的使用

    C语言qsort()函数的使用 qsort()函数是 C 库中实现的快速排序算法,包含在 stdlib.h 头文件中,其时间复杂度为 O(nlogn).函数原型如下: void qsort(void ...

  4. 服务器CPU很高-怎么办(Windbg使用坑点)

    最近,碰到了一个线上CPU服务器很高的问题,并且也相当紧急,接到这个任务后,我便想到C#性能分析利器,Windbg. 终于在折腾半天之后,找出了问题,成功解决,这里就和大家分享一下碰到的问题. 问题1 ...

  5. 鼠标点击的时候出现 "双心心" 的效果

    设置步骤 点击博客园的 [管理]  → [设置] → 一直往下拉, 找到 [页首Html代码],添加如下代码内容, 保存即可: <script type="text/javascrip ...

  6. parquet列存储本身自带压缩 配合snappy或者lzo等可以进行二次压缩

    上传txt文件到hdfs,txt文件大小是74左右. 这里提醒一下,是不是说parquet加lzo可以把数据压缩到这个地步,因为我的测试数据存在大量重复.所以下面使用parquet和lzo的压缩效果特 ...

  7. Lua中如何实现类似gdb的断点调试--05优化断点信息数据结构

    在上一篇04优化钩子事件处理中,我们在钩子函数中引入了call和return事件的处理,对性能进行了优化. 细心的同学可能已经发现了,我们的hook函数中call事件和line都需要对整个断点表进行遍 ...

  8. vcpkg 换源

    vcpkg 的下载速度饱受诟病已久,但是并不见官方团队的动作,虽然有人提了 issue,但是提交的代码并不符合要求. 我自己在下载包的时候,特别是在下载位于 github 的包时,下载直接中断,所以我 ...

  9. 微信小程序缓冲类的封装

    1:utils 目录下新建一个Cache.js文件 2:文件下书写以下代码: // 缓存类 class Cache { // 构造方法 单位秒 constructor({ expire = 3600 ...

  10. jQuery Validatede 结合Ajax 表单验证提交

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...