zookeeper学习笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Container: 服务运行容器。
1. 调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。 1. 服务提供者在启动时,向注册中心注册自己提供的服务。 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
态下,至少有一个机器保存最新的状态,,其余副本也会更新到这个最新状态。


如何实现:Zab协议
阶段一:领导者选举 阶段二:原子广播
Page 15
Zookeeper


会话
故障切换 时间:tick time,用于设臵交互时间表,其他设臵基本上依赖这个参数
Page 16
Zookeeper



1.
2. 3. 4. 1. 2. 3.
Page 3
简单介绍dubbo+zookeeper

1.
概念
Dubbo:是一个分布式服务框架,致力于提供高性能和透明化的 RPC(Remote Procedure Call Protocol)远程服务调用方案,以及
SOA(Service-Oriented Architecture )服务治理方案。
7.注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
其他可扮演注册中心的技术:redis
Page 6
简单介绍dubbo+zookeeper
dubbo使用zookeeper客户端的一个bug
dubbo目前支持使用的zookeeper客户端有两个:Zkclient和curator,Zkclient 是其默认的客户端。 bug描述:dubbo在ZookeeperRegistry这个类中显示依赖了Zkclient的异常类, 导致在缺失Zkclient包的时候使用zookeeper注册中心报错。解决办法是去掉这个显 示依赖,或者在使用curator的时候也引入Zkclient包。 指定使用curator需要使用client属性,如下: <!-- 使用注册中心暴露服务地址 --> <dubbo:registry id="curator" address="zookeeper://127.0.0.1:2181" client="curator"/> <dubbo:registry id="zkclient" address="zookeeper://127.0.0.1:2181" client="zkclient"/>
现异常,你可能要打个断点,跟踪这个程序的运行逻辑。也许你可以直接将异常信息复制到网上搜索 答案,但实际上,只不过是别人替你去做了那个工作。 而我关于zookeeper的学习是从dubbo的一个bug开始的,按照下面的任务顺序去学习并解决问题: 1.dubbo bug ,zkclient共存; 2.zookeeper API的使用; 3.使用zookeeper进行配臵管理,修改配臵不用重启应用。
Page 7
简单介绍dubbo+zookeeper


dubbo同时使用两套client的解决办法(没有什么意义)
问题描述:如果在一个服务中同时指定用Zkclient和curator,则实际上只会 用到一个。 解决办法:增加key值判断。AbstractRegistryFactory.getRegistry方法。
Page 2
目录

1.
简单介绍dubbo+zookeeper 概念 zookeeper在dubbo中的角色 dubbo使用zookeeper客户端的一个bug dubbo同时使用两套client的解决办法(没有什么意义)
2. 3. 4. 5.
扯一下使用maven插件修复开源应用bug的技巧
Zookeeper 概述 典型应用场景 数据模型 操作 实现 一致性 会话 安装与配臵 Zookeeper客户端curator
一致性
Zab协议导致了Zookeeper的一致性问题。 解决一致性:每一个对znode的树的更新状态都被赋予一个全局唯一 zxid,zookeeper对其进行排序,越小,则发生越早。 zookeeper的几点考虑:顺序一致性,原子性,单一系统映象,持久性, 及时性 注:使用sync来解决跨过Zookeeper的机制进行通信导致的数据不一致。
Page 18
Zookeeper



操作
api
对于Zookeeper的客户端来说,主要有两种语言绑定:Java和C,也可以使用其他的语言,如 Perl,Pythod等。对于各种语言的绑定使用,可参考:
https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZKClientBindings
Page 5
简单介绍dubbo+zookeeper

zookeeper在dubbo中的角色
1.注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转
发请求,压力较小
3.zookeeper的角色:注册中心
2.监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
Page 13
Zookeeper

数据模型
二.znode的一些性质 1.znode的两种类型:短暂的和持久的。该类型在创建时确定,之后不能再修改。 短暂znode不能有子节点。(短暂znode应用:需要知道特定时刻有哪些分布式资源可用的应用,
如组成员管理服务。)
2.顺序号:在创建znode的时候,我们可以设臵顺序标识,这样创建的zonde名称 后面会附加一个值(单调递增),这个值便是顺序号,由其父节点维护。(顺序znode的应用: 共享锁。) 3.观察(watch):当znode以某种方式发生改变时,这种机制可以让客户端得到
服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销 3.服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时 间包含网络开销 4.注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 5.注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者 6.注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
2.
zookeeper:是一个分布式协调服务。
Page 4
简单介绍dubbo+zookeeper

1.
zookeeper在dubbo中的角色
节点角色说明:
Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。

Page 8
简单介绍dubbo+zookeeper
扯一下使用maven修复开源应用bug的技巧
当我们修改了一个开源应用的bug,怎么把修改后的文件合到jar包里面去?一个比 较靠谱的方式就是使用maven的maven-shade-plugin插件,在打包是过滤掉原有jar 包中要替换的文件。 可参考:http://maven.apache.org/plugins/maven-shade-plugin/shademojo.html maven的另外一个打包插件:maven-assembly-plugin,可参考: http://maven.apache.org/plugins/maven-assembly-plugin/ 最后,关于dubbo,提供一篇很好的文章: http://my.oschina.net/candiesyangyang/blog/202320 ( 这篇文章对于dubbo的性能优化是很不错的参看)


队列管理
组成员关系(Group Membership)
Page 12
Zookeeper

数据模型
前面提到Zookeeper的核心就是文件系统,所以掌握Zookeeper就必须了解它的数据模 型。类似于unix的文件系统,它维护着一个属性层次结构,树中的节点被称为znode,znode可 以用来存储数据,并且与之关联一个ACL(Access Control List )。
2015-2-9
zookeeper学习笔记
2014-10-29
我们都知道,想要打败一个强悍的对手,那你就要寻找他的弱点,而要知道他弱点,你就得了解他,也 许他的弱点只是一个很小的点,但为此你得付出更多。就像一个黑客,为了找到一个漏洞,他必须尝
试着用各种方式去嗅探,直到达到目的。做技术也是一样,当你遇到一个问题时,比如程序运行时出
一.和标准文件系统的区别:
1.一个znode既可以是文件也可以是目录; 2.每个znode存储的数据有限,不超过1M(zookeeper有内臵的检查)。 3.Zookeeper中的文件系统路径是绝对路径,必须以“/”开头,而且路径必须是 标准的,即不能包含像unix那样可以表示当前路径或者当前路径上一级目录的符合“.”或“..”
通知。(应用:配臵管理,后面将配臵管理的时候,具体去讲)
Page 14
Zookeeper




实现
zookeeper支持单机模式,也支持集群(复制)模式。
两个注意点:
1.只要集群中半数以上的机器处于可用状态,它就能提供服务;

百度文库
2.它确保最znode树中的每一个修改都会被复制到集群中半数以上的机器。因此能确保在可用状
外的抽象操作,如排序,通知和监控。
节点存储的数据主要包括:status information, configuration, location information, etc.
Page 11
Zookeeper


典型应用场景
统一命名服务(Name Service) 配臵管理(Configuration Management) Leader Election 共享锁(Locks)

ctx);
Page 19
Zookeeper



操作
观察触发器
在读操作 exists、getChildren和getData上可以设臵观察,这些观察可以被写操作create、delete和setData
触发。注:ACL的相关操作不参与任何观察。下表是设臵观察的操作及其对应的触发器:
Page 9
简单介绍dubbo+zookeeper


问题
dubbo为什么要使用注册中心? 点对点直连方式: http://blog.csdn.net/ichsonx/article/details/39008541

Page 10
Zookeeper

概述
Zookeeper作为注册中心的概念其实是抽象的,官方说明:ZooKeeper is a high-performance coordination service for distributed applications.其实它 的核心是一个精简的文件系统,提供基于目录节点树方式的数据存储,以及一些额
api的调用有同步和异步两种方式。异步操作的结果使用回调来传送。 如:同步方式:public void exists(String path,Watcher watcher; 异步方式:public void exists(String path,Watcher watcher,StatCallback cb,Object


Page 17
Zookeeper


操作
Zookeeper中有九种基本操作。
操作 create delete exists getACL,setACL getChildren getData,setData sync
描述
创建一个znode(必须要有父节点,创建时可以设置数据) 删除一个znode(该znode不能有任何子节点) 测试一个znode是否存在并且查询它的元数据 获取/设置一个znode的ACL 获取一个znode的子节点列表 获取/设置一个znode所保存的数据 将客户端的znode试图与ZooKeeper同步
相关文档
最新文档