不建议使用(单独)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. 使用已有流量进行RFC2544测试—信而泰网络测试仪实操

    一.测试说明 先创建流量,将流量运行起来,流量正常.再使用创建的流量进行RFC2544测试,可以避免因为配置原因流量不通,影响RFC 2544测试. 而且创建流量的时候,可以编辑报文,例如增加TCP/ ...

  2. iOS自动化测试驱动工具探索

    本文主要介绍了字节 iOS 自动化测试驱动工具的探索过程及实现原理 作者:字节跳动终端技术--陈友辉 一.背景 随着业务的扩张,单个 App 的功能越来越多,工程复杂度越来越高,每天MR可达上百次,代 ...

  3. selenium+python自动化105 - selenium 如何在已打开的浏览器上继续运行自动化脚本?

    前言 使用selenium 做web自动化的时候,经常会遇到这样一种需求,是否可以在已经打开的浏览器基础上继续运行自动化脚本? 这样前面的验证码登录可以手工点过去,后面页面使用脚本继续执行,这样可以解 ...

  4. k8s全方位监控-prometheus-配置文件介绍以及基于文件服务发现

    1.scrape_configs 参数介绍 # 默认的全局配置 global: scrape_interval: 15s # 采集间隔15s,默认为1min一次 evaluation_interval ...

  5. Go基础知识梳理(一)

    Go基础知识梳理(一) Go中package的用法及作用 package hello 用于分包,Go通过包来管理命名空间 import ( "hello" //通过import关键 ...

  6. CSDN中Markdown编辑器使用方法

    Markdown编辑器 如果想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识. 新的改变 CSDN中Markdown编辑器进行了一些功能拓展与语法支 ...

  7. VirtualBox--修改虚拟硬盘大小

    学习:Oracle VM VirtualBox做好虚拟硬盘后,如何进一步修改虚拟硬盘的大小 修改为50G,修改后在虚拟机中查看:Machine→Settings→Storage VBoxManage ...

  8. selenium+python操作浏览器

    前面已经把环境搭建好了,下面我们就正式学习selenium的webdriver框架.本篇主要讲如何用Python调用webdriver框架的API,对浏览器做一些基本的操作,如打开.前进.后退.刷新. ...

  9. Mysql引擎、隔离机制、存储结构、索引

    目录 数据库常用的两种引擎 两种引擎差异对比 如何选择引擎 两个引擎索引结构 查找mysql数据存储位置方式 MyISAM InnoDB 1. 非独立表空间 2. 独立表空间 3. idb文件存的哪些 ...

  10. PHP pdf转png windows版本

    链接:https://pan.baidu.com/s/1Bli-2HkucRTYTeujkcsmjg&shfl=sharepset 提取码:2une 1.php_imagick扩展 (1)下载 ...