Dubbo 架构设计概览

2023-11-05

设计图 

图示说明

  • 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。
  • 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。
  • 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。
  • 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。

 

各层说明

  • config 配置层:对外配置接口,以 ServiceConfigReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类;
  • proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory;
  • registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactoryRegistryRegistryService;
  • cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 ClusterDirectoryRouterLoadBalance;
  • monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactoryMonitorMonitorService;
  • protocol 远程调用层:封装 RPC 调用,以 InvocationResult 为中心,扩展接口为 ProtocolInvokerExporter;
  • exchange 信息交换层:封装请求响应模式,同步转异步,以 RequestResponse 为中心,扩展接口为 ExchangerExchangeChannelExchangeClientExchangeServer;
  • transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 ChannelTransporterClientServerCodec;
  • serialize 数据序列化层:可复用的一些工具,扩展接口为 SerializationObjectInputObjectOutputThreadPool。

 

关系说明

  • 在 RPC 中,Protocol 是核心层,也就是只要有 Protocol + Invoker + Exporter 就可以完成非透明的 RPC 调用,然后在 Invoker 的主过程上 Filter 拦截点。
  • 图中的 Consumer 和 Provider 是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用 Client 和 Server 的原因是 Dubbo 在很多场景下都使用 Provider, Consumer, Registry, Monitor 划分逻辑拓普节点,保持统一概念。
  • 而 Cluster 是外围概念,所以 Cluster 的目的是将多个 Invoker 伪装成一个 Invoker,这样其它人只要关注 Protocol 层 Invoker 即可,加上 Cluster 或者去掉 Cluster 对其它层都不会造成影响,因为只有一个提供者时,是不需要 Cluster 的。
  • Proxy 层封装了所有接口的透明化代理,而在其它层都以 Invoker 为中心,只有到了暴露给用户使用时,才用 Proxy 将 Invoker 转成接口,或将接口实现转成 Invoker,也就是去掉 Proxy 层 RPC 是可以 Run 的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。
  • 而 Remoting 实现是 Dubbo 协议的实现,如果你选择 RMI 协议,整个 Remoting 都不会用上,Remoting 内部再划为 Transport 传输层和 Exchange 信息交换层,Transport 层只负责单向消息传输,是对 Mina, Netty, Grizzly 的抽象,它也可以扩展 UDP 传输,而 Exchange 层是在传输层之上封装了 Request-Response 语义。
  • Registry 和 Monitor 实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dubbo 架构设计概览 的相关文章

  • 在vant组件下阻止手机自带键盘弹起

    废话 van field输入框伴随着小键盘的弹起 但是在已经定义了的van popup中 小键盘的弹起显得多余 尤其在地区 籍贯等的选择上 所以利用 focus 在获取焦点的时候进行阻止 代码
  • 局域网配置网站DNS服务器的安装

    小提示 要想成功部署DNS服务 运行Windows Serve 2003的计算机中必须拥有一个静态IP地址 只有这样才能让DNS客户端定位DNS服务器 另外如果希望该DNS服务器能够解析Internet上的域名 还需保证该DNS服务器能正常
  • STM32单片机示例:多个定时器级联使用

    文章目录 目的 基础说明 关键配置与代码 示例链接 目的 有些情况下会遇到单片机的定时器位数不够用 这时候可以使用低定时器级联的方式来处理 这里将对此做个示例说明 基础说明 这里说的定时器级联是指一个定时器正常计数工作 然后在发生溢出时发送
  • PYthon 转换HTML到Text纯文本

    今天项目需要将HTML转换为纯文本 去网上搜了一下 发现Python果然是神通广大 无所不能 方法是五花八门 拿今天亲自试的两个方法举例 以方便后人 方法一 1 安装nltk 可以去pipy装 注 需要依赖以下包 numpy PyYAML
  • AT24C02的使用说明和完整代码-51单片机

    AT24C02的使用说明和完整代码 51单片机 简述 at24c02为存储器芯片 可以使用单片机将数据存入其中 同时也可以任意读取 at24c02的原理及使用方法在其说明资料中已有充分的讲述 本篇仅对其使用的关键步骤进行罗列 以及说明一下具
  • MySQL主从复制的实现

    MySQL主从复制的理解图 MySQL Replication原理 主从复制 也称 AB 复制 允许将来自一个MySQL数据库服务器 主服务器 的数据复制到一个或多个MySQL数据库服务器 从服务器 复制是异步的 从站不需要永久连接以接收来
  • React中文文档之Lifting State Up

    Lifting State Up 提升状态 经常的 几个组件需要映射相同的数据改变 我们推荐提升共享的state状态到它们最近的公共祖先元素 让我们看看这是如何实现的 在这个章节 我们将创建一个温度计算器 计算在一个给定的温度 水是否会沸腾
  • 20200331 --【Python】-- selenium 登录练习

    学习 python 的第59天 模拟腾讯课堂 自动化 登录案例 简单 coding utf 8 Time 2020 3 31 10 52 Author admin Site File 腾讯课堂登录 py Software PyCharm i
  • Allegro显示飞线和隐藏飞线

    隐藏飞线 显示飞线
  • C++ 标准库中数据类型转换

    头文件引用
  • 延迟队列的方案设计

    延迟队列的实现方案 一 应用场景 什么是延时队列 顾名思义 首先它要具有队列的特性 再给它附加一个延迟消费队列消息的功能 也就是说可以指定队列中的消息在哪个时间点被消费 延时队列在项目中的应用场景是比较多的 尤其像电商类平台 1 订单成功后
  • 基于js利用经纬度进行两地的距离计算

    根据地球上两点之间的经纬度计算两点之间的直线距离 经纬度到距离的计算在通信工程中应用比较广泛 所以cosbeta通过搜索找到了一个js的计算脚本 其实是google map的计算脚本 应该算是比较准确了 做成了这个经纬度算距离的工具 今天有
  • 全到哭,阿里新产2023版Java架构核心宝典,涵盖Java进阶所有主流技术

    导言 什么是架构师 对于程序员来说 聊架构是一个永不过时的话题 实际上 每一家公司都有自己对架构师不同的定位 因为不同的公司 所处的阶段 业务模式以及应用场景都不一样 因此对架构师的要求不一样 所以定位也就不同 但是 无论如何 架构师除了优
  • STM32------TFTLCD原理

    目录 TFTLCD简介 一 知识点 1 TFTLCD驱动原理 ALINETEK TFTLCD模块介绍 2 2 8寸TFLCD模块特点 3 TFTLCD模块原理图 4 TFTLCD接口说明 5 并口驱动简介 6 ILI9341驱动时序 7 驱
  • 过滤器使用与bean注入

    1 web xml中各元素启动顺序 在项目启动时 监听器listener最先初始化 然后是过滤器filter 最后是servlet Spring监听器在启动时会读取spring配置文件 进行spring容器的初始化 springMVC的di
  • springBoot上传文件时MultipartFile报null 空 问题解决方法

    1 问题描述 之前用spring MVC 转成spring boot之后发现上传不能用 网上参考说是spring boot已经有CommonsMultipartResolver了 但是我的上传后台接收的还是null 2 第一种解决方法 加入
  • Jenkins中使用火线进行Android静态代码扫描

    背景 火线 是360Qtest测试团队在公司内部经过半年实践后向外推出的一款针对Android代码的静态扫描工具 本文主要介绍如何在Jenkins下植入火线扫描并实时查看结果的配置 环境配置 Jenkins 推荐使用最新的版本 本文使用的是
  • Java基础系列8:Java的序列化与反序列化(修)

    一 简介 对象序列化就是把一个对象变成二进制的数据流的一种方法 通过对象序列化可以方便地实现对象的传输和存储 把对象转换为字节序列的过程称为对象的序列化 把字节序列恢复为对象的过程称为对象的反序列化 对象的序列化主要有两种用途 1 把对象的
  • matlab gui 如何输入矩阵,在matlab中如何输入矩阵方?

    这需要GUI设置 举个例子 By lyqmath DLUT School of Mathematical Sciences BLOG http blog csdn net lyqmathfunction main clc clear all

随机推荐

  • 【华为OD机试真题 JAVA】按身高和体重排队

    JS版 华为OD机试真题 JS 按身高和体重排队 标题 按身高和体重排队 时间限制 1秒 内存限制 262144K 语言限制 不限 某学校举行运动会 学生们按编号 1 2 3 n 进行标识 现需要按照身高由低到高排列 对身高相同的人 按体重
  • python3GUI--模仿一些b站网页端组件By:PyQt5(详细介绍、附下载地址)

    文章目录 一 前言 二 展示 1 banner 1 静图 2 动图 2 一般视频组件 1 静图 2 动图 3 排行榜 1 静图 2 动图 三 设计心得 顺序由简到难 1 排行榜 2 一般视频组件 3 banner 四 总结 五 下载地址 一
  • 介绍一下lpc1114

    我是LPC1114 它是一款由NXP半导体制造的低功耗32位ARM Cortex M0微控制器 具有多种外设 可满足高性能应用的需求 它拥有一个32位ARM Cortex M0内核 可以运行频率高达50MHz 提供最大64KB的Flash存
  • 基于opencv的数字识别系统

    一 目的 想要实现的功能 帮助我们在泵中扫描燃油 并在应用程序中输入燃油信息 所需技术 python程序对于拍摄的汽油泵的图像 尝试从中读取数字 opencv实现 先使用python对其进行原型设计 然后将代码转换成C 以在ios应用程序上
  • idea java编译报错_IDEA编译java报错的解决方法

    IDEA编译java报错的解决方法 发布时间 2020 06 26 11 54 16 来源 亿速云 阅读 119 作者 Leah 本篇文章给大家分享的是有关IDEA编译java报错的解决方法 小编觉得挺实用的 因此分享给大家学习 希望大家阅
  • Android Studio设置

    界面设置 默认的 Android Studio 为灰色界面 可以选择使用炫酷的黑色界面 Settings gt Appearance gt Theme 选择 Darcula 主题即可 字体设置 系统字体设置 如果你的Android Stud
  • js对表单序列化、MD5加密、AES加解密、cookie操作的、websocket等常用工具的整合

    在平时写代码中 一些工具会经常用到 但是我每次要用时都是到处去找依赖文件或者重新写方法 这样很麻烦于是为了方便我将一些常用的工具类写在一个js文件中 之后使用直接引入文件就可以了 这里我也拿出来分享给大家 批注 这个工具类中并不完全是本人原
  • 分布式事务:解决方案之2PC理论

    现在我们了解了 分布式事务 三个概念 和 分布式事务 两个理论 以这些为基础 针对不同的分布式场景 业界常见的有四大解决方案 2PC TCC 可靠消息最终一致性 最大努力通知 今天我们先说说2PC这个解决方案 1 什么是2PC 2PC即两阶
  • 关于C++类和对象访问权限的一点思考,类的成员函数访问同类型的对象的私有变量

    在学习拷贝构造函数和重载 号实现深拷贝的时候 发现我们可以在待拷贝对象调用成员函数时 在此成员函数的内部可以直接使用参数对象的私有变量 Class MyNum public MyNum int m int n m Num1 m m Num2
  • 解决Activity中或fragment时,点击手机返回键无效,无法触发onKeyDown

    Activity中或fragment时部分页面点击手机返回键无效 尤其是在页面第一次创建的时候和searchView获取焦点的时候会出现这种情况 那是因为你加载的fragement或Activity中嵌套了searchView控件的问题 虽
  • 年内实现全面自动驾驶?快来恶补一下自动驾驶技术吧

    在7月6日召开的2023世界人工智能大会上 特斯拉CEO斯克预测 随着人工智能技术的快速发展 大约在今年年末 就会实现全面自动驾驶 他说 我之前也做过许多类似的预测 我承认之前的预测也不完全准确 但是这一次的预测 我觉得是比较接近的 不知道
  • IAP 程序 跳转问题

    问题 STM32F407 未加下面 清除所有中断标志位 IAP无法跳转到APP 原因 开了定时器 配置了中断 在执行时为清除中断 导致程序无法跳转 void flash load application uint32 t applicati
  • Django图书商城系统实战开发-实现商品管理

    Django图书商城系统实战开发 实现商品管理 在本教程中 我们将使用Django框架来实现一个简单的图书商城系统 并重点讨论如何实现商品管理功能 此外 我们还将介绍如何使用Markdown格式来写博客 并将其集成到我们的图书商城系统中 介
  • evo安装、evo使用方法详细介绍使用教程,SLAM轨迹精度评估工具,如何用来评估ORB-SLAM2生成的轨迹精度,评估激光雷达SLAM与视觉SLAM的轨迹精度,量化SLAM的误差

    evo在视觉SLAM中是一个极为有用的工具 对于论文党 科研党 工程党都非常有帮助 它可以用于评估SLAM输出的轨迹的精度 可以自动生成均值 方差 轨迹等等信息的图或者表 总之评估SLAM精度用它足以 它目前支持的公开数据集格式有 TUM
  • Python自动化办公:openpyxl教程(进阶)

    在后台回复 阅读书籍 即可获取python相关电子书 Hi 我是山月 之前给大家分享了openpyxl的基础教程 Python自动化办公 openpyxl教程 基础 不知道大家学习的怎么样了 今天给大家分享一下整理了一周的openpyxl进
  • 如何解决非GUI运行Jmeter,jtl文件没有响应数据的解决办法

    一 问题 Jmeter官方一直强调要在非GUI模式下运行Jmeter Run your JMeter test in command line non GUI mode 但在非GUI模式下运行生成的jtl文件是不会记录请求数据和响应数据的
  • cntk 2.5 win10 vs2017 编译(Cpuonly)

    cntk编码风格还是很微软风格的 对于传统老微软程序员来说 研究cntk的代码 应该很有亲切感 51cto上面有李金洪的两个cntk的讲座 其中一个是免费的 这两个讲座都很有价值 两个讲座各4小时 不管是否研读cntk代码 这个视频都会很有
  • 【手拉手 带你准备电赛】使用定时器中断更改PWM占空比

    目录 关于PWM占空比存在的问题及分析 相关问题的解决方案 具体程序设计 注意事项 关于PWM占空比存在的问题及分析 在之前发布的有关占空比的文章中 我们看到输出信号的占空比只能在主函数中的while循环中更改 程序信号模拟图如下所示 这样
  • checked属性 详解

    https www cnblogs com mark5 p 11023851 html 注意 当元素中有checked属性时 其值无论是什么 都是被选中状态 那怎么才能让其不被选中呢 就是用jquery或js代码实现 1 html中的che
  • Dubbo 架构设计概览

    设计图 图示说明 图中左边淡蓝背景的为服务消费方使用的接口 右边淡绿色背景的为服务提供方使用的接口 位于中轴线上的为双方都用到的接口 图中从下至上分为十层 各层均为单向依赖 右边的黑色箭头代表层之间的依赖关系 每一层都可以剥离上层被复用 其