Dubbo源码解析-Dubbo架构的实现
前言:
在经过前面的学习之后,我们对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这些层次。
Dubbo源码解析-Dubbo架构的实现相关推荐
- Dubbo源码解析-Dubbo服务消费者_Dubbo协议(一)
前言: 在介绍完Dubbo 本地模式(Injvm协议)下的服务提供与消费后,上文我们又介绍了Dubbo远程模式(dubbo协议)下的服务暴露过程,本质上就是通过Netty将dubbo协议端口暴露出去, ...
- Dubbo源码解析(一)---架构概述
一 前言 之前的文章描述了如何简单的搭建dubbo服务,会用只是迈入了初级阶段.要想更好的理解原理,只能通过源码.为什么要看源码呢?因为好的源码是一些大牛级别的工程师呕心沥血的结晶,这里面渗透着好多东 ...
- Dubbo源码解析 —— Router
作者:肥朝 原文地址:http://www.jianshu.com/p/278e782eef85 友情提示:欢迎关注公众号[芋道源码].????关注后,拉你进[源码圈]微信群和[肥朝]搞基嗨皮. 友情 ...
- dubbo源码解析-集群容错架构设计
前言 本来是想把整个dubbo源码解析一次性弄完,再做成一个系列来发布的,但是正巧最近有位好朋友要去杭州面试,就和我交流了一下.本着对dubbo源码略有心得的心态,在交流过程中也发表了个人的一些粗劣的 ...
- dubbo源码解析-逻辑层设计之服务降级
Dubbo源码解析系列文章均来自肥朝简书 前言 在dubbo服务暴露系列完结之后,按计划来说是应该要开启dubbo服务引用的讲解.但是现在到了年尾,一些朋友也和我谈起了明年跳槽的事.跳槽这件事,无非也 ...
- Dubbo源码解析 --- DIRECTORY和ROUTER
Dubbo源码解析 --- DIRECTORY和ROUTER 今天看一下Directory和Router. 我们直接从代码看起(一贯风格),先看后总结,对着总结再来看,相信会收获很多.我们先看com. ...
- dubbo源码解析(九)远程通信——Transport层
远程通讯--Transport层 目标:介绍Transport层的相关设计和逻辑.介绍dubbo-remoting-api中的transport包内的源码解析. 前言 先预警一下,该文篇幅会很长,做好 ...
- dubbo源码解析-zookeeper创建节点
前言 在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码 ...
- dubbo源码解析(二)
大家好,我是烤鸭: dubbo 源码解析: 1.服务导出 介绍: Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑.整个逻辑大致可分为三 ...
- dubbo源码解析(十)远程通信——Exchange层
远程通讯--Exchange层 目标:介绍Exchange层的相关设计和逻辑.介绍dubbo-remoting-api中的exchange包内的源码解析. 前言 上一篇文章我讲的是dubbo框架设计中 ...
最新文章
- 目标检测算法综述 | 基于候选区域的目标检测器 | CV | 机器视觉
- 北理工计算机原理与应用实验,北理工计算机原理与应用实验三教程.docx
- xutils找id报空指针异常
- spring cloud 学习笔记(1)
- MariaDB学习记录
- 身份证(省市)编码表
- 怎么在ASP.NET中引用JS文件
- 表情识别android项目,Github项目推荐 | Emotion-recognition 实时表情识别
- 几种常用网络传输协议
- 第十章 项目沟通管理和干系人管理
- 任务管理器被管理员禁用如何解决
- SQLSERVER的中文排序规则
- mysql3306端口被占用无法终止_Mysql3306端口被占用无法启动解决办法
- MFC检测程序未响应
- 【Spring】Spring IOC学习笔记
- PythonOpenCV基础篇2线段
- 景联文科技:关于语音标注,你知道多少?
- 面试必备:ArrayMap源码解析
- 滑动轨迹 曲线 python_Python 模拟真实运动轨迹,轻松完成长跑和打卡
- Face++人脸搜索入门篇
热门文章
- IDEA 配置SVN ,SVN安装后没有svn.exe
- 易语言短信接口_易语言短信接口_易语言发短信_易语言短信验证码_验证码短信代码示例_互亿无线...
- 三星固态驱动安装失败_三星固态硬盘安装不了Win10无法启动解决方案
- matlab之矩阵运算
- 国家统计局统计用区划和城乡划分代码
- SPSS编程-统计自动化-VBA脚本开发
- PHP高并发和大流量解决方案
- java opencv 人脸相似度_java+opencv实现人脸识别程序记录
- sql身份证号计算年龄_函数
- wsdl文件怎么看服务器地址,wsdl文件 服务器地址