dubbo简介

http://baijiahao.baidu.com/s?id=1601781224676099887&wfr=spider&for=pc
https://blog.****.net/a347911/article/details/88324056

1、Dubbo简介

Dubbo是一个由阿里巴巴开源的、分布式的RPC(Remote Procedure Call Protocol-远程过程调用)和微服务框架,现为Apache*项目。

Dubbo提供了三个关键功能:

  • 基于接口的远程调用
  • 容错与负载均衡
  • 服务自动注册与发现

Dubbo使得调用远程服务就像调用本地java服务一样简单。

下图为Dubbo的结构图:
dubbo简介
关于Dubbo的使用可以参考官方文档 http://dubbo.apache.org ,本文不作赘述。

1.1 dubbo的核心服务是什么?

1、远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2、集群容错: 提供基于接口方法透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3、自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方使地址透明,使服务提供方可以平滑增加或减少机器。

1.2 dubbo能做什么?

1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2、软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3、服务自动注册与发现不再需要写死服务提供方地址注册中心 基于接口名 查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

2、Dubbo服务暴露与消费过程

先来看下面问题:

  1. Dubbo服务提供者发布服务的流程

  2. Dubbo服务消费者消费服务的流程

  3. 什么是本地暴露和远程暴露,他们的区别

2.1 Dubbo服务提供者发布服务过程:

先来看dubbo的启动日志:
dubbo简介
图中从上到下框起来的日志分别是:

  1. 暴露服务到本地

  2. 暴露服务到远程

  3. 启动netty服务

  4. 连接zookeeper

  5. 注册服务到zookeeper

  6. 监听zookeeper中消费服务

关于这个过程的实现细节可以参考Dubbo官方文档->实现细节->远程调用细节->服务提供者暴露一个服务的详细过程。

2.2 Dubbo服务消费者消费服务过程:

关于这个过程的实现细节可以参考Dubbo官方文档->实现细节->远程调用细节->服务消费者消费一个服务的详细过程。

2.3 本地暴露和远程暴露的区别:

  • 本地暴露:

    • 暴露在本机JVM中
    • 调用本地服务时,不需要网络通信.
  • 远程暴露:

    • 将ip,端口等信息暴露给远程客户端
    • 调用远程服务时,需要网络通信.

3、Dubbo相关协议

Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。

不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议。

Dubbo支持的协议主要有:

1、dubbo(默认协议):

特点:

  • 单一长连接
  • NIO 异步通讯

适用范围:

  • 小数据量 大并发的服务调用
  • 以及服务消费者机器数 远大于 服务提供者机器数的情况
  • 反之,dubbo不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低

2、rmi:

特点:

  • 采用阻塞式(同步)短连接
  • JDK 标准序列化方式

适用范围:

  • 传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件(大数据)

3、hessian:

特点: Hessian底层采用Http通讯(同步),采用Servlet暴露服务

适用范围: 适用于传入 传出参数 数据包较大提供者比消费者个数多,提供者压力较大,可传文件。

dubbo还支持的其他协议有:http, webservice, thrift, memcached, redis

4、Dubbo相关配置

先看下面问题:

Dubbo主要的配置项有哪些,作用是什么?

如果Dubbo的服务端未启动,消费端能起来吗?

Dubbo主要配置项:

配置应用信息:

配置注册中心相关信息:

配置服务协议:

配置所有暴露服务缺省值:

配置暴露服务:

配置所有引用服务缺省值:

配置引用服务:

备注:其中reference的check默认=true,启动时会检查引用的服务是否已存在,不存在时报错

注解配置:

com.alibaba.dubbo.config.annotation.Service 配置暴露服务

com.alibaba.dubbo.config.annotation.Reference配置引用服务