1:简介
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架
Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题
这是Dubbo官网的介绍,下面是我对这dubbo的理解
首先介绍下什么是RPC:
常见的单体架构:请求进来———》先到控制层————》控制层掉业务层(对外提供一个个完整的功能)————》业务层掉数据持久层,这些都是在一套系统里面
分布式服务架构下:控制层是一个单独的应用工程(A系统),业务层也是个单独的应用(B系统)
用户请求进到控制层,A系统去掉B系统里面的方法这个过程就叫RPC:远程过程方法调用
dubbo就是一个分布式服务框架实现了这个过程,实现这个过程的还框架有很多:
Motan(新浪微博开源的一个Java 框架)rpcx(Go语言生态圈的Dubbo, 比Dubbo更轻量)gRPC(Google开发的高性能、通用的开源RPC框架)thrift(Apache的一个跨语言的高性能的服务框架)
总结来说:
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,服务自动注册和发现
对了dubbo还可以和 Spring框架无缝集成
官网:
dubbo.apache.org
2:Dubbo高性能的原因
dubbo作为一个PRPC框架,主要干的就是远程过程(方法)调用,这个过程中最关键也是最耗时的两个方面:序列化和网络通信
序列化:
我们都知道本地对象要在网络上传输,必须要实现Serializable接口(序列化),序列化的方案有很多:xml、json、二进制流等等,其中效率最高的就是二进制流(因为计算机就是二进制的01010),dubbo采用的就是效率最高的二进制
网络通信:
不同于HTTP(SpringCloud采用的就是HTTP协议)需要七步走(三次握手和四次挥手),dubbo采用Socket通信(只需要知道ip,端口就可以建立长连接)一步到位,提升了通信效率,建立长连接(不需要反复连接)直接传输数据
3:Dubbo框架结构
Git Hub上的结构图:
通过这张结构图可以很好的理解dubb的框架结构:
从0到5梳理一遍:
0:从0开始,这个容器(Container)指的就是spring容器(前面说过Dubbo可以和 Spring框架无缝集成),当Spring容器启动加载的时候初始化服务的提供者(Provider),这个提供者就是业务层里的方法
1:将这个方法注册(register)到注册中心(注册过去的就是一个个服务的URL地址)
2:注册完成后,消费者(Consumer)订阅(subscribe)组测中心里提供者提供的服务,这个消费者可以理解为控制层(就是控制层调用业务层)
3:同时注册中心异步通知(notify)消费者消费提供者提供的服务
4:消费者拿到订阅的地址去调用(invoke)提供者提供的具体的方法(拿到URL去调用)
5:在容器初始化和消费者消费的时候都会异步通知监控中心记录(记录提供者提供哪些服务,消费者消费哪些服务,谁消费,谁提供)
对于我们使用dubbo框架,只需要关注上面的框架即可,监控中心由dubbo提供好了,不需要开发者去实现