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的使用可以参考官方文档 http://dubbo.apache.org ,本文不作赘述。
1.1 dubbo的核心服务是什么?
1、远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2、集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3、自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
1.2 dubbo能做什么?
1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2、软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3、服务自动注册与发现,不再需要写死服务提供方地址,注册中心 基于接口名 查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
2、Dubbo服务暴露与消费过程
先来看下面问题:
-
Dubbo服务提供者发布服务的流程
-
Dubbo服务消费者消费服务的流程
-
什么是本地暴露和远程暴露,他们的区别
2.1 Dubbo服务提供者发布服务过程:
先来看dubbo的启动日志:
图中从上到下框起来的日志分别是:
-
暴露服务到本地
-
暴露服务到远程
-
启动netty服务
-
连接zookeeper
-
注册服务到zookeeper
-
监听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配置引用服务