Dubbo 概述:
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。
主要核心部件:
Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅
Dubbo 特性:
连通性:
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
健状性:
监控中心宕掉不影响使用,只是丢失部分采样数据
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
服务提供者无状态,任意一台宕掉后,不影响使用
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
伸缩性:
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
工作原理:
Provider:暴露服务方称之为“服务提供者”。
Consumer:调用远程服务方称之为“服务消费者”。
Registry:服务注册与发现的中心目录服务称之为“服务注册中心”。
Monitor:统计服务的调用次调和调用时间的日志服务称之为“服务监控中心”。
配置继承:
服务提供者比消费者更清楚一个方法的执行时间,是否允许重试等信息,所以增加允许服务提供者为消费者设置缺省值,并采用继承风格
<dubbo:service/>服务配置,用于暴露服务
<dubbo:reference/>引用配置,用于创建一个远程服务代理
<dubbo:protocol/>协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
<dubbo:application/>应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者
<dubbo:module/>模块配置,用于配置当前模块信息,可选
<dubbo:registry/>注册中心配置,用于配置连接注册中心相关信息
<dubbo:monitor/>监控中心配置,用于配置连接监控中心相关信息,可选
<dubbo:provider/>提供方的缺省值,当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值,可选
<dubbo:consumer/>消费方缺省配置,当ReferenceConfig某属性没有配置时,采用此缺省值,可选
<dubbo:method/>方法配置,用于ServiceConfig和ReferenceConfig指定方法级的配置信息
<dubbo:argument/>用于指定方法参数配置
Dubbo 服务分组:
当一个接口有多种实现时,可以用group区分
服务提供者:
<dubbo:service group="feedback" interface="com.xxx.IndexService" />
<dubbo:service group="member" interface="com.xxx.IndexService" />
服务消费者:
<dubbo:reference id=“fservice" group="feedback" interface="com.xxx.IndexService" />
<dubbo:reference id=“mservice" group="member" interface="com.xxx.IndexService" />
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用
服务提供者:
<dubbo:service interface="com.foo.BarService" version="1.0.0" />
<dubbo:service interface="com.foo.BarService" version="2.0.0" />
服务消费者:
<dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />
<dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />
Dubbo 多协议:
配置通讯协议:
<dubbo:protocol name="dubbo" port="20880" serializaiton="hessian2" threads="100"
register="true" charset="UTF-8" threadpool="fixed" accepts="1000" server="netty"
client="netty" codes="dubbo"/>
name:协议名称,默认dubbo,支持rmi,hessian2,http,ws,thrift,memcached,redis
port:暴露服务的端口号
serialization:支持dubbo,hessian2,java,json,默认hessian2
register:该协议的服务是否注册到注册中心,默认true
threads:服务线程池大小
server:协议的服务端实现类型
client:协议的客户端实现类型
........
不同服务不同协议:
比如:不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议。
<!-- 多协议配置 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="rmi" port="1099" />
<!-- 使用dubbo协议暴露服务 -->
<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" />
<!-- 使用rmi协议暴露服务 -->
<dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" />
同一服务多协议暴露:
比如:需要与http客户端互操作
<!-- 多协议配置 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="hessian" port="8080" />
<!-- 使用多个协议暴露服务 -->
<dubbo:reference id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" protocol="dubbo,hessian" />
Dubbo 多注册中心:
定义多个注册中心:
<dubbo:registry id=“chinaRegistry” address="172.29.63.18:9090" />
<dubbo:registry id=“intlRegistry” address="172.29.61.132:9090" />
不同服务使用不同注册中心:
<!-- 向中文站注册中心注册 -->
<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="chinaRegistry" />
<!-- 向国际站注册中心注册 -->
<dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" registry="intlRegistry" />
不同注册中心使用不同引用:
<dubbo:reference id=“chinaXxxService” interface="com.alibaba.xxx.XxxService" version="1.0.0“ registry=“chinaRegistry” />
<dubbo:reference id=“intlXxxService” interface="com.alibaba.xxx.XxxService" version="1.0.0“ registry=“intlRegistry” />
启动时检查:
Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true
如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时,会抛出异常,拿到null引用,如果check=false,总是会返回引用,当服务恢复时,能自动连上
关闭某个服务的启动时检查:(没有提供者时报错)
<dubbo:reference interface="com.foo.BarService" check="false"/>
关闭所有服务的启动时检查:(没有提供者时报错)
<dubbo:consumer check="false"/>
关闭注册中心启动时检查:(注册订阅失败时报错)
<dubbo:registry check="false"/>
集群容错配置:
在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试
Failover Cluster:
失败自动切换,当出现失败,重试其它服务器。(缺省)
通常用于读操作,但重试会带来更长延迟。
可通过retries="2"来设置重试次数(不含第一次)。
Failfast Cluster:
快速失败,只发起一次调用,失败立即报错。
通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster:
失败安全,出现异常时,直接忽略。
通常用于写入审计日志等操作。
Failback Cluster:
失败自动恢复,后台记录失败请求,定时重发。
通常用于消息通知操作。
Forking Cluster:
并行调用多个服务器,只要一个成功即返回。
通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
可通过forks="2"来设置最大并行数。
Broadcast Cluster:
广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
通常用于通知所有提供者更新缓存或日志等本地资源信息。
<dubbo:service cluster="failsafe"/>
或
<dubbo:reference cluster="failsafe"/>
重试次数配置:
<dubbo:service retries="2"/>
或
<dubbo:reference retries="2"/>
或
<dubbo:reference>
<dubbo:method name="findFoo" retries="2"/>
</dubbo:reference>
负载均衡配置:
在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用
Random LoadBalance:
随机,按权重设置随机概率
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重
RoundRobin LoadBalance:
轮循,按公约后的权重设置轮循比率
存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上
LeastActive LoadBalance:
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
ConsistentHash LoadBalance:
一致性Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
<dubbo:service interface="..." loadbalance="roundrobin"/>
或
<dubbo:reference interface="..." loadbalance="roundrobin"/>
或
<dubbo:service interface="...">
<dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>
或
<dubbo:reference interface="...">
<dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>
- 大小: 169.6 KB
- 大小: 36 KB
- 大小: 27.5 KB
分享到:
相关推荐
分布式SSM-Dubbo配置文件详解 SSM-Dubbo是一个基于Java的开源框架组合,由Spring、SpringMVC和Dubbo三部分组成,主要用于构建大型分布式应用程序。在微服务架构中,SSM-Dubbo扮演着至关重要的角色,它帮助开发者...
在"DTD-xsd.zip"这个压缩包文件中,可能包含了Dubbo配置文件所需的一系列DTD和XML Schema Definition (XSD) 文件。XSD是另一种更现代且功能更强大的XML语法规则定义工具,它可以提供更严格的类型检查和数据约束。与...
首先,`dubbo.xsd`是Dubbo的XML配置文件的模式定义,它包含了所有合法的Dubbo配置元素和属性。当编辑器或者IDE(如IntelliJ IDEA或Eclipse)显示红叉提示时,意味着XML文件可能有以下几种常见问题: 1. **XML语法...
这些配置文件遵循特定的XML Schema(XSD),即`dubbo配置scheme文件.xsd`,它是验证和解析Dubbo配置文件的规则集。 1. **XML Schema(XSD)**:XSD是一种用于定义XML文档结构的规范,它规定了元素、属性、数据类型...
dubbo配置scheme文件
### Apache Dubbo:Dubbo配置与参数详解 #### 一、Dubbo概述 Apache Dubbo是一款高性能、轻量级的微服务框架,主要用于构建服务化的应用程序和服务治理平台。它提供了全面的服务治理解决方案,包括服务发布、发现...
《Dubbo配置scheme文件.xsd详解》 在分布式服务框架Dubbo中,配置文件是连接服务提供者和服务消费者的关键桥梁,而`.xsd`文件则在其中扮演着规范配置格式的重要角色。本文将深入探讨Dubbo配置scheme文件`.xsd`,...
【Dubbo配置指南及在应用系统中应用介绍】 Dubbo是一款高性能、轻量级的开源Java RPC框架,由阿里巴巴开发并贡献给Apache基金会。它主要致力于解决服务治理问题,包括服务注册、服务发现、调用链跟踪等。本篇文章将...
dubbo.xsd, 这里是dubbo配置文件。其中dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。
解决springboot 中 dubbo配置的报错问题 dubbo XML Schema 文件
dubbo的配置文件
这篇博文“dubbo配置使用”可能详细讲解了如何在实际项目中配置和使用Dubbo,以实现服务的发布、消费以及相关组件的设置。虽然具体的博文内容未给出,但我们可以根据常见的Dubbo配置和使用场景进行深入探讨。 首先...
dubbo 官方配置指南 dubbo 官方配置指南是 dubbo 框架的核心组件之一,用于配置 dubbo 服务的各种参数。该指南涵盖了 dubbo 服务的配置关系、配置 override、配置类型等多方面的内容。 Configuration Reference ...
在Dubbo框架中,`loadbalance`配置是用来指定负载均衡策略的,允许用户自定义或者选择内置的策略,如Random、RoundRobin等,以决定如何在服务提供者之间分配消费者请求。然而,当用户报告`loadbalance`配置不生效时...
【Dubbo配置详解】 Dubbo是一款高性能、轻量级的Java RPC框架,它提供了三大核心功能:服务注册与发现、远程调用、集群容错。本文将深入探讨Dubbo的配置,通过一个简单的Demo来展示如何配置和使用Dubbo。 1. **...
ZooKeeper本质上是一个分布式的小文件存储系统。原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目,在Hbase(Hadoop的另外一个被拆分出来的子项目,用于分布式环境下的超大数据量的DBMS)中也...
在这个"springboot-dubbo 版本配置"的主题下,我们将深入探讨如何在Spring Boot项目中集成和管理Dubbo服务,以及如何通过Maven进行多模块配置。 首先,让我们关注Spring Boot与Dubbo的集成。Spring Boot提供了对...
下面,我们将深入探讨Dubbo配置的相关知识点。 1. **Dubbo基本概念** - **服务提供者(Provider)**:提供服务的实体,它将服务注册到注册中心,使消费者可以发现并调用。 - **服务消费者(Consumer)**:调用...