版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-7-6zookeeperzookeeper学习笔记学习笔记2014-10-29Page 2 我们都知道,想要打败一个强悍的对手,那你就要寻找他的弱点,而要知道他弱点,你就得了解他,也许他的弱点只是一个很小的点,但为此你得付出更多。就像一个黑客,为了找到一个漏洞,他必须尝试着用各种方式去嗅探,直到达到目的。做技术也是一样,当你遇到一个问题时,比如程序运行时出现异常,你可能要打个断点,跟踪这个程序的运行逻辑。也许你可以直接将异常信息复制到网上搜索答案,但实际上,只不过是别人替你去做了那个工作。 而我关于zookeeper的学习是从dubbo的一个bug开始的,按照下面的任务顺序去学习并解
2、决问题: 1.dubbo bug ,zkclient共存; 2.zookeeper API的使用; 3.使用zookeeper进行配置管理,修改配置不用重启应用。Page 3目录n简单介绍简单介绍dubbo+zookeeperl 概念概念l zookeeper在在dubbo中的角色中的角色l dubbo使用使用zookeeper客户端的一个客户端的一个bugl dubbo同时使用两套同时使用两套client的解决办法(没有什么意义)的解决办法(没有什么意义)l 扯一下使用扯一下使用maven插件修复开源应用插件修复开源应用bug的技巧的技巧nZookeepern 概述概述n 典型应用场景典型应
3、用场景n 数据模型数据模型n 操作操作n 实现实现n 一致性一致性n 会话会话n 安装与配置安装与配置n Zookeeper客户端客户端curator l Page 4简单介绍dubbo+zookeeperl概念概念lDubbo:是一个分布式服务框架,致力于提供高性能和透明化的是一个分布式服务框架,致力于提供高性能和透明化的RPC(Remote Procedure Call Protocol)远程服务调用方案,以及远程服务调用方案,以及SOA(Service-Oriented Architecture )服务治理方案。服务治理方案。lzookeeper:是一个分布式协调服务。:是一个分布式协调
4、服务。Page 5简单介绍dubbo+zookeeperl zookeeper在在dubbo中的角色中的角色l 节点角色说明:节点角色说明: Provider: 暴露服务的服务提供方。暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。统计服务的调用次调和调用时间的监控中心。 Container: 服务运行容器。服务运行容器。l调用关系说明:调用关系说明: 0. 服务容器负责启动,加载,运行服务提供者。服务容器负责启动
5、,加载,运行服务提供者。 1. 服务提供者在启动时,向注册中心注册自己提供的服务。服务提供者在启动时,向注册中心注册自己提供的服务。 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。服务消费者在启动时,向注册中心订阅自己所需的服务。 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。服务消费者,从提供者地址列表中,基于软负载均衡算法,
6、选一台提供者进行调用,如果调用失败,再选另一台调用。 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。Page 6简单介绍dubbo+zookeeperl zookeeper在在dubbo中的角色中的角色l zookeeper的角色:注册中心的角色:注册中心 1.注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心
7、交互,注册中心不转发请求,压力较小求,压力较小 2.监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销 3.服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包服务消费者向注册中心获取服务提供者地址列表,并根据
8、负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销含网络开销 4.注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 5.注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者 6.注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表 7.注册中心和监控中心都
9、是可选的,服务消费者可以直连服务提供者注册中心和监控中心都是可选的,服务消费者可以直连服务提供者 其他可扮演注册中心的技术:其他可扮演注册中心的技术:redisPage 7简单介绍dubbo+zookeeperldubbo使用使用zookeeper客户端的一个客户端的一个bug dubbo目前支持使用的目前支持使用的zookeeper客户端有两个:客户端有两个:Zkclient和和curator,Zkclient是其默认是其默认的客户端。的客户端。 bug描述:描述:dubbo在在ZookeeperRegistry这个类中显示依赖了这个类中显示依赖了Zkclient的异常类,导致在的异常类,导
10、致在缺失缺失Zkclient包的时候使用包的时候使用zookeeper注册中心报错。解决办法是去掉这个显示依赖,注册中心报错。解决办法是去掉这个显示依赖,或者在使用或者在使用curator的时候也引入的时候也引入Zkclient包。包。 指定使用指定使用curator需要使用需要使用client属性,如下:属性,如下: Page 8简单介绍dubbo+zookeeperldubbo同时使用两套同时使用两套client的解决办法(没有什么意义)的解决办法(没有什么意义)l问题描述:如果在一个服务中同时指定用问题描述:如果在一个服务中同时指定用Zkclient和和curator,则实际上只会用则实
11、际上只会用到一个。到一个。l解决办法:增加解决办法:增加key值判断。值判断。AbstractRegistryFactory.getRegistry方法。方法。Page 9简单介绍dubbo+zookeeperl扯一下使用扯一下使用maven修复开源应用修复开源应用bug的技巧的技巧 当我们修改了一个开源应用的当我们修改了一个开源应用的bug,怎么把修改后的文件合到怎么把修改后的文件合到jar包里面去?一个比较靠包里面去?一个比较靠谱的方式就是使用谱的方式就是使用maven的的maven-shade-plugin插件,在打包是过滤掉原有插件,在打包是过滤掉原有jar包中要包中要替换的文件。替换
12、的文件。 可参考:可参考:/plugins/maven-shade-plugin/shade-mojo.html maven的另外一个打包插件:的另外一个打包插件:maven-assembly-plugin,可参考:,可参考: /plugins/maven-assembly-plugin/ 最后,关于最后,关于dubbo,提供一篇很好的文章:提供一篇很好的文章:http:/ ( 这篇文章对于这篇文章对于dubbo的性能优化是很不错的参看)的性能优化是很不错的参看)Page 10简单介绍dubbo+zooke
13、eperl问题问题ldubbo为什么要使用注册中心?为什么要使用注册中心?l点对点直连方式:点对点直连方式:http:/ 11Zookeeperl概述概述 Zookeeper作为注册中心的概念其实是抽象的,官方说明:作为注册中心的概念其实是抽象的,官方说明:ZooKeeper is a high-performance coordination service for distributed applications.其实它的核心是一个精简其实它的核心是一个精简的文件系统,提供基于目录节点树方式的数据存储,以及一些额外的抽象操作,如的文件系统,提供基于目录节点树方式的数据存储,以及一些额外的抽
14、象操作,如排序,通知和监控。排序,通知和监控。 节点存储的数据主要包括:节点存储的数据主要包括:status information, configuration, location information, etc.Page 12Zookeeperl典型应用场景典型应用场景l 统一命名服务(统一命名服务(Name Service)l 配置管理(配置管理(Configuration Management)l Leader Electionl 共享锁(共享锁(Locks)l 队列管理队列管理l 组成员关系(组成员关系(Group Membership)Page 13Zookeeperl数据模型数
15、据模型 前面提到前面提到Zookeeper的核心就是文件系统,所以掌握的核心就是文件系统,所以掌握Zookeeper就必须了解它的数据模型。类就必须了解它的数据模型。类似于似于unix的文件系统,它维护着一个属性层次结构,树中的节点被称为的文件系统,它维护着一个属性层次结构,树中的节点被称为znode,znode可以用来存可以用来存储数据,并且与之关联一个储数据,并且与之关联一个ACL(Access Control List)。)。 一一.和标准文件系统的区别:和标准文件系统的区别: 1.一个一个znode既可以是文件也可以是目录;既可以是文件也可以是目录; 2.每个每个znode存储的数据有
16、限,不超过存储的数据有限,不超过1M(zookeeper有内置的检查)。有内置的检查)。 3.Zookeeper中的文件系统路径是绝对路径,必须以中的文件系统路径是绝对路径,必须以“/”开头,而且路径必须是标准的,即开头,而且路径必须是标准的,即不能包含像不能包含像unix那样可以表示当前路径或者当前路径上一级目录的符合那样可以表示当前路径或者当前路径上一级目录的符合“.”或或“.”Page 14Zookeeperl数据模型数据模型 二二.znode的一些性质的一些性质 1.znode的两种类型:短暂的和持久的。该类型在创建时确定,之后不能再修改。短暂的两种类型:短暂的和持久的。该类型在创建时
17、确定,之后不能再修改。短暂znode不能有子节点。(短暂不能有子节点。(短暂znode应用:需要知道特定时刻有哪些分布式资源可用的应用,如应用:需要知道特定时刻有哪些分布式资源可用的应用,如组成员管理服务。)组成员管理服务。) 2.顺序号:在创建顺序号:在创建znode的时候,我们可以设置顺序标识,这样创建的的时候,我们可以设置顺序标识,这样创建的zonde名称后面会附名称后面会附加一个值(单调递增),这个值便是顺序号,由其父节点维护。(顺序加一个值(单调递增),这个值便是顺序号,由其父节点维护。(顺序znode的应用:共享的应用:共享锁。)锁。) 3.观察(观察(watch):当):当zno
18、de以某种方式发生改变时,这种机制可以让客户端得到通知。以某种方式发生改变时,这种机制可以让客户端得到通知。(应用:配置管理,后面将配置管理的时候,具体去讲)(应用:配置管理,后面将配置管理的时候,具体去讲)Page 15Zookeeperl实现实现lzookeeper支持单机模式,也支持集群(复制)模式。支持单机模式,也支持集群(复制)模式。l两个注意点:两个注意点:l1.只要集群中半数以上的机器处于可用状态,它就能提供服务;只要集群中半数以上的机器处于可用状态,它就能提供服务;l2.它确保最它确保最znode树中的每一个修改都会被复制到集群中半数以上的机器。因此能确保在可用状树中的每一个修
19、改都会被复制到集群中半数以上的机器。因此能确保在可用状态下,至少有一个机器保存最新的状态,其余副本也会更新到这个最新状态。态下,至少有一个机器保存最新的状态,其余副本也会更新到这个最新状态。l如何实现:如何实现:Zab协议协议l阶段一:领导者选举阶段一:领导者选举l阶段二:原子广播阶段二:原子广播Page 16Zookeeperl会话会话l故障切换故障切换l时间:时间:tick time,用于设置交互时间表,其他设置基本上依赖这个参数,用于设置交互时间表,其他设置基本上依赖这个参数Page 17Zookeeperl一致性一致性lZab协议导致了协议导致了Zookeeper的一致性问题。的一致性
20、问题。l解决一致性:每一个对解决一致性:每一个对znode的树的更新状态都被赋予一个全局唯一的树的更新状态都被赋予一个全局唯一zxid,zookeeper对其进行排序,越小,则发生越早。对其进行排序,越小,则发生越早。lzookeeper的几点考虑:顺序一致性,原子性,单一系统映象,持久性,的几点考虑:顺序一致性,原子性,单一系统映象,持久性,及时性及时性l注:使用注:使用sync来解决跨过来解决跨过Zookeeper的机制进行通信导致的数据不一致。的机制进行通信导致的数据不一致。Page 18Zookeeperl操作操作lZookeeper中有九种基本操作。中有九种基本操作。Page 19Z
21、ookeeperl操作操作lapil对于对于Zookeeper的客户端来说,主要有两种语言绑定:的客户端来说,主要有两种语言绑定:Java和和C,也可以使用其他的语言,如也可以使用其他的语言,如Perl,Pythod等。对于各种语言的绑定使用,可参考:等。对于各种语言的绑定使用,可参考:/confluence/display/ZOOKEEPER/ZKClientBindingslapi的调用有同步和异步两种方式。异步操作的结果使用回调来传送。的调用有同步和异步两种方式。异步操作的结果使用回调来传送。l如:同步方式:如:同步方式:public voi
22、d exists(String path,Watcher watcher;l异步方式:异步方式:public void exists(String path,Watcher watcher,StatCallback cb,Object ctx);Page 20Zookeeperl操作操作l观察触发器观察触发器l在读操作在读操作 exists、getChildren和和getData上可以设置观察,这些观察可以被写操作上可以设置观察,这些观察可以被写操作create、delete和和setData触发。触发。注:注:ACL的相关操作不参与任何观察。下表是设置观察的操作及其对应的触发器:的相关操作不参与任何观察。下表是设置观察的操作及其对应的触发器:Page 21Zookeeperl操作操作l安装与配置安装与配置 略略lweb界面界面 node-zk-browserl图形化界面图形化界面 ZooInspectorlzookeeper监控监控 taokeeper (运维关注运维关注) 63/taokeeper-monitor/zooKeeperStatus.do?method=showZooKeeperStatusPAGEPage 22Zookeeperl操作操作lACLl每个每
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年河北客运员考试题库及答案详解
- 醉翁亭记课件教学课件
- 延边州安图县1000亩蓝莓基地扩建项目可行性研究报告
- 2024年四川客运从业资格证考什么内容好
- 常用康复护理技术
- 四川省泸州高中2025届高三生物第一学期期末综合测试试题含解析
- 广东省百校联盟2025届高一上数学期末质量跟踪监视试题含解析
- 辽宁省沈阳市二十中学2025届生物高二上期末教学质量检测试题含解析
- 陕西省兴平市秦岭中学2025届英语高三第一学期期末调研试题含解析
- 2025届遂溪县第一中学高三生物第一学期期末检测试题含解析
- 二次结构工程技术标
- 半导体-硅片生产工艺流程及工艺注意要点
- 工地安全日志范例52007
- 《湖南省住宅工程质量通病防治技术规程》
- 服装质量控制及流程(共6页)
- 昆明地区废弃花卉秸秆资源化利用现状及建议
- 煤巷掘锚一体机化快速掘进技术与应用分析
- 有理数全章复习教案
- 《2021国标暖通图集资料》14K117-2 伞形风帽
- 低压配电房设备操作流程
- 机电管理安全技术措施及应急预案
评论
0/150
提交评论