更新时间:2022-03-18 11:45:56 来源:动力节点 浏览1129次
Dubbo的相关架构复杂,层次多。每一层基本上都是通过SPI来生成调用的。
采用SPI方法调用,具有高度的灵活性、可扩展性。开发用户特定的功能也更容易。
API 接口层,我们的服务发布是通过 ServiceConfig 来完成的;服务消费是通过 ReferenceConfig 来完成的。
创建 ServiceConfig、ReferenceConfig 的过程中,我们还可以创建 ProtocolConfig 来指定协议,MethodConfig 来指定方法相关参数等。
对于服务消费者,Proxy作为消费者代理,将本地调用转换为远程调用;
对于服务提供者,Proxy 代理服务实现类,将服务实现类转换为 Wrapper 类。
该层使用的接口是ProxyFactory,主要有以下两种实现类,JavassistProxyFactory是默认实现类。
服务注册层。
启动时,服务提供者设置服务的名称 URL 向服务注册中心注册;
并且消费者也将启动当前的 URL 注册到服务注册中心。当消费者需要访问特定的服务时,你会去注册中心寻找对应的服务提供者,获取后就可以发起(远程)调用。
这里是 Dubbo 提供的一些主要注册中心实现
正如在定制一个简单的 RPC 博客中提到的,当一个服务有多个提供者时,当消费者选择服务进行消费时,需要有一定的路由、负载均衡、集群容错的考虑。
而 Dubbo 中的 Cluster Layer 就是用来完成这些功能的。
该层之前没有介绍过。Monitor层主要用于统计RPC调用次数和耗时事件。扩展接口为MonitorFactory,对应实现类DubboMonitorFactory。
用户还可以自定义监控和统计策略。
Dubbo协议就整个框架而言,这是关键模块。
在协议层,主要封装了RPC调用逻辑。该层级作为连接前后的纽带,通过 Exporter、Invoker 的创建,完成服务的发布和引用。
主要实现类如下:
默认实现是 DubboProtocol,协议是使用 Dubbo 自定义的协议,根据协议格式完成请求和响应(响应)正文的发送和接收。该协议的实现将在后面介绍。
交换层的相关代码和实现都比较简单。它的主要功能是:封装请求响应模式,同步到异步。
扩展接口是Exchanger,相关的实现只有一个HeaderExchanger。
这个级别是比较的,已经比较垫底了。
它的主要功能是发起网络传输。网络传输主要通过Netty、Mina等集成框架实现。
主要实现如下图所示:
关于这个有一些知识点,需要读者了解Netty(默认实现)相关API
序列化层,这个层次比较容易理解。
所有需要远程传输的对象,都需要序列化成字节数组才能发起传输,因此 Dubbo 框架提供了多种对象序列化的方式。如下 :
上面的序列化方式,各有千秋,Dubbo默认是Hessian2。
0基础 0学费 15天面授
有基础 直达就业
业余时间 高薪转行
工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习