除了leader和follow模式之外,还有第三种模式:observer模式。observer和follower在一些方面是一样的。详细点来讲,他们都向leader提交proposal。但与follower不同,observer不参与投票的过程。它简单的通过接收leader发过来的INFORM消息来learn已经commit的proposal。因为leader都会给follower和observer发送INFORM消息,所以它们都被称为learner。
INFORM消息背后的原理
因为observer不会接收proposal并参与投票,leader不会发送proposal给observer。leader发送给follower的commit消息只包含zxid,并没有proposal本身。所以,只发送commit消息给observer则不会让observer得知已提交的proposal。这就是使用INFORM消息的原因,此消息本质上是一个包含了已被commit的proposal的commit消息。
简而言之,follower会得到两个消息,而observer只会得到一个。follower通过广播得到proposal的内容,接下来获得一个简单commit消息,此消息只包含了zxid。相反,observer得到一个包含了已被commit的proposal的INFORM消息。
参与了决定是否commit一个proposal的投票的server就称为PARTICIPANT server,leader和follower都属于这种server。observer则称为OBSERVER server。
使用observer模式的一个主要的理由就是对读请求进行扩展。通过增加更多的observer,可以接收更多的请求的流量,却不会牺牲写操作的吞吐量。注意到写操作的吞吐量取决于quorum的size。如果增加更多的server进行投票,quorum会变大,这会降低写操作的吞吐量。然而增加observer并不会完全没有损耗,每一个新的observer在每提交一个事务后收到一条额外的消息,这就是前面提到的INFORM消息。这个损耗比起加入follower来投票来说损耗更少。
使用observer的另一个原因是跨数据中心部署。把participant分散到多个数据中心可能会极大拖慢系统,因为数据中心之间的网络的延迟。使用observer的话,更新操作都在一个单独的数据中心来处理,并发送到其他数据中心,让其他数据中心的client消费数据。阿里开源的跨机房同步系统Otter就使用了observer模式,可以参考。
注意observer的使用并无法完全消除数据中心之间的网络延迟,因为observer不得不把更新请求转发到另一个数据中心的leader,并处理INFORM消息,网络速度极慢的话也会有影响,它的优势是为本地读请求提供快速响应。
配置
为了使用observer模式,在任何想变成observer模式的配置文件中加入如下配置:
peerType=observer
并在所有server的配置文件中,配置成observer模式的server的那行配置追加:observer,例如:
server.1:localhost:2181:3181:observer
相关推荐
Zookeeper可以进行集群的配置管理,名字服务,分布式锁,集群管理等等
3天精通zookeeper视频详细讲解,需要的小...observer角色及其配置 zookeeperAPI连接集群 zookeeper 开源客户端curator介绍 zookeeper四字监控命令 zookeeper图形化的客户端工具(ZooInspector) taokeeper监控工具的使用
有关zookeeper本地伪集群搭建的配置有关zookeeper本地伪集群搭建的配置有关zookeeper本地伪集群搭建的配置
zookeeper-3.5.3-beta集群配置同一台linux系统搭建zookeeper集群端口从2181至2185
可以建⽴立在同步、配置管理、分组和命名等服务的更⾼高级别的实现的基础之上。 ZooKeeper 意欲设计⼀一个易于编程的环境,它的⽂文件系统使⽤用我们所熟悉的⽬目录树结构。 ZooKeeper 使⽤用 Java 所编写,但是⽀...
自己整理的ZooKeeper学习笔记,适合刚刚接触ZooKeeper的人学习
Zookeeper单机及集群安装配置
zookeeper集群zoo.cfg配置文件,下载后将zookeeper地址改成实际地址,可以直接使用
NULL 博文链接:https://mazhilin.iteye.com/blog/2415590
安装和配置kafka:1 vim config/ server.properties2 数字改成zookeeper对应的myid数字3 是本机ip,端口不要改4
zookeeper集群配置详解 详细描述在linux集群环境中搭建zookeeper的步骤
ZooKeeper安装配置 集群ZooKeeper安装配置 集群ZooKeeper安装配置 集群ZooKeeper安装配置 集群ZooKeeper安装配置 集群ZooKeeper安装配置 集群ZooKeeper安装配置 集群ZooKeeper安装配置 集群ZooKeeper安装配置 集群...
zookeeper学习笔记
zookeeper配置文件.zip
大数据技术基础实验报告-Zookeeper的安装配置和应用实践
zookeeper3.4.14安装包和配置文件zoo.cfg, 安装流程请查看我的博客。
一款好用的zookeeper配置内容导入导出工具,适用平台是windows,但是也可以修改run.bat为shell脚本,适合linux。 带图形界面,修改config中的config.xml,添加需要管理的zookeeper地址信息,同时可以定义两个用户...
一、实验要求 完成Zookeeper的完全分布模式的安装 Zookeeper服务能够正常... Zookeeper采用的投票算法要求至少有3个及其以上的服务节点,且服务节点为奇数时为最有效的配置,所以将集群的五台主机全部作为服务节点。
由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:**配置维护、组服务、分布式消息队列**、**分布式通知/协调**等。ZooKeeper在实现这些服务时,首先它设计一种新的**数据...
在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在...