探索分布式服务框架Dubbo5:Dubbo架构原理

Dubbo分布式服务框架:原理深度解析与实战应用探索(三) ​ Dubbo是一个高性能的分布式服务框架,用于构建可伸缩的企业级应用软件系统。它由阿里巴巴集团开源,并在国内外广泛应用。 本文将跟随《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)》的进度,继续介绍Dubbo。希望通过本系列文章的学习,您将能够更好地理解Dubbo的内部工作原理,掌握Dubbo的使用技巧,以及通过合理的配置完成最佳实践,充分发挥Dubbo的潜力,为系统的高效运行提供有力保障。 ​ 阅读详情

聊聊Dubbo(三):架构原理

无论是Dubbo还是Dubbox,包括在之前《聊聊Dubbo(一):为何选择》中介绍的其他框架,其本质都是远程调用框架,而对于远程调用如果没有分布式的需求,其实是不需要用这么重的框架,只有在分布式的时候,才有Dubbo这样的分布式服务框架的需求,说白了就是个远程服务调用的分布式框架,其重点在于分布式的治理。那Dubbox这样的框架在分布式治理方面带来了哪些核心功能呢?

1 Dubbo核心功能

  1. Remoting:远程通讯,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。
  2. Cluster: 服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  3. Registry: 服务注册中心,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

对于以上的3个核心功能,Dubbo有涉及到哪些组件角色,来协作完成分布式治理的呢?

2 Dubbo组件角色

 

Dubbo组件角色

 

组件角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次调和调用时间的监控中心
Container服务运行容器

调用关系说明:

  1. 服务容器Container负责启动,加载,运行服务提供者。
  2. 服务提供者Provider在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者Consumer在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者Consumer,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者Consumer和提供者Provider,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心Monitor。

 

一张带有管理中心的组件关系图

 

3 Dubbo总体架构

上面介绍给出的都是抽象层面的组件关系,可以说是纵向的以服务模型的组件分析,其实Dubbo最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。所以,我们横向以分层的方式来看下Dubbo的架构,如图所示:

 

Dubbo分层架构

 

Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。

下面,结合Dubbo官方文档,我们分别理解一下框架分层架构中,各个层次的设计要点:

  1. 服务接口层(Service):与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
  2. 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过Spring解析配置生成配置类。
  3. 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
  4. 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
  5. 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
  6. 监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
  7. 远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
  8. 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
  9. 网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
  10. 数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。

从上图可以看出,Dubbo对于服务提供方和服务消费方,从框架的10层中分别提供了各自需要关心和扩展的接口,构建整个服务生态系统(服务提供方和服务消费方本身就是一个以服务为中心的)。

根据官方提供的,对于上述各层之间关系的描述,如下所示:

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

4 服务调用流程

 

服务调用流程

 

5 注册/注销服务

服务的注册与注销,是对服务提供方角色而言,那么注册服务与注销服务的时序图,如图所示:

 

注册服务与注销服务的时序图

 

6 订阅/取消服务

为了满足应用系统的需求,服务消费方的可能需要从服务注册中心订阅指定的有服务提供方发布的服务,在得到通知可以使用服务时,就可以直接调用服务。反过来,如果不需要某一个服务了,可以取消该服务。下面看一下对应的时序图,如图所示:

 

订阅/取消服务时序图

 

7 参考资料与推荐阅读

  1. dubbo.io
  2. Dubbo架构设计详解
UNet改进(52):轴向+代理注意力让UNet既轻快又精准 本文提出了一种改进的UNet架构,通过引入轴向注意力代理模块增强医学图像分割性能。该模块将二维自注意力分解为行列两个一维注意力操作,结合可学习代理节点进行全局信息聚合,在保持计算效率的同时提升模型对长距离依赖的建模能力。实验表明,该方法在多个医学图像数据集上较传统UNet提升3.2%-5.7%的Dice系数,边界质量显著改善。该方案特别适用于具有方向性结构的医学图像分割任务,如血管、器官等,在计算复杂度和分割精度之间实现了良好平衡。 阅读详情

相关推荐

轴承寿命预测实战:手把手教你用IEEE PHM2012数据集训练模型(附Python代码)

本文详细介绍了如何利用IEEE PHM2012数据集构建轴承剩余寿命预测模型,从数据预处理、特征工程到LSTM模型训练与部署,提供了完整的Python代码实现。通过实战案例,帮助读者掌握预测性维护中的关键技术,提升工业设备的运行安全与效率。

weixin_29186249的博客 311

Dubbo(五) Dubbo 中服务的负载均衡

Dubbo 中服务的负载均衡 1 什么是服务集群 一个服务,部署多次,形成的整体称为服务集群。 1.1服务集群优点 避免出现单点故障:如果集群中有某个服务宕机,其他服务可继续运行。 提高效率:在集群模式下有多个服务处理业务,相比非集群模式下可分担单个服务的压力,提高服务效率。 1.2集群模式 1.2.1 真实集群 真实集群是指在集群中,每一个节点在一个独立的物理机中运行,当某个物理机出现设备故障并不会影响其他节点的运行。建议在生产环境中使用。 优点:单个硬件出现故障并不会影响集群中其.

奥迪的博客 1005

从零开始安装使用opengauss数据库(高斯数据库)

openGauss(高斯数据库)的环境配置、安装方法、基本使用方法

qq_43764807的博客 1万+

第七篇:分布式组件(MQ、Job、Seata)

目录 一. Dubbo:高性能RPC框架 二. Netty:高性能NIO框架 三. Zookeeper:分布式协调服务 一. Dubbo:高性能RPC框架 二. Netty:高性能NIO框架 三. Nigix:高性能Web容器 四. Zookeeper:分布式协调服务 五. MQ:分布式消息中间件 (一)ActiveMQ (二)RabbitMQ (三)RocketMQ (四)Kafka 六. .........

xnninger的博客 5648

CH455G数码管驱动与键盘扫描:I2C通信协议深度解析与实战代码

本文深度解析CH455G芯片的I2C通信协议,涵盖数码管驱动与键盘扫描功能的实战应用。通过详细讲解起始/停止信号、数据帧结构、应答机制及单片机代码实现,帮助开发者高效利用该芯片减少IO占用,提升嵌入式系统设计效率。

tea88的博客 1085

yolov5-6.0的稀疏化训练、结构化剪枝、微调

YOLOv5的BN剪枝、微调

qq_41920323的博客 4394

分布式技术之dubbo

开源后,已被去哪儿,京东,吉利汽车,方正证劵,海尔,焦点科技,中润四方,华新水泥,海康威视,等公司广泛使用,并不停的有新公司加入,社区讨论及贡献活跃,得到用户很高的评价。Dubbo共有六个开发人员参与开发和测试,每一个开发人员都是很有经验,团队合作很默契,开发过程也很有节奏,有完善质量保障流程。服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。1,当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。...

张晨光老师的播客 802

Xinference新手指南(一个命令直接安装成功)

对于新手,必须得学会使用docker部署,这是基本功!这里就不过多去介绍了,如果评论要出教程的话,以后再出了。

Ven%的博客 818

分布式中间件之Dubbo详解

文章内容输出来源:拉勾教育Java高薪训练营 心得体会: 在拉勾教育高薪训练营里经过三个月多的学习,很辛苦但也收获很多,主要体现在:1.以前是工作遇到了哪方面的问题才去学习并解决,很难形成知识体系,在拉勾高薪训练营里课程内容很丰富,基础回顾加进阶讲解,完美的打造了个人的知识体系,为成为一名合格的架构师奠定了基础;2.值得一说的是“闯关式”的学习模式,若上一个模块的作业未完成就无法学习下一个模块,但有班主任和导师对个人的学习进行督促,可以让我们学员必须牢靠的掌握技术知识点;3.在知识点技术落地方面,以前只是听

tdd18792032806的博客 4123

HyperLynx(二十二)DDR(五)DDRx总线时序模型设计

DDR3 的数据选通信号与时钟信号的频率是一样的,在数据选通信号写操作时,控制器典型的输出方式是数据选通信号边沿与时钟近似对齐。该界面中显示了所有需要编辑的参数,包括地址/命令信号的时序、控制信号的时序、读和写操作的数据选通和数据信号时序、写操作的数据选通和数据掩码信号时序,以及建立和保持时间的降额参数。由于DDRx总线对时序的要求非常严格,随着速率的提升,时序的要求会更高。反之也是一样的,如果数据选通信号的上升沿在时钟信号上升沿的后面到达 DRAM,那么数据选通信号的下降沿就会在时钟信号的前面到达。

小幽余生不加糖 1935

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3341

Java分布式组件--dubbo(springboot集成dubbo)

dubbo Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。 下载安装zookeeper点击官网下载 windows 下安装运行zookeeper 1.解压后进入conf文件夹新增zoo.cfg文件 2.在zookeeper-3.4.11文件夹下新建data文件夹和l...

呼吸吐纳的博客 757

环保 HJ212协议解析

由于是做环保相关的,有时需要对212协议进行拆包和解包。HJ212协议是一种字符串协议,数据传输通讯包主要由包头、数据段长度、数据段、CRC校验、包尾组成,其中“数据段”内容包括请求编码、系统编码、命令编码、密码、设备唯一标识、总包数、包号、指令参数。请求编码为请求的时间戳,系统编码ST统一规定为22,命令编码CN为该数据包的时间类型,访问密码、设备唯一标识在对接时由平台提供,指令参数为数据内容。通讯协议的数据结构如图4所示。 图4 通讯协议的数据结构 6.1.1通讯包结构组成 名称 类型 长度

ccf19881030的专栏 2万+

Dubbo分布式服务框架:原理深度解析与实战应用探索(一)

Dubbo是一个高性能的分布式服务框架,用于构建可伸缩的企业级应用软件系统。它由阿里巴巴集团开源,并在国内外广泛应用。Dubbo的主要特点包括:服务治理:Dubbo提供了丰富的服务治理功能,包括服务注册与发现、负载均衡、容错机制等。通过这些功能,Dubbo可以实现服务的自动化管理和监控。通信协议:Dubbo支持多种通信协议,包括RPC、HTTP和消息队列等。这使得Dubbo可以灵活适应不同的应用场景。服务调用方式:Dubbo支持多种服务调用方式,包括同步调用、异步调用和单向调用。

凛鼕将至的博客 1681

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

dubbo的底层原理

一、Duboo基本概念解释 Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor 监控中心和调用中心。这两个是可选的,需要单独配置。 Dubbo的计数架构图如下: 我们解释以下这个架构图: Consu

蓝天之枫 15万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Dubbo框架原理剖析

Dubbo框架原理剖析 分享: 屈亚锋 目录 文章目录背景简单介绍核心功能架构原理节点角色说明调用关系说明服务发布与引用spring配置声明服务spring解析配置如何暴露服务服务引用注册中心集群容错负载均衡策略 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。...

程序员专栏 3276

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Dubbo的原理,面试常见问题

可能我们在平常工作中都会用到dubbo,但是好多同学只是知道应用但是却不一定知道他的原理,今天来说一说dubbo的原理,首先我们要知道dubbo到底是什么,都能提供些什么服务? 一、dubbo是什么? dubbo是⼀个分布式服务框架,提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理方案。说白了其实dubbo就是一个远程调用的分布式框架。 二、dubbo的核心服务是什么? ...

我是个少年的博客 3万+

dubbo架构及原理

Dubbo是阿里巴巴开源的一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等. 这篇文章从dubbo的需求和背景出发,介绍了dubbo的框架设计、依赖关系、调用链、暴露服务时序和引用服务的时序,最后介绍了dubbo设计的一些基本原则

youlianyiran的专栏 4387

Dubbo分布式服务框架全解析

摘要:Dubbo是一款高性能分布式服务框架,提供透明化的RPC远程调用和SOA服务治理方案。其核心功能包括远程通讯、集群容错和自动服务发现,通过注册中心实现服务动态管理。架构包含Provider、Consumer、Registry等角色,支持负载均衡和失败容错。使用方式基于Spring配置,通过Zookeeper作为注册中心,服务提供者暴露接口,消费者订阅调用。典型应用场景包括替代硬件负载均衡器,实现服务自动注册与发现。测试时可通过管理页面监控各节点状态,确保服务正常运行。

YF云飞的博客 914

dubbo是什么以及dubbo的原理

dubbo是什么? Dubbo是一个分布式服务框架,是阿里巴巴的开源项目,Dubbo 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 dubbo的架构 这是官网提供的一张dubbo架构图 节点 内容 Container dubbo服务运行的容器 Provider 服务的提供者(一般为业务层service和持久层dao) Customer...

断橋殘雪的博客 3858

Dubbo与Zookeeper实现分布式服务框架

1 Dubbo与Zookeeper实现分布式服务框架 1.1远程通信的实现方案  WebService:基于SOAP协议的通信方式,主要是使用XML作为中间交互,效率偏低。项目中使用量较小。  RestFul:使用HTTP协议和JSON完成交互对接。若系统中服务较多,服务之间的调用关系过于混乱,需要进行服务治理。  Dubbo:应用RPC协议完成远程调用。由于应用的Socket通信协议方式,...

LI_AINY的博客 973

Apache Dubbo 分布式服务框架

核心定位:高性能 Java RPC(远程过程调用)框架,专注于分布式服务治理核心能力:服务注册发现、负载均衡、容错机制、动态配置管理生态地位:阿里巴巴开源,Apache 顶级项目,微服务核心基础设施。

slovess的博客 1056

Dubbo第二讲:深入理解dubbo分布式服务框架/负载/容错/调优/高可用/dubbo网关/面试/技术选型

深入理解dubbo分布式服务框架/负载/容错/调优/高可用/面试 摘要:作为和cloud二分微服务框架天下的dubbo,无论是面试,还是在项目中,屡屡用到,作为阿里生态的政采云,在项目中也用到了dubbo作为服务中间件。本文从介绍dubbo开始,层层递进,讲解其使用情况/核心技术/节点说明/底层原理/高可用/技术选型/面试踩坑。 1、dubbo:分布式服务框架 什么是dubbo? 高性能和透明......

Jet_qi的博客 1707

Dubbo 全解析:从入门到精通的分布式服务框架实战指南

Dubbo 作为国内最成熟的分布式服务框架,以其稳定的性能、丰富的功能和易用性,成为无数企业构建微服务架构的首选。通过本文的学习,读者不仅掌握了 Dubbo 的基础使用,更理解了其架构设计与高级特性,能够应对从简单到复杂的分布式场景。

欢迎来到我的博客! 1361

dubbo原理机制

dubbo原理机制

weixin_41987908的博客 4218
上一篇: 探索分布式服务框架Dubbo7:Dubbo高级特性剖析
下一篇: 探索分布式服务框架Dubbo2:以RPC为基础的微服务
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值