天天看点

Dubbo 深入理解

一.dubbo简介

1、是什么

是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

2、做什么

  • 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

3、四大特性

  • 连通性:注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求。
  • 健壮性:监控中心宕掉不影响使用,只是丢失部分采样数据。
  • 伸缩性:注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心。
  • 升级性:当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算。

二.dubbo架构

1、流程图

Dubbo 深入理解
节点角色说明:
  • 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/> 用于指定方法参数配置。
Dubbo 深入理解

(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协议传输大文件或超大字符串。

  • 适用场景:常规远程服务方法调用。