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用 ...
随机推荐
- ServiceStack.Ormlit sqlserver枚举类型映射字段类型为varchar
请当枚举类型上面加上[Flags]特性就可以了.
- Thunder团队第二周 - Scrum会议2
Scrum会议2 小组名称:Thunder 项目名称:爱阅app Scrum Master:胡佑蓉 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...
- 第十九次ScrumMeeting会议
第十九次Scrum Meeting 时间:2017/12/9 地点:三公寓大厅 人员:蔡帜 王子铭 游心 解小锐 王辰昱 李金奇 杨森 陈鑫 赵晓宇 照片: 目前工作进展 名字 今日 明天的工作 蔡帜 ...
- Java常用类之String
String 类: 1. java.lang.String 类代表不可变的字符序列: 2. “XXX” 为该类的一个对象: 3. String 类的常用构造方法: ① String(String o ...
- spring框架(2)— 面相切面编程AOP
spring框架(2)— 面相切面编程AOP AOP(Aspect Oriented Programming),即面向切面编程. 可以说是OOP(Object Oriented Programming ...
- <Effective C++>读书摘要--Implementations<二>
<Item29> Strive for exception-safe code. 1.如下面的代码 class PrettyMenu { public: ... void changeBa ...
- <Effective C++>读书摘要--Introduction
Introduction 1.Learning the fundamentals of a programming language is one thing; learning how to des ...
- Shell脚本查看linux系统性能瓶颈
脚本目的:分析系统资源性能瓶颈 脚本功能: 1.查看CPU利用率与负载(top.vmstat.sar) 2.查看磁盘.Inode利用率与I/O负载(df.iostat.iotop.sar.dstat) ...
- 父类与子类的转换as,is
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- get computer system mac info in javascript
get computer system mac info in javascript Q: how to using js get computer system mac information? A ...