在经过前面的学习之后,我们对Dubbo consumer、provider处理请求的过程有了一个基本了解。
从本文开始,我们就要对Dubbo框架进行拆解,讲解每一个具体的技术点了。这样从使用到每层的技术点分析,可以完整的掌握整个Dubbo框架。
本文就先从框架的整体面貌讲起,逐层来分析,后续针对每一个层次都会有专门的文章来说明。
1.Dubbo架构图Dubbo的相关架构比较复杂,主要是分层次比较多。每层之间基本都是通过SPI的方式来生成调用的。
通过SPI方式的调用,具有高度的灵活性、可扩展性。也比较容易开发出用户特定的功能。
下面这张图就是从Dubbo官网上拷贝下来的(来自:框架设计 | Apache Dubbo)
2.Service/Config层
API接口层,我们的服务发布通过ServiceConfig来完成;服务消费则通过ReferenceConfig来完成。
在创建ServiceConfig、ReferenceConfig的过程中,我们还可以通过创建ProtocolConfig来指定协议,MethodConfig来指定方法相关参数等。
3.Proxy层对服务消费者而言,Proxy作为消费者代理,将本地调用转换为远程调用;
对服务提供者而言,Proxy对服务实现类进行代理,把服务实现类转换为Wrapper类。
该层所使用接口为ProxyFactory,而其实现类主要有以下两种,而JavassistProxyFactory是默认实现类。
4.Registry层
服务注册中心层。
服务提供者在启动时将服务的URL注册到服务注册中心去;
而消费者在启动时也会将当前的URL注册到服务注册中心去。当消费者需要获取特定服务时,则会去注册中心上找对应的服务提供者,获取到以后即可发起(远程)调用。
下图便是Dubbo提供的一些主要的注册中心实现
5.Cluster层
正如在自定义一个简单的RPC 博客中说到的那样,当一个服务有多个提供者时,消费者在选择服务进行消费时,需要有一定的路由、负载均衡、集群容错的考量。
而Dubbo中的Cluster层正是为了完成这些功能而实现的。
目前Cluster层的实现类有如下几种(后续会专门博客来介绍下相关Cluster的不同作用)
6.Monitor层
有关于该层之前基本没有介绍过。Monitor层主要是用来统计RPC调用次数和调用耗时事件的。扩展接口为MonitorFactory,对应实现类为DubboMonitorFactory。
用户也可以自定义监控统计策略。
7.Protocol层Protocol在整个框架而言,就是重点模块了。
在Protocol层中,主要封装了RPC调用逻辑。该层次起到了承上启下的作用,通过Exporter、Invoker的创建,完成服务的发布和引用。
主要的实现类如下:
默认实现则是DubboProtocol,该协议是使用Dubbo自定义的一种协议方式,将请求和响应按照该协议格式来完成请求(响应)体发送和接收。后续会专门来介绍该协议实现。
8.Exchange层Exchange层的相关代码和实现都比较简单。其主要作用就是:封装请求响应模式,同步转异步。
扩展接口为Exchanger,相关实现只有一个HeaderExchanger。
9.Transport层该层次相对而言,已经比较底层了。
它的主要作用就是发起网络传输。网络传输主要采用集成框架的方式来实现,比如Netty、Mina等。
主要实现如下图所示:
有关于这块知识点,需要读者了解Netty(默认实现)的相关API
10.Serialize层序列化层,这个层次比较容易理解。
所有需要远程传输的对象,都需要序列化为字节数组后才能发起传输,所以Dubbo框架提供了多种序列化对象的方式。如下:
以上序列化方式,都各有其优势,Dubbo默认使用的是Hessian2。后续会专门对这些序列化方式进行分析。
总结:在对Dubbo框架分层有一个大概的认识之后,后面我们就要对这些层次进行详细介绍了。
其中,重点层次是Cluster、Protocol、Serialize这些层次。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)