一、简介
1.官方说明
Apache Dubbo 是一个高可用的,基于Java的开源RPC框架。Dubbo框架不仅仅是具备RPC访问功能,还包含服务治理功能
2.发展历史
Dubbo最开始是由阿里巴巴内部使用的RPC框架。
2011年对外提供。
2012年停止更新。
2017年开始继续更新。
2019年捐献给Apache,由Apache维护2.7以上版本。
二、架构讲解
1.架构图
register:登记 ;
subscribe:订阅;
notify:通知;
invoke:调用;
container:容器
2.架构说明
2.1 虚线
虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。
2.2 Provider
暴露服务的提供方。编写持久层、业务层和事务代码
2.3 Container
运行服务容器(Spring容器),Dubbo完全基于Spring实现。
2.4 Registry
服务的注册与发现中心。放置所有Provider对外提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。
2.5 Consumer
调用远程服务的消费方。消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以包括页面等)。调用远程服务实现(XXXXServiceImpl)中的方法。
2.6 Monitor
监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。
3.执行流程
0.start:启动Spring容器时会把Provider启动。
1.register:把Provider相关信息注册到Registry里
2.subscribe:Consumer从Registry中订阅Provider的信息
3.notify:通知给Consumer
4.invoke:Consumer根据Registry通知的信息进行调用Provider中方法。
5.count:Consumer和Provider把调用次数信息异步发送给Monitor进行统计。
4.Dubbo架构特性
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。
4.1 连通性
- 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
- 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
- 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
- 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
- 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
- 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
- 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
- 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
4.2 健壮性
- 监控中心宕掉不影响使用,只是丢失部分采样数据
- 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
- 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
- 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
- 服务提供者无状态,任意一台宕掉后,不影响使用
- 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
4.3 伸缩性
- 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
- 服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
4.4 升级性
当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。下图是未来可能的一种架构:
三、Dubbo支持的协议
1.Dubbo协议(官方推荐协议)
- 优点:
采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用) 。协议的默认端口是:20880
- 缺点:
大文件上传时,可能出现问题(不使用Dubbo实现文件传输)
2.RMI(Remote Method Invocation)协议
- 优点:
JDK自带的能力。
- 缺点:
偶尔连接失败
3.Hessian协议
- 优点:
可与原生Hessian互操作,基于HTTP协议
- 缺点:
需hessian.jar支持,http短连接的开销大