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用 ...
随机推荐
- jquery中的$(document).ready()、JavaScript中的window.onload()以及body中的onload()、DomContentLoaded()区别
$().ready().$(handler).$(document).ready(handler)均不是原生JS中的,都是jQuery中封装的方法.这些事件在当页面的dom节点加载完毕后就执行,无需等 ...
- 浮点数(floating-point number)二进制存储格式
定义 浮点数就是小数点位置不固定的数,也就是说与定点数不一样,浮点数的小数点后的小数位数可以是任意的,根据IEEE754-1985(也叫IEEE Standard for Binary Floatin ...
- Python—列表(一个“打了激素”的数组)
我们在C语言中会使用数组来将一大堆数据类型一样的数据挨个摆在一起,但是数组有一个基本的要求,就是数据类型必须是一致的,我们知道Python的变量由于没有数据类型,也就是说Python没有数组这一概念, ...
- TCP系列15—重传—5、Linux中RTO的计算
之前我们介绍的都是协议中给出的RTO计算方法,下面我们看一下linux实现中RTO的计算方法.在linux中维护了srtt.mdev.mdev_max.rttvar.rtt_seq几个状态变量用来计算 ...
- 用SC命令 添加或删除windows服务提示OpenSCManager 失败5 拒绝访问
在安装命令行中安装 windowsOpenSCManager 失败5 的错误,原因是当前用户的权限不足,需要做的是在注册表 HKEY_LOCAL_MACHINE\Software\Microsof ...
- Jenkins系列-Jenkins忘记密码的修复方法
找回 admin 用户的密码后,可以登录系统修改其他用户的密码. 1. Jenkins 目录结构 Jenkins 没有使用数据库,所有的信息都保存在 JENKINS_HOME 目录下的文件中.其中 J ...
- Python自定义包在linux服务器导入错误的解决办法
在本地机器上跑python代码,自己定义的文件进行导包运行是没有问题,但是放到linux服务器上的时候就会提示 ImportError:No module named xxxx(要导入的文件包名) 在 ...
- java.awt.AWTError: Can't connect to X11 window server using ':20' as the value of the DISPLAY variable
1.使用pio在Linux服务器上创建window文件时,需要使用到Linux的图形界面服务,出现以下问题需确认用户权限. 参考文献:https://zhidao.baidu.com/question ...
- VBA 实现学校上课教员一学期中所有上课时间,在一页中通过背景底色反应出来
需求:学校一学期的所有课程表,每个教员都有可能上好几门课,但给一个教员调课时需要查找所调课时间位置有没有此教员上其它的课 相冲突,手动查找很不方便,这里想通过一个表中位置显示出同一教员在所有课表中出现 ...
- 【hackerrank】Week of Code 26
在jxzz上发现的一个做题网站,每周都有训练题,题目质量……前三题比较水,后面好神啊,而且类型差不多,这周似乎是计数专题…… Army Game 然后给出n*m,问需要多少个小红点能全部占领 解法:乘 ...