ZooKeeper 的羊群效应】的更多相关文章

一个需要避免的问题是当一个特定的znode 改变的时候ZooKeper 触发了所有watches 的事件. 举个例子,如果有1000个客户端watch 一个znode的exists调用,当这个节点被创建的时候,将会有1000个通知被发送.这种由于一个被watch的znode变化,导致大量的通知需要被发送,将会导致在这个通知期间的其他操作提交的延迟.因此,只要可能,我们都强烈建议不要这么使用watch.仅仅有很少的客户端同时去watch一个znode比较好,理想的情况是只有1个. 举个例子,有n…
本文(转自:http://jm-blog.aliapp.com/?p=2554)主要讲述在使用ZooKeeper进行分布式锁的实现过程中,如何有效的避免“羊群效应( herd effect)”的出现. 一般的分布式锁实现 这里简单的讲下一般的分布式锁如何实现.具体的代码实现可以在这里看到:https://svn.apache.org/repos/asf/zookeeper/trunk/src/recipes/lock/ 在之前的<ZooKeepe数据模型>一文中提到过,zookeeper中节点…
zookeeper 实现分布式锁,监听前一个节点来避免羊群效应, 思路:很简单,但是实现起来要麻烦一些, 而且我也是看了很多帖子,发现很多帖子的代码,下载下来逐步调试之后发现,看起来是对的,但在并发情况下运行,就会出现问题. 有的在代码里其实并没有真正实现(监听前一个节点), 接下来分享一个: 真正的zookeeper 分布式锁: 这个也是别人的代码,自己只是搬运工,很遗憾,我自己写的分布式锁,看起来是对的,但是出现了并发问题, package tech.codestory.zookeeper.…
羊群效应(Herd Behavior) 来自于大洋彼岸的让你看不懂的解释: “羊群效应”,也叫“从众效应”,是个人的观念或行为由于真实的或想像的群体的影响或压力,而向与多数人相一致的方向变化的现象.表现为对特定的或临时的情境中的优势观念和行为方式的采纳(随潮)表现为对长期性的占优势地位的观念和行为方式的接受(顺应风俗习惯).人们会追随大众所同意的,将自己的意见默认否定,且不会主观上思考事件的意义.无论意识到与否,群体观点的影响足以动摇任何抱怀疑态度的人.群体力量很明显使理性判断失去作用.经济学中…
选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客户端创建一个子节点"/election/guid-n_",并同时使用Sequence和Ephemeral标志.使用sequence标志后ZooKeeper会自动递增序列号.拥有最小编号的节点就是主节点. 这还不是全部,同时还需要watch主节点的失效,在当前主节点失效后,会产生新的主节点.…
锁 全局式分布式锁要求任何时刻没有两个客户端会获得同一个锁对象,这可以通过使用ZooKeeper实现.像优先级队列一样,首先需要定义一个锁节点. 在ZooKepeer的发布中src/recipes/lock(https://github.com/apache/zookeeper/tree/master/src/recipes/lock)的目录有ZooKeeper的Lock实现. 要获得锁的客户端进行如下操作: 1.调用Create方法并使用"_locknode_/guid-lock-"…
ZooKeeper高级应用 本系列将指导使用ZooKeeper来实现高级功能,所有功能都在客户端完成,不需要ZooKeeper的特殊支持.希望可以得到社区的支持将这些加入到一个标准的客户端类库中(Curator已经实现了除两阶段提交的功能). ZooKeeper最有意思的一点是,即便ZooKeeper使用异步通知,你可以使用这点来构建同步的一致性元素,如队列,锁等.你将会看到,ZooKeeper强制使用全局的更新顺序,并有机制用于广播这个顺序. 值得记录的是,本recipes尝试使用最佳实践.特…
一.前言 在上一篇博客已经介绍了Zookeeper开源客户端的简单实用,本篇讲解Zookeeper的应用场景. 二.典型应用场景 Zookeeper是一个高可用的分布式数据管理和协调框架,并且能够很好的保证分布式环境中数据的一致性.在越来越多的分布式系统(Hadoop.HBase.Kafka)中,Zookeeper都作为核心组件使用. 2.1 数据发布/订阅 数据发布/订阅系统,即配置中心.需要发布者将数据发布到Zookeeper的节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配…
ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby.今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,第二部分介绍ZooKeeper提供的Client API的使用,第三部分介绍一些ZooKeeper典型的应用场景. ZooKeeper基本原理 1. 数据模型 如上图所示,ZooKeeper数据模型的结构与Unix文…
在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper的官方recipe. 锁(Lock) 完全分布式锁是全局同步的,这意味着在任何时刻没有两个客户端会同时认为它们都拥有相同的锁,使用 Zookeeper 可以实现分布式锁,需要首先定义一个锁节点(lock root node). 需要获得锁的客户端按照以下步骤来获取锁: 保证锁节点(lock root…