Observers:让 ZooKeeper更具可伸缩性 | 时光机

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg

时光机:搭载这部时光机,带您回顾《程序员》大量优秀文章,重温经典技术干货,我们发现硬核技术永不过时,对于get要点、solve难题、提高自我,仍有非凡意义。


作者:Henry Robinson,Henry Robinson在纽约大学获得计算机科学学士学位,在剑桥大学获得语言。

译者:王旭

导读

时光机第02期,带您了解 ZooKeeper更具可伸缩性的优势。云计算时代,软件开发人员面临着越来越多分布式协作方面的问题。ZooKeeper是由Apache出品的一个分布式协作服务,新加入的Observer特性,进一步增强了ZooKeeper的可伸缩性。

ZooKeeper 是 由 Apache 出 品的一个分布式协作服务,用于实现锁和并发事务排队等协作原语。ZooKeeper 的一个优势是可伸缩性(Scalability)。五台或七台机器集群可以满足很多大型应用的需求。


最近我们给ZooKeeper增加了一个新的特性,进一步增强了它的可伸缩性—一种称为Observers的服务器。在这篇文章中,我想介绍一下添加这个特性的缘由,并解释这个服务器如何帮助我们的系统更具有可伸缩性。可伸缩性对不同的人意味着不同的事情,而在这里是说,如果我们的工作负载可以通过给系统分配更多的资源来分担,那么这个系统就是可伸缩的。一个不可伸缩的系统是无法通过增加资源来提升性能的,甚至会在工作负载增加时,性能急剧下降。


要了解Observers为何能影响ZooKeeper的可伸缩性,我们需要首先了解一下这个服务是如何工作的。宽泛地说,ZooKeeper 集群上的任何操作不是读操作就是写操作。ZooKeeper 确保了所有读和写操作在所有客户端看来具有完全相同的顺序,这样他们就不用再为操作的顺序而困惑了。


在提供强一致性保障的同时,ZooKeeper同时给出高可用性承诺,这可以被简单地解释为它可以在多台服务器失效的情况下仍然为客户端提供服务。ZooKeeper使用一个传统的手段来达到可用性——通过将数据读写分布到几台机器上来实现。这样一来如果其中一台机器失效了,其他的可以接管它的服务,而这一切对客户而言是不可见的。然而,一致性和可用性这两个属性是很难同时达到的。


目前,ZooKeeper必须确保集群中的每个副本都对读写操作是顺序性的。它通过一个一致性协议来达到这一目标。简单地说,这个协议由一个选定的领导者将新操作告诉其他服务器, 所有节点投票支持的方式反馈给领导节点。一旦领导节点收集到过半数的投票,它就认为投票已经获得了通过,并将进一步消息传送给服务器,以使它们可以继续工作,将操作提交到内存中。


640?wx_fmt=jpeg


从始至终的数据流如图1所示。客户进程将一个值提交给它连接的服务器,服务器将消息转送给领导节点,并邮领导节点发起这个一致性协议,一旦最初的服务器从领导节点得到结果,它就可以返回给用户了。Observers的需求源于ZooKeeper服务器在上述协议中实际扮演了两个角色。它们从客户端接受连接与操作请求,之后对操作结果进行投票。这两个职能在 ZooKeeper集群扩展的时候彼此制约。如果我们希望增加ZooKeeper集群服务的客户数量(我们经常考虑到有上万个客户端的情况),那么我们必须增加服务器的数量,来支持这么多的客户端。


然而,从一致性协议的描述可以看到,增加服务器的数量增加了对协议的投票部分的压力。领导节点必须等待集群中过半数的服务器响应投票。于是,节点的增加使得部分计算机运行较慢,从而拖慢整个投票过程的可能性也随之提高,投票操作会随之下降。这正是我们在实际操作中看到的问题——随着ZooKeeper集群变大,投票操作的吞吐量会下降。所以,这让我们不得不在增加客户节点数量的期望和保持较好吞吐性能的期望间进行权衡。


为了打破这一耦合关系,我们引入了不参与投票的服务器,称为Observers。Observers可以接受客户端的连接,将写请求转发给领导节点。但是,领导节点不会要求Observers参加投票,所以,Observers不参与投票过程,而是和其他服务节点一起得到投票结果。


这个简单的扩展给ZooKeeper的可伸缩性带来了全新的景像。我们现在可以加入很多Observers节点,而无须担心严重影响写吞吐量。然而,规模伸缩并非无懈可击——协议中的一步(通知阶段)仍然与服务器的数量呈线性关系。


640?wx_fmt=jpeg


不过这里的串行开销非常低,我们可以认为在通知服务器阶段的开销无法成为主要瓶颈。图2显示了一个简单评测的结果,纵轴表示我能够从一个单一的客户端发出的每秒钟同步写操作的数量(一个调优的ZooKeeper可以得到更好的每秒钟操作数——这里我们更感兴趣的是相对值),横轴是ZooKeeper集群的尺寸。


蓝色部分表示每个服务器都是Voting服务器的情况,而绿色部分则只有三个是Voting服务器,其它都是Observers。测评结果显示我们扩充Observers,写性能几乎可以保持不变,但如果同时扩展Voting节点的数量的话,性能就会明显下降。Observers的有效性显而易见的,它们给集群带来了很多好处。


Observers同样提升读性能的可伸缩性


增加客户端的数量只是Observers的一个重要用例。作为一个优化,ZooKeeper 服务器可以直接读取它们的本地数据存储,而无须经过投票过程,这面临一定的“时光旅行”风险。可能在读到新值之后又读到老值,但这只在服务器故障时才会发生。事实上,在这种情况下客户端可以请求一个“sync”操作来保证下一个值是最新的。


因此,在大量读操作的工作负载下,Observers是个巨大的性能提升。写操作直接进入标准的投票路径,这样,与客户端可扩展性类似,提高投票服务器数量来承担读操作会影响写

性能。Observers允许我们将读性能和写性能分开。这适用于ZooKeeper的很多应用场景,大部分客户端很少写,但经常读。


Observers提供了广域网能力


Observers对于跨广域网连接的客户端来说是很好的候选方案。这有三个原因:首先,为了获得很好的读性能,有必要让客户端离服务器尽量近,这样往返时延不会太高。然而,

ZooKeeper集群分散到两个集群是非常不可取的设计,因为良好配置的ZooKeeper 应该让投票服务器间用低时延连接互联——否则我们将会遇到上面提到的低反应速度的问题。


其次,Observers可以被部署在需要访问ZooKeeper的任意数据中心中。这样,投票协议不会受到数据中心间链路的高时延的影响,性能得到提升。投票过程中Observers和领导节点间的消息远少于投票服务器和领导节点间的消息。这有助于在远程数据中心高写负载的情况下降低带宽需求。


最后,由于Observers即使失效也不会影响到投票集群,这样如果数据中心间链路发生故障,也不会影响到服务本身的可用性。这种故障的发生概率要远高于一个数据中心机架间的连接的故障概率,所以不依赖于这种链路是个优点。


如何开始使用Observers


O b s e r v e r s 还 没 有 成 为 某 个ZooKeeper release 的一部分,所以要使用它,你需要从 Subversion trunk 获取源代码。


下面的内容提取自Observers用户手册,可以在源代码的d o c s /zooKeeperObservers.html 文件中看到。


如何使用Observers


注意,在ZOOKEEPER-578 解决之前,你必须在每个服务器的配置文件中设置electionAlg=0 。否则当你启动服务的时候会抛出一个异常。


原因:Observers并不参与领导节点的选举,它们依赖于投票 Followers 来获知领导的变动。目前,只有基本 选 举 算 法 启 动 一 个 线 程 来 响 应Observers确定当前领导的请求。其他JIRA 上的工作将会让其他所有的领导选举协议都支持这一功能。


设置ZooKeeper使用Observers非常简单,只需要在配置文件中有两处改动。首先是每个 Observer 的配置文件中都要有这么一行:


peerType=observer


这行让服务器作为一个 Observer 来工作。之后,在每个服务器配置文件中,你必须在服务器定义行,给每个 Observer加入observer。比如:


server.1:localhost:2181:3181:observer


这让每个其他服务器知道 server.1是一个 Observer,就不会期望它进行投票了。这就是要加入一个 Observer 的时候,所有你需要做的配置。现在可以将它作为一个正常的 Follower 来看待了。可以这样试试:


bin/zkCli.sh -server

localhost:2181


这里 localhost:2181 是 Observer 在每个配置文件中指定的主机名和端口号。你应该看到命令行提示了,这时就可以查询ZooKeeper服务了。


下一步工作


Observers特性还有很多工作要做。短期内,我们将致力于让Observers与ZooKeeper中的所有领导选举算法完全兼容 —— 我们希望这个可以在未来几天内完成。长期看,我们希望能研究一下进行性能优化,比如基于Observers的集群的批量和离线读取,来更好地利用Observers不像一般ZooKeeper服务器一样严格要求时延的好处。


我们希望Observers能进入明年年初的ZooKeeper3.3.0。此外我们会很高兴能听到你的反馈,不管 是 在 邮 件 列 表 里 还 是 直 接 发 送E-mail。ZooKeeper 长期招募贡献

者,我们有足够多的有趣的问题来解决。


640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • VMware竟然出了一款防火墙

  • 技术头条

  • 你的 AI 老师已上岗

  • 技术头条

  • 助力 Android 抗衡 iOS,华为发布方舟编译器!

  • 程序员的黑砖窑,东南亚博彩骗局详解

  • 售价910元!周志华等人英文新书《演化学习》出炉!


640?wx_fmt=png真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业实战(Jenkins+GitLab+SonarQube)_10_Jenkins通过Depoly插件热部署Java程序

文章目录一、 编辑配置文件1.1. 进入tomcat的conf目录1.2. 编辑tomcat-users.xml文件1.3. 添加配置信息二、 配置说明三、 启动tomcat服务3.1. 启动tomcat3.2. 浏览器访问3.3. 点击Manager App访问4033.4. 编辑配置文件3.5. 注释value部分3.6. 浏览器再次请求四、新建任务&…

简述Qt编程中遇到的编码格式问题

提要 当文本中出现中文的时候,在两者之前的文本编码格式不一样的时候就会出现乱码。就像qt5默认的编码格式为utf-8,而Windows的开发环境默认的是gbk编码。 编码转化 utf-8编码于gbk编码的转换为下面截图中所示。 本文的作者也不是很清除编码格式这块…

苹果支付60亿美元与高通和解?亚马逊不再运营中国国内市场业务;华为愿同德国签“无间谍软件协议”;Facebook开发语音服务...

戳蓝字“CSDN云计算”关注我们哦!重磅先知亚马逊:从7月18日起将不再运营中国国内市场业务传Facebook开发语音服务:将与亚马逊和苹果Siri竞争瑞银预计苹果将向高通支付60亿美元和解金任正非:华为愿同德国签“无间谍软件协议”重磅快…

企业实战(Jenkins+GitLab+SonarQube)_11_Jenkins权限的划分

Jenkins 集成Role-based Authorization Strategy插件实现企业级权限管理 文章目录一、Jenkins权限简介:二、Role-based 插件下载和启用2.1. 下载安装2.2. Jenkins 启用Role-Based Strategy三、实战案例演示:3.1. 新建用户3.2. 创建角色3.2.1. 创建一个全…

漫威电影宇宙观影指南,口碑票房最佳都是谁

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作者:胡萝卜酱转自:DataGo数据狗美漫迷,尤其是漫威…

jenkins 远程启动tomcat报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

异常现象: jenkins 远程启动tomcat报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 解决方案: 在开始脚本前面添加java的变量 export JAVA_HOME/app/jdk1.8.0_144 export CLASSPATH.:$JAVA_HOME/lib/dt.ja…

漫话:如何给女朋友解释什么是乐观锁与悲观锁

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!最近,我和女朋友商量好,我负责制定行程,她负责购买…

云计算之基,一文带你速懂虚拟化KVM和XEN

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作者 :Pasca来源 :蛋蛋团正文 :共2022 字预计阅读时…

gradle下载及配置

下载:https://gradle.org/install/#manually 参考链接:https://www.cnblogs.com/linkstar/p/7899191.html 配置: 新建系统变量: GRADLE_HOME D:\Program Files\gradle-5.2.1编辑path,添加全局变量: ;%GRADLE_HOME%\…

qt自定义含有拖动功能的窗口在点击窗口的下拉列表时窗口移动

提要 自定义的弹出窗口,窗口可以实现按下鼠标拖动,鼠标释放停止拖动,窗口种含有子控件,下拉列表,在点击下拉列表时窗口移动。 解决方法 因为点击下拉列表的时候,触发了窗口的移动事件,所以添…

数字化转型2.0落地的正确姿势 | 人物志

戳蓝字“CSDN云计算”关注我们哦!人物志:观云、盘点、对话英雄。以云计算风云人物为核心,聚焦个人成长、技术创新、产业发展,还原真实与鲜活!如今,企业数字化转型已经进入2.0时代,数字化转型2.0…

新华三首发数字大脑计划;微软进军物联网领域?说好的三星折叠屏发布会,就这样不开了?Google 发布小型芯片 Jacquard...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 波音首席执行官“声明安全”…

OpenGL 图像白平衡色温

目录 一.OpenGL 图像白平衡色温 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 图像白平衡色温 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenG…

Linux6、7 系列 安装、卸载mysql

Linux环境下载mysql: 点击链接: https://blog.csdn.net/weixin_40816738/article/details/90111456 一、安装环境依赖: yum install -y cmake make gcc gcc-c libaio ncurses ncurses-devel二、安装流程 1、软件解压2、添加系统mysql组和m…

Kafka精华问答 | Kafka的主要应用场景有哪些?​

Kafka是最初由Linkedin公司开发,具有高性能、持久化、多副本备份、横向扩展能力。今天,我们就看看看关于Kafka的精华问答吧。1:Q:什么是Kafka?A:Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写…

强推!十大顶级大数据可视化工具 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦!程序员硬核评测:客观、高效、不说软话。无论是技术质量、性能水平,还是工具筛选,一测便知!编译作者:风车云马前言Salesforce公司的一项调查显示:53%的员工要经常…

代码版本管理 GitLab介绍

一、前言 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。 它拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的…

国内首款全国产固态硬盘控制芯片发布

4月22日,国科微与龙芯中科战略合作签约暨国内首款全国产固态硬盘控制芯片发布仪式在北京人民大会堂举行。双方将建立长期稳定的业务合作伙伴关系,携手打造关键信息基础设施国产化生态。作为首个战略合作成果,国科微发布全新的GK2302系列芯片&…

使用gitlab初次上传代码

提要 项目开发中需要使用gitlab来管理代码,将自己开发的模块上传到gitlab,第一次使用这个代码管理仓库,记录一下。 方法 1.首先注册gitlab的账号。这个在百度上搜一下gitlab的官网,进去后首页就是注册及登陆页面,没有账号的先注…

云数据库精华问答 | 现有数据库优化到云环境有什么好处​?

云数据库可以实现按需付费、按需扩展、高可用性以及存储整合等优势。我们就看看看关于云数据库的精华问答吧。1:Q:什么是云数据库?A:云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性…