专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Dubbo源码分析:Dubbo架构实现

Dubbo源码分析:Dubbo架构实现

更新时间:2022-03-18 11:45:56 来源:赢咖4 浏览764次

1.Dubbo架构图

Dubbo的相关架构复杂,层次多。每一层基本上都是通过SPI来生成调用的。

采用SPI方法调用,具有高度的灵活性、可扩展性。开发用户特定的功能也更容易。

2.Service/Config层

API 接口层,我们的服务发布是通过 ServiceConfig 来完成的;服务消费是通过 ReferenceConfig 来完成的。

创建 ServiceConfig、ReferenceConfig 的过程中,我们还可以创建 ProtocolConfig 来指定协议,MethodConfig 来指定方法相关参数等。

3.代理层

对于服务消费者,Proxy作为消费者代理,将本地调用转换为远程调用;

对于服务提供者,Proxy 代理服务实现类,将服务实现类转换为 Wrapper 类。

该层使用的接口是ProxyFactory,主要有以下两种实现类,JavassistProxyFactory是默认实现类。

4.注册表层

服务注册层。

启动时,服务提供者设置服务的名称 URL 向服务注册中心注册;

并且消费者也将启动当前的 URL 注册到服务注册中心。当消费者需要访问特定的服务时,你会去注册中心寻找对应的服务提供者,获取后就可以发起(远程)调用。

这里是 Dubbo 提供的一些主要注册中心实现

5.集群层

正如在定制一个简单的 RPC 博客中提到的,当一个服务有多个提供者时,当消费者选择服务进行消费时,需要有一定的路由、负载均衡、集群容错的考虑。

而 Dubbo 中的 Cluster Layer 就是用来完成这些功能的。

6.监控层

该层之前没有介绍过。Monitor层主要用于统计RPC调用次数和耗时事件。扩展接口为MonitorFactory,对应实现类DubboMonitorFactory。

用户还可以自定义监控和统计策略。

7.协议层

Dubbo协议就整个框架而言,这是关键模块。

在协议层,主要封装了RPC调用逻辑。该层级作为连接前后的纽带,通过 Exporter、Invoker 的创建,完成服务的发布和引用。

主要实现类如下:

默认实现是 DubboProtocol,协议是使用 Dubbo 自定义的协议,根据协议格式完成请求和响应(响应)正文的发送和接收。该协议的实现将在后面介绍。

8.交换层

交换层的相关代码和实现都比较简单。它的主要功能是:封装请求响应模式,同步到异步。

扩展接口是Exchanger,相关的实现只有一个HeaderExchanger。

9.传输层

这个级别是比较的,已经比较垫底了。

它的主要功能是发起网络传输。网络传输主要通过Netty、Mina等集成框架实现。

主要实现如下图所示:

关于这个有一些知识点,需要读者了解Netty(默认实现)相关API

10.序列化层

序列化层,这个层次比较容易理解。

所有需要远程传输的对象,都需要序列化成字节数组才能发起传输,因此 Dubbo 框架提供了多种对象序列化的方式。如下 :

上面的序列化方式,各有千秋,Dubbo默认是Hessian2。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>