ZooKeeper观察者(十三)
观察者:扩展ZooKeeper而不影响写性能
尽管ZK运行地很好通过客户端直接连接来投票集群的成员,这个结构使它很难扩展出很多客户端。问题是当我们加入更多的投票成员时,写性能就会下降。这是因为一个写操作需要(通常)至少集群中一半的节点同意,并且投票的花费可能明显地增加当加入更多的投票者时。
我们已经引入一个新的Zk节点类型叫作观察者,它能帮助解决这个问题并且进一步地提高ZK的扩展性。观察者是集群中不投票的成员,只监听投票的结果,而不是同意协议通往他们。除了这一个小的不同点,观察者和追随者的功能几乎一样 - 客户端可以连接到他们并且发送读和写请求给他们。观察者推送这些请求给领导者就像追随者那样,但是他们然后简单地等待投票的结果。因为这个,我们可以想增加多少就可以增加多少观察者的数量而不影响投票的数量。
观察者还有另外一个优点。因为他们不参与投票,他们不是ZK集群的关键部分。因为他们可以失效,或者和集群失联,而不影响ZK服务的可用性。对用户来说好处是观察者可以通过不怎么可靠的网络连接相连。事实上,观察者可以被用来从另一个数据中心和ZK服务对话。观察者的客户端将看到很快地读,因为所有的读是在本地被服务的,并且写导致很小的网线影响因为消息需要的投票者存在的数量更少。
怎么使用观察者
启动一个ZK集群使用观察者是非常简单的,只需要对你的配置文件做两个改变。首先,在每一个想要成为观察者节点的配置文件中,你必须加入这一行:
peerType=observer
这一行告诉ZK这个服务端想要成为观察者。第二,在每一个服务端的配置文件中,你必须在每一个观察者的服务者定义那一行加入:observer。例如:
server.:localhost:::observer
这告诉每一个其它服务端server.1是一个观察者,并且他们应该不要求它来投票。这是所有你需要增加的配置。现在你可以连接上它就好像它是一个普通的追随者。试试。通过运行下面的命令:
bin/zkCli.sh -server localhost:
这里的localhost:2181是观察者的主机名和端口号,正如在每一个配置文件中指定的那样。你应该可以看到一个命令行提示,通过它你可以发起像ls的命令来查询ZK服务。
使用案例
下面列出了两个使用安全。事实上,在你想要扩展ZK集群的客户端数量的地方,或者你想从处理客户端请求的压力隔离关键集群的关键部分。观察者是一个好的选择。
- 作为一个数据中心桥梁:在两个数据中心之间组成一个ZK集群是一个有问题的努力,因为数据中心之间的很高的延迟可能导致假阳性的失效检测和隔离。然而如果如果集群完全运行在一个数据中心,并且第二个数据中心只运行观察者,隔离就不是集群关心的问题。观察者的客户端仍然可以看和发起建议。
- 作为到一个信息bus的连接 - 一些公司已经表示了使用ZK作为持续性可靠的消息bus的兴趣。对于这个工作观察者将给出一个自然地整个点:一个插件机制可以被使用来附加到建议的流上一个观察者看作一个发布-订阅系统,而不加载主要的集群。
ZooKeeper观察者(十三)的更多相关文章
- docker环境下分析zookeeper观察者角色
问题引入 zookeeper新引入的角色observer是不参与投票的,通过增加observer节点,可以在提高zk系统读吞吐量时,不影响写吞吐量. 那么问题来了 Zookeeper系统节点如果超过半 ...
- zookeeper中Watcher和Notifications
问题导读:1.zookeeper观察者什么时候调用?2.传统远程轮询服务存在什么问题?3.zk中回调服务的机制是什么?4.zk中watcher为什么不永久注册?5.什么是znode? 在阅读之前首先明 ...
- Consul 启动命令
服务端: nohup consul agent -server -bootstrap-expect 1 -config-dir /etc/consul.d/ -data-dir /var/opt/co ...
- ZooKeeper服务-操作(API、集合更新、观察者、ACL)
操作 create:创建一个znode(必须要有父节点)delete:删除一个znode(该znode不能有任何子节点)exists:测试一个znode是否存在并且查询它的元数据getACL,setA ...
- Zookeeper系列(十三)Zookeeper的请求处理
作者:leesf 掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6179118.html尊重原创,奇文共欣赏: 一.前言 在 ...
- Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移
文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...
- 从观察者设计模式的角度理解Zookeeper中的Watcher
前面关于Zookeeper提供的API中,可以观察到大部分接口参数似乎都是用了Wathcerz这个接口.这个在观察者模式中略有涉及,本文重点分析从观察者模式的角度分析该接口. 首先上该接口的UML图: ...
- Zookeeper那些事
一. 什么是Zookeeper Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务, ...
- ZooKeeper的原理(转)
一.ZooKeeper的角色 领导者(Leader),负责进行投票的发起和决议,更新系统状态. 学习者(Learner),包括跟随者(Follower)和观察者(Observer),Follower用 ...
随机推荐
- Simple layout
body { padding: 0; margin: 0; overflow: hidden; } div { display: block; position: relative; } .c ...
- POJ 3084 Panic Room(最大流最小割)
Description You are the lead programmer for the Securitron 9042, the latest and greatest in home sec ...
- 什么是Frozen Binary
对于Python来说,你可以将Python的字节码,PVM(也就是解析器),以及需要的相关类库,打包成一个package,这个package实际上是一个二进制可执行文件,这样,用户获取到这个packa ...
- Java中抽象类也能实例化
在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...
- iOS音频播放概述
在iOS系统中apple对音频播放需要的操作进行了封装并提供了不同层次的接口 下面对其中的中高层接口进行功能说明: Audio File Services:读写音频数据,可以完成播放流程中的第2步: ...
- TCP系列36—窗口管理&流控—10、linux下的异常报文系列接收
在这篇文章中我们看一下server端在接收到异常数据系列时的处理,主要目的是通过wireshark示例对这些异常数据系列的处理有一个直观的认识,感兴趣的自行阅读相关代码和协议,这里不再进行详细介绍 在 ...
- 3dContactPointAnnotationTool开发日志(十七)
今天又改进了一下算法,把生成出来的接触点按中心坐标拍了个序,再把中心坐标一样的坐标点合并,x,y,z每个维度都只保留大的值.然后来看看效果: 先是1倍的,只剩下4096个接触点了,2^12个, ...
- YaoLingJump开发者日志(七)
LGame用起来真是各种蛋疼,插背景都可以显示不出来.在屏幕结束后释放资源,重载该屏幕时再setbackground也不行,直接用Lpaper当background更不行,会把tilemap上的东 ...
- djano modles values+ajax实现无页面刷新更新数据
做项目的过程中想通过不刷新页面的方式来进行页面数据刷新,开始使用http://www.cnblogs.com/ianduin/p/7761400.html方式将查询结果数据进行序列化.发现可以行,但是 ...
- cacti 安装perl 和XML::Simple
一.安装perl #tar zxvf perl-5.20.1.tar.gz #cd perl-5.20.1 #./Configure -de #make #make test #make in ...