一.dubbo简介
1、是什么
是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
2、做什么
- 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
- 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
- 自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
3、四大特性
- 连通性:注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求。
- 健壮性:监控中心宕掉不影响使用,只是丢失部分采样数据。
- 伸缩性:注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心。
- 升级性:当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算。
二.dubbo架构
1、流程图
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9UlMhhWNyMmZk1mYoR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2YzNwUDOzETM0AzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
节点角色说明:
- Provider:暴露服务的服务提供方。
- Consumer:调用远程服务的服务消费方。
- Registry:服务注册与发现的注册中心。
- Monitor:统计服务的调用次调和调用时间的监控中心。
- Container:服务运行容器。
调用关系说明:
- Container启动,加载运行Provider。
- Provider在启动时,向Registry注册自己提供的服务。
- Consumer在启动时,从Registry订阅自己所需的服务。
- Registry返回Provider的地址列表给Consumer,如果有变更,Registry将基于长连接推送变更数据给Consumer。
- Consumer从地址列表中,基于软负载均衡算法,选一台进行调用。
- Consumer和Provider定时发送统计数据到Monitor。
2、配置方式
(1)配置方式-XML
- <dubbo:application/> 配置当前应用信息
- <dubbo:monitor/> 用于配置连接监控中心相关信息,可选
- <dubbo:protocol/> 协议配置由提供方指定,消费方被动接受
- <dubbo:registry/> 用于配置连接注册中心相关信息
- <dubbo:provider/> 提供方的缺省值,当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值,可选
- <dubbo:consumer/> 消费方缺省配置,当ReferenceConfig某属性没有配置时,采用此缺省值,可选
- <dubbo:module/> 模块配置,用于配置当前模块信息,可选
- <dubbo:service/> 用于暴露服务,一个服务可以用多个协议暴露,也可以注册到多个注册中心。
- <dubbo:reference/> 用于创建一个远程服务代理,可以指向多个注册中心。
- <dubbo:method/> 用于ServiceConfig和ReferenceConfig指定方法级的配置信息。
- <dubbo:argument/> 用于指定方法参数配置。
(2)配置方式-property
如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个Spring容器想共享配置,可以使用dubbo.properties作为缺省
配置。Dubbo将自动加载classpath根目录下的dubbo.properties,可以通过JVM启动参数:
-Ddubbo.properties.file=xxx.properties //改变缺省配置位置
dubbo.application.name=foo
dubbo.application.owner=bar
dubbo.registry.address=10.20.153.10:9090
(3)配置方式-注解annotation
- <dubbo:annotation package="com.xx.xxx.xxxx" />
- @Service(version="1.0.0")
- @Reference(version="1.0.0")
(4)配置方式-API
- ApplicationConfig
- RegistryConfig
- ProtocolConfig
- ServiceConfig
- ReferenceConfig
3、协议-dubbo
- 连接个数:单连接
- 连接方式:长连接
- 传输协议:TCP
- 传输方式:NIO异步传输
- 序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用
dubbo协议传输大文件或超大字符串。
- 适用场景:常规远程服务方法调用。