前言:

在经过前面的学习之后,我们对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架构的实现相关推荐

  1. Dubbo源码解析-Dubbo服务消费者_Dubbo协议(一)

    前言: 在介绍完Dubbo 本地模式(Injvm协议)下的服务提供与消费后,上文我们又介绍了Dubbo远程模式(dubbo协议)下的服务暴露过程,本质上就是通过Netty将dubbo协议端口暴露出去, ...

  2. Dubbo源码解析(一)---架构概述

    一 前言 之前的文章描述了如何简单的搭建dubbo服务,会用只是迈入了初级阶段.要想更好的理解原理,只能通过源码.为什么要看源码呢?因为好的源码是一些大牛级别的工程师呕心沥血的结晶,这里面渗透着好多东 ...

  3. Dubbo源码解析 —— Router

    作者:肥朝 原文地址:http://www.jianshu.com/p/278e782eef85 友情提示:欢迎关注公众号[芋道源码].????关注后,拉你进[源码圈]微信群和[肥朝]搞基嗨皮. 友情 ...

  4. dubbo源码解析-集群容错架构设计

    前言 本来是想把整个dubbo源码解析一次性弄完,再做成一个系列来发布的,但是正巧最近有位好朋友要去杭州面试,就和我交流了一下.本着对dubbo源码略有心得的心态,在交流过程中也发表了个人的一些粗劣的 ...

  5. dubbo源码解析-逻辑层设计之服务降级

    Dubbo源码解析系列文章均来自肥朝简书 前言 在dubbo服务暴露系列完结之后,按计划来说是应该要开启dubbo服务引用的讲解.但是现在到了年尾,一些朋友也和我谈起了明年跳槽的事.跳槽这件事,无非也 ...

  6. Dubbo源码解析 --- DIRECTORY和ROUTER

    Dubbo源码解析 --- DIRECTORY和ROUTER 今天看一下Directory和Router. 我们直接从代码看起(一贯风格),先看后总结,对着总结再来看,相信会收获很多.我们先看com. ...

  7. dubbo源码解析(九)远程通信——Transport层

    远程通讯--Transport层 目标:介绍Transport层的相关设计和逻辑.介绍dubbo-remoting-api中的transport包内的源码解析. 前言 先预警一下,该文篇幅会很长,做好 ...

  8. dubbo源码解析-zookeeper创建节点

    前言 在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码 ...

  9. dubbo源码解析(二)

    大家好,我是烤鸭: dubbo 源码解析: 1.服务导出 介绍: Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑.整个逻辑大致可分为三 ...

  10. dubbo源码解析(十)远程通信——Exchange层

    远程通讯--Exchange层 目标:介绍Exchange层的相关设计和逻辑.介绍dubbo-remoting-api中的exchange包内的源码解析. 前言 上一篇文章我讲的是dubbo框架设计中 ...

最新文章

  1. 目标检测算法综述 | 基于候选区域的目标检测器 | CV | 机器视觉
  2. 北理工计算机原理与应用实验,北理工计算机原理与应用实验三教程.docx
  3. xutils找id报空指针异常
  4. spring cloud 学习笔记(1)
  5. MariaDB学习记录
  6. 身份证(省市)编码表
  7. 怎么在ASP.NET中引用JS文件
  8. 表情识别android项目,Github项目推荐 | Emotion-recognition 实时表情识别
  9. 几种常用网络传输协议
  10. 第十章 项目沟通管理和干系人管理
  11. 任务管理器被管理员禁用如何解决
  12. SQLSERVER的中文排序规则
  13. mysql3306端口被占用无法终止_Mysql3306端口被占用无法启动解决办法
  14. MFC检测程序未响应
  15. 【Spring】Spring IOC学习笔记
  16. PythonOpenCV基础篇2线段
  17. 景联文科技:关于语音标注,你知道多少?
  18. 面试必备:ArrayMap源码解析
  19. 滑动轨迹 曲线 python_Python 模拟真实运动轨迹,轻松完成长跑和打卡
  20. Face++人脸搜索入门篇

热门文章

  1. IDEA 配置SVN ,SVN安装后没有svn.exe
  2. 易语言短信接口_易语言短信接口_易语言发短信_易语言短信验证码_验证码短信代码示例_互亿无线...
  3. 三星固态驱动安装失败_三星固态硬盘安装不了Win10无法启动解决方案
  4. matlab之矩阵运算
  5. 国家统计局统计用区划和城乡划分代码
  6. SPSS编程-统计自动化-VBA脚本开发
  7. PHP高并发和大流量解决方案
  8. java opencv 人脸相似度_java+opencv实现人脸识别程序记录
  9. sql身份证号计算年龄_函数
  10. wsdl文件怎么看服务器地址,wsdl文件 服务器地址