dubbo和zookeeper
dubbo 是一个远程调用服务的分布式框架,可以实现远程通讯、动态配置、地址路由等等功能。比如在入门demo里的暴露服务,使得远程调用的协议可以使用dobbo协议( dubbo://x.x.x.x )或者其它协议,可以配置zookeeper集群地址,实现软负载均衡并配置均衡方式等。在不搭配注册中心的时候,它也是可以实现服务端和调用端的通信的,这种方式是点对点通信的,所谓“没有中间商”。但是如果配置服务发布和调用端过多特别是集群的方式提供服务的时候,就会暴露许多的问题:增加节点需要修改配置文件、服务端机器宕机后不能被感知等。它可以通过集成注册中心,来动态地治理服务发布和服务调用。相当于把服务注册和发布推送的功能分摊给了(zookeeper)注册中心。
Dubbo实现服务调用是通过RPC的方式,即客户端和服务端共用一个接口(将接口打成一个jar包,在客户端和服务端引入这个jar包),客户端面向接口写调用,服务端面向接口写实现,中间的网络通信交给框架去实现。
咱们来看下Spring 配置声明暴露服务,provider.xml文件
再来看服务消费者,consumer.xml文件
这就是典型的点对点的服务调用。当然我们为了高可用,可以在consumer.xml中配置多个服务提供者,并配置响应的负载均衡策略。
配置多个服务调用者在comsumer.xml的dubbo:reference标签的url属性中加入多个地址,中间用分号隔开即可;配置负载均衡策略在comsumer.xml的dubbo:reference标签中增加loadbalance属性即可,值可以为如下四种类型:
那么目前的架构有什么问题呢?
1.当服务提供者增加节点时,需要修改配置文件。
2.当其中一个服务提供者宕机时,服务消费者不能及时感知到,还会往宕机的服务发送请求。
这个时候就需要引入注册中心了,Dubbo目前支持4种注册中心(multicast、zookeeper、redis、simple)推荐使用Zookeeper注册中心,要使用注册中心,只需要将provider.xml和consumer.xml更改为如下:
如果zookeeper是一个集群,则多个地址之间用逗号分隔即可
把consumer.xml中配置的直连的方式去掉
注册信息在zookeeper中如何保存?
启动上面服务后,我们观察zookeeper的根节点多了一个dubbo节点及其他,图示如下
最后一个节点中服务的地址,为什么把最后一个节点标成绿色?因为最后一个节点是临时节点,而其他节点是持久节点,这样,当服务宕机时,这个节点就会自动消失,不再提供服务,服务消费者也不会再请求。如果部署多个DemoService,则providers下面会有好几个节点,一个节点保存一个DemoService的服务地址。
其实一个zookeeper集群能被多个应用公用,因为不同的框架会在zookeeper上建不同的节点,互不影响。如dubbo会创建一个/dubbo节点,storm会创建一个/storm节点。
zookeeper 介绍:
zookeeper是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。
流程说明:
支持以下功能:
补充:
dubbo的协议使用什么序列化框架?
dubbo有多种协议,不同的协议默认使用不同的序列化框架。比如dubbo协议默认使用 Hessian2 序列化(说明:Hessian2 是阿里在 Hessian 基础上进行的二次开发,起名为Hessian2)。rmi协议默认为 java 原生序列化,http协议默认为为 json。
dubbo的通信方式?
采用单一长连接和NIO异步通信,基于Hessian2作为序列化协议。适合于小数据量(每次请求在100kb以内)大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。具体实现是消费者使用 NettyClient,提供者使用 NettyServer,Provider 启动的时候,会开启端口监听,使用我们平时启动 Netty 一样的方式。而 Client 在 Spring getBean 的时候,会创建 Client,调用远程方法的时候,将数据通过DubboCodec编码发送到 NettyServer,然后 NettServer 收到数据后解码,并调用本地方法,并返回数据,完成一次完美的 RPC 调用。
zookeeper选举机制?
zookeeper选举算法默认的是FastLeaderElection,选举机制的概念:
1.服务器ID:比如有三台服务器,编号分别是1、2、3,编号越大在选择算法中的权重越大。
2.事务ID:服务器中存放的最大数据ID(致使ZooKeeper节点状态改变的每一个操作都将更新事务id,即时间戳),值越大说明数据越新,在选举算法中数据越新权重越大。
3.逻辑时钟,或者叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断。
选举状态:LOOKING:竞选状态;FOLLOWING:随从状态,同步leader状态,参与投票;OBSERVING:观察状态,同步leader状态,不参与投票;LEADING:领导者状态。
初次选举简述:
目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:
1.服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。
2.服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
3.服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数为3正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
4.服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
5.服务器5启动,后面的逻辑同服务器4成为小弟。
如果中间有节点挂掉,只要有半数以上节点存活,就可以正常服务,如果leader挂掉,则所有节点处于Looking状态 ,各自依次发起投票,投票包含自己的服务器ID和最新事务ID,如果发现别人的事务id比自己大,也就是数据比自己新,那么就重新发起投票,投票给目前已知最大的事务id所属节点(事务id一样,则数据id大的胜出)。每次投票后,服务器都会统计投票数量,判断是否有某个节点得到半数以上的投票。如果存在这样的节点,该节点将会成为准Leader,状态变为Leading。其他节点的状态变为Following。
引用:
https://www.cnblogs.com/iisme/p/10620125.html
dubbo和eureka的区别
3、调用方式:SpringCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。但调用时采用Netty的NIO方式,性能较好。4、组件差异:例如SpringCloud注册中心一般用Eureka,而Dubbo用的Zookeeper,SpringCloud生态丰富,功能完善,更像是品牌机...
常用的java开发框架有哪些
4.权限管控框架:Shiro,SpringSecurity,单体项目或者分布式项目,权限管控的框架这两个还是比较流行的。5.前端框架:layui,easyui,bootstrap,elament-ui,vue,react等6.分布式框架组合:dubbo+zookeeper是前几年比较流行的分布式解决方案,但是这两三年一线城市中新项目中基本已经抛弃,转而使用微服务了...
ZooKeeper设置ACL权限控制,删除权限
这次项目让设置一下dubbo连接zookeper的权限问题,于是看到了设置ACL权限,找到zookeeper下的bin文件夹,打开zk服务,启动.\/zkCli.sh 如果在dubbo中没有指定分组的话,dubbo会默认生成一个分组dubbo,也就是在zookeeper下面会有个子节点dubbo 1)增加一个认证用户 addauth digest 用户名:密码明文 eg...
微服务之架构技术选型与设计
架构技术选型与设计-微服务选型Spring Cloud,从命名我们就可以知道,它是Spring Source的产物,Spring社区的强大背书可以说是Java企业界最有影响力的组织了,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。如果拿Dubbo与Netflix...
dubbo调用和maven依赖的区别
客户端A可直接使用这个bean,就好像这些接口的实现(即服务器B的代码)也是在自己的代码里一样。客户端A和服务器B在启动的时候都会把自己的机器IP注册到zookeeper上,客户端A会把zk上的服务端ip拉到磁盘上,并记录哪些ip提供哪些服务(服务端启动时暴露给zk),然后客户端根据ip调用服务端的服务。dubbo...
dubbo和spring cloud区别是什么?
3、调用方式: SpringCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。但调用时采用Netty的NIO方式,性能较好。4、组件差异比较多,例如SpringCloud注册中心一般用Eureka,而Dubbo用的Zookeeper,SpringCloud生态丰富,功能完善,更像...
Dubbo——服务调用、服务暴露、服务引用过程
可以。zookeeper的信息会缓存到本地作为一个缓存文件,并且转换成 properties 对象方便使用。建立线程池,定时检测并连接注册中心,失败了就重连。注册服务到zk其实就是在zk上创建临时节点,当节点下线或者down掉时,即会删除临时节点,从而使服务从可用列表中剔除。持久节点 临时节点 1、export的时候进行zk...
spring cloud和dubbo哪个会被淘汰?
2.springCloud是基于springboot的,spring的使用部署太方便了。dubbo:1.dubbo更多解决的是服务间的调用,也就是服务通讯协议rpc,也会是dubbo没有完整的分布式解决方案基础设施。例如:注册中心需要借助Zookeper,链路追踪:zipkin。要说Dubbo,算是Spring Cloud的一个子集好了,大致相当于Spring Cloud里的 ...
谈谈对Dubbo的理解
注册中心挂了会产生什么影响?答:对服务的调用没有任何影响,因为本地缓存了服务端的地址。 为什么使用Dubbo?答:1、Dubbo提供了丰富的协议选择:Dubbo协议(服务调用),注册服务:zookeeper...
Dubbo简介及优缺点
有需要消费服务。通过将服务统一管理起来,可以有效地优化内部应用对服务发布\/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo提供的注册中心有如下几种类型可供选择:优点:缺点:Dubbo+zookeeper+spring搭建: https:\/\/www.jianshu.com\/p\/9cbfb8679e1d ...
路褚加味: Dubbo是阿里巴巴提供的开源的SOA服务化治理的技术框架,据说只是剖出来的一部分开源的,但一些基本的需求已经可以满足的,而且扩展性也非常好(至今没领悟到扩展性怎么做到的),通过spring bean的方式管理配置及实例,较容易上...
确山县14770525582: zookeeper在Dubbo中扮演了一个什么角色,起到了什么作用啊? - ?
路褚加味: Zookeeper是゛dubbo゛推荐的注册中心,是管理员!就像一个分布式的项目,web层与 service层被拆分了开来, 部署在不同的tomcat中, 我在web层 需要调用 service层的接口,但是两个运行在不同tomcat下的服务无法直接互调接口,那么就...
确山县14770525582: zookeeper和dubbo都是分布式服务框架吗 - ?
路褚加味: zookeeper是注册中心,用来管理提供者和消费者的,包括软负载均衡等;DUBBO是一个SOA分布式框架,它也用到的ZOOKEEPER,其它的HADOOP等也用到的这个注册中心
确山县14770525582: dubbo不用zookeeper能访问到吗 - ?
路褚加味: zookeeper是Dubbo服务的注册中心,provider提供服务后注册在zookeeper上, consumer可以接口和版本信息从zookeeper中获取相应的服务,服务对于consumer来说完全透明,根本感知不到该接口是来自本地和provider,就像引用本地的一个bean一样.
确山县14770525582: dubbo框架和zookeeper框架整合访问速度慢怎么办 - ?
路褚加味: 在对应的zookeeper-3.4.6/conf 下有一个文件zoo_sample.cfg的这个文件里面配置了监听客户端连接的端口等一些信息,Zookeeper 在启动时会找zoo.cfg这个文件作为默认配置文件,
确山县14770525582: 搭建dubbo+zookeeper+spring架构为什么不要用jdk1.8 - ?
路褚加味: 没有这种说法吧,如果有多办是你们项目的环境可能对1.8的支持不好,所以不让用
确山县14770525582: dubbo 怎么决定连接zookeeper集群 - ?
路褚加味: dubbo可以有多中发布模式,广播、redis、zookeeper等形式,如果确定使用使用zookeeper做注册中心,做如下配置即可:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/...
确山县14770525582: dubbo zookeeper有什么用 - ?
路褚加味: dubbo主要是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)
确山县14770525582: dubbo zookeeper哪个先启动 - ?
路褚加味: zookeeper先启动,而后dubbo在zookeeper上注册节点
确山县14770525582: dubbo是hadoop实现平台吗 - ?
路褚加味: 当然不是,Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案.而hadoop是一个分布式的计算和存储的框架,也可以说是一个大数据的生态系统.二者没什么关系.