官方文档: Dubbo 框架设计、模块说明、依赖关系

 

以下内容全文转自 apache 官方 dubbo文档:http://dubbo.apache.org/en-us/docs/dev/design.html

 

框架设计

/dev-guide/images/dubbo-framework.jpg

 

图片描述:

  • 浅蓝色背景的左侧区域显示服务用户界面,浅绿色背景的右侧区域显示服务提供者界面,中心区域显示两个侧面界面。
  • 图像从底部到顶部分为10层,这些层是单向依赖的。右侧的黑色箭头表示层之间的依赖关系,每层可以从上层剥离以重复使用,Service和Config层是API,其他层是SPI。
  • 绿框是扩展接口,蓝框是实现类,图像仅显示关联层的实现类。
  • 蓝色虚线是初始化过程,启动时为装配链,方法调用过程为红线,运行时调用链,继承紫色三角箭头,可将子类视为父类的同一节点,文本为lines是方法调用。

图层描述

  • config层:外部配置界面,ServiceConfig并且ReferenceConfig是图层的中心,可以直接初始化配置类,也可以通过spring生成配置类。
  • 代理层:服务接口的透明代理,生成客户端Stub服务和服务器Skeletion of service,ServiceProxy是中心,扩展接口是ProxyFactory
  • 注册表层:服务注册表和发现的封装,服务URL是中心,扩展接口是RegistryFactoryRegistryRegistryService
  • 簇层:muliple提供商和负载平衡,和桥接登记中心的簇的封装,Invoker是中心,扩展接口是ClusterDirectoryRouterLoadBalance
  • 监控层:的RPC调用倍显示器和呼叫执行时间,Statistics是中心,扩展接口是MonitorFactoryMonitorMonitorService
  • 协议层:RPC的封装,Invocation并且Result是中心,扩展接口是ProtocolInvokerExporter
  • 交换层:的请求和响应,同步传输异步封装,Request并且Response是中心,扩展接口是ExchangerExchangeChannelExchangeClientExchangeServer
  • 传输层:米娜和网状的抽象,Message是中心,扩展接口是ChannelTransporterClientServerCodec
  • 序列化层:可重复使用的工具,扩展接口SerializationObjectInputObjectOutputThreadPool

关系描述

  • 在RPC中,Protocol是核心层,它意味着您可以通过Protocol + Invoker + Exporter完成RPC调用,然后在Invoker的主进程中进行过滤。
  • Consumer和Provider是抽象概念,只是希望您能更直观地了解哪些类属于客户端和服务器端,不使用Client和Server的原因是Dubbo使用Provider,Consumer,Registry,Monitor划分逻辑拓扑节点。场景,保持团结的概念。
  • Cluster是外部概念,Cluster的目的是让各种Invoker伪装成一个Invoker,这样我们只关注Invoker in Protocol层,添加Cluster或删除Cluster不会影响其他层,因为我们不需要Cluster什么时候只有一个提供者。
  • Proxy层封装了所有接口的透明代理,在Invoker作为中心的其他层中,将Invoker转换为接口,或者仅在暴露给用户时将接口实现转换为Invoker by Proxy。RPC仍然可以工作,甚至删除代理层,但不是那么透明,使得远程服务调用看起来不像本地服务调用。
  • 远程处理是Dubbo协议的实现,如果选择RMI,您可以删除远程处理。Remoting分为Transport层和Exchange层,Transport层负责单向消息传输,它是Mina,Netty,Grizzly的抽象,它还可以扩展UDP传输。Exchange层在传输层上封装了Request-Response语义。
  • 实际上Registry和Monitor不在同一层,它们是独立的节点,只是为了全局视图而一层一层地绘制它们。

模块包装

/dev-guide/images/dubbo-modules.jpg

模块说明:

  • dubbo-common模块:包括Util类和通用模块。
  • dubbo-remoting模块:是Dubbo协议实现,如果使用RMI for RPC则无需使用此模块。
  • dubbo-rpc模块:各种协议的抽象,和动态代理,只有一对一的调用,不关心集群的管理。
  • dubbo-cluster模块:将许多服务提供者伪装成一个提供者,包括负载平衡,容错,路由等。群集的地址列表可以是静态的,也可以是注册表发送的。
  • dubbo-registry模块:基于注册表发送地址的集群和各种注册中心的抽象。
  • dubbo-monitor模块:服务呼叫时间统计,呼叫时间,呼叫链跟踪服务。
  • dubbo-config模块:是Dubbo外部API,用户使用Dubbo by Config,隐藏Dubbo的详细信息。
  • dubbo-container模块:是一个Standlone容器,只需使用Main方法加载Spring,因为通常服务不需要Tomcat / JBoss功能。

包层根据层结构划分,与层划分的区别:

  • 容器是服务容器,用于服务运行部署,未在映像中显示。
  • 协议层和代理层都放在RPC模块中,它们是RPC模块的核心,当只有1个提供者时,可以使用这2层完整的RPC调用。
  • 传输层和交换层放置在远程模块中,用于RPC呼叫基础通信。
  • 序列化层放在通用模块中,以便重用。

依赖关系

/dev-guide/images/dubbo-relation.jpg

图片描述:

  • 图像,协议,群集,代理,服务,容器,注册表,监视器中的框表示层或模块,蓝调表示与业务交互,绿色表示仅与Dubbo的内部交互。
  • 图像,消费者,提供者,注册表,监视器中的背景框表示部署逻辑拓扑节点。
  • 调用图像中的蓝色虚线进行初始化,为运行时异步调用红色虚线,并为运行时同步调用红线。
  • 图像仅包含RPC层,不包括Remoting层,整个Remoting隐藏在Protocol层中。

调用链

展开整个设计地图的红色调用链:

/dev-guide/images/dubbo-extension.jpg

公开服务顺序

展开服务提供者公开服务的初始化链,在整个设计图的左侧,序列图如下所示:

/dev-guide/images/dubbo-export.jpg

参考服务序列

展开服务使用者参考服务的初始化链,在整个设计图的右侧,序列图如下所示:

/dev-guide/images/dubbo-refer.jpg

领域模型

达博的核心领域模型:

  • 协议是服务域,它是Invoker暴露和参考的主要功能入口,它负责Invoker的生命周期管理。
  • Invoker是实体域,它是Dubbo的核心模型,所有其他模型都受到干扰,或转换为它,它代表一个可执行文件,你可以通过调用invoke来调用它,它可以是一个本地实现,一个远程实现,或者集群实现。
  • 调用是会话域,它在调用进程中保存变量,例如方法名称,参数等。

基本设计原则

  • 使用Microkernel + Plugin设计模式,Microkernel只负责组装插件,Dubbo的功能是通过扩展点实现的,这意味着Dubbo的所有功能都可以被用户自定义扩展替换。
  • 使用URL作为配置信息的startdard格式,所有扩展点都通过URL传输配置信息。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那些花儿

今天上海下雨了,心绪也变得低落,突然很想念宿舍的姐妹。毕业后就自作聪明地和她们失去了联系,今天去QQ群遛了一圈。虹结婚了,敏还是活得那么潇洒,笑也在努力地生活... 人生啊!总是在向前走,遇…

Linux 上 安装 nginx、 阿里云服务器上安装 nginx

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Docker 方式安装见另一文:Docker 方式安装 Nginx 、阿里云服务器上装 Ngnix 1. gcc 安装 安装 nginx 需要先将官网下载的源…

CSDN-markdown编辑器使用说明

欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

Springcloud 引导上下文

SpringCloud为我们提供了bootstrap.properties的属性文件,我们可以在该属性文件里做我们的服务配置。可是,我们知道SpringBoot已经为我们提供了做服务配置的属性文件application.properties,那么这两个配置文件有什么区别呢?在Spr…

Flask-1-05-CookieSession

接下来我会演示一下设置Cookie 读取Cookie 删除Cookie,以及添加Cookie的原理 接下来我们分别定义3个视图为 set_cookie、get_cookie、del_cookie # coding:utf-8from flask import Flask, make_response, requestapp Flask(__name__)app.route("/set_cookie&q…

解决跨域问题:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 PS:如果遇到 这个问题 Request header field Content-Type is not allowed by Access-Control-Allow-Headers,解…

vue 设置全局变量、指定请求的 baseurl

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 安装 axios&#xff1a; npm install axios --save-dev 2. 新建一个 Base.vue 文件&#xff0c;书写内容如下&#xff1a; <sc…

JAXP进行DOM和SAX解析

1.常用XML的解析方式&#xff1a;DOM和SAX 1&#xff09;DOM思想&#xff1a;将整个XML加载内存中&#xff0c;形成文档对象&#xff0c;所以对XML操作都对内存中文档对象进行。 2&#xff09;SAX思想&#xff1a;一边解析&#xff0c;一边处理&#xff0c;一边释放内存资源---…

VScode 格式化代码快捷键、修改快捷键

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 请看仔细快捷键是&#xff1a; shift alt F // 我是从 eclipse 转的 idea &#xff0c;现在再用 vscode , 一直条件反射的按的 c…

TCP报文格式详解

TCP协议只定义了一种报文格式 建立、拆除连接、传输数据使用同样的报文 TCP报文格式 TCP报文段首部&#xff08;20个字节&#xff09; 源端口和目的端口&#xff1a;各占2个字节&#xff0c;16比特的端口号加上32比特的IP地址&#xff0c;共同构成相当于传输层服务访问点的地址…

Vue 生命周期中 mounted( ) 和 created( ) 的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、什么是生命周期&#xff1f; 用通俗的语言来说&#xff0c;就是Vue中实例或者组件从创建到消灭中间经过的一系列过程。虽然不太严谨…

基于java的数据结构学习——数组实现的栈以及简单应用

栈 Stack 栈是一种线性结构相比数组&#xff0c;栈对应的操作是数组的子集只能从一端添加元素&#xff0c;也只能从一端取出元素这一端称为栈顶栈是一种后进先出的数据结构 栈的应用 无处不在的Undo操作&#xff08;撤销&#xff09;括号匹配&#xff08;编译器&#xff09;程…

2013驾考科目三考试难点解析

原来规定科目三考试上车准备、起步、直线行驶等13个道路驾驶技能项目。123号令实施后&#xff0c;科目三考试分两部分。道路驾驶技能考试项目增加到16项&#xff0c;增加了加减挡位操作、路口左转弯、路口右转弯3个考试项目&#xff0c;驾驶里程也增加。如何顺利通过2013驾考科…

基于java的数据结构学习——数组实现的队列和循环队列及性能对比

队列 Queue 队列也是一种线性结构相比数组&#xff0c;队列对应的操作是数组的子集只能从一端&#xff08;队尾&#xff09;添加元素&#xff0c;只能从另一端&#xff08;队首&#xff09;取出元素队列是一种先进先出的数据结构 队列的实现及复杂度分析 Queue<E> voi…

新手如何准确的控制油门

日常练车还不赖&#xff0c;可是一换车就容易加大油门儿&#xff0c;有啥子办法能美好的扼制油呢?和调的坐位有关系吗? 答&#xff1a;油门儿跟刹车被视为交通工具扼制的魂灵。交通工具引擎发动机的油门儿&#xff0c;通常是靠踏板来扼制的&#xff0c;也称加速踏板&#xff…

vue 项目:文件夹 结构 、配置详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 项目配置 首先&#xff0c;在确定好使用的框架和组件库后&#xff0c;先要大致了解它们&#xff0c;做到文档基本熟悉。本次开发使用…

DIV 半透明层、 CSS实现网页 背景半透明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 DIV半透明实现&#xff0c;使用CSS实现DIV成半透明效果&#xff0c;CSS实现层与背景半透明效果。 一、DIV CSS半透明基础介绍 - …

加速时如何换挡

加速时如何换挡&#xff0c;您知道吗?为了使换挡过程顺利进行&#xff0c;变速器内齿轮平稳啮合&#xff0c;必须掌握好发动机转速&#xff0c;在适当时机推动变速杆操纵齿轮啮合。为此&#xff0c;要通过反复练习&#xff0c;一边踩踏油门踏板&#xff0c;一边听发动机运转声…

vue 项目 引用(外部) js、css

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我的工程结构&#xff1a; 1. 引入 css 有 2 种方式&#xff1a; 方式 1 <script type"text/javascript">import .…

自动挡车挡位的基本知识介绍

一般来说&#xff0c;自动档汽车的自动变速器的档位分为P、R、N、D、2 (或S)、L(或1)等。下面分别详细介绍如下&#xff1a; P (Parking) 停车档&#xff0c;或称泊车档&#xff1a; P用作停车之用&#xff0c;它是利用机械装置去锁紧汽车的转动部分&#xff0c;使汽车不能移动…