Dubbo的原理与机制

article/2025/11/7 21:24:00

Dubbo

前言

在介绍Dubbo之前先了解一下基本概念:

Dubbo是一个RPC框架,RPC,即Remote Procedure Call(远程过程调用),相对的就是本地过程调用,在分布式架构之前的单体应用架构和垂直应用架构运用的都是本地过程调用。它允许程序调用另外一个地址空间(通常是网络共享的另外一台机器)的过程或函数,并且不用程序员显式编码这个远程调用的细节。

而分布式架构应用与应用之间的远程调用就需要RPC框架来做,目的就是为了让远程调用像本地调用一样简单。

在这里插入图片描述

Dubbo框架有以下部件:

Consumer

即调用远程服务的服务消费方,消费者需要面向接口编程,知道了哪些接口可以调用了,具体实现需要框架提供一个代理类来为接口提供具体实现,让消费者只管调用什么接口,而具体实现的获取由代理类来处理。

消费者还需要提供调用方法名以及方法的参数值。

但是代理类此时还不知道需要调用哪个服务器上的远程方法,此时需要一个注册中心,通过注册中心获取可以调用的远程服务列表。

远程服务器一般都是集群部署,那么调用哪个服务器则需要通过负载均衡来选择一个最合适的服务器来调用。

同时还需要有集群容错机制,因为各种原因,可能远程调用会失败,此时需要容错机制来重试调用,保证远程调用的稳定性。

同时与服务提供方约定好通信协议序列化格式,方便通信以及数据传输。

Provider

即暴露服务的服务提供方,服务提供方内部实现具体的接口,然后将接口暴露出去,再将服务注册到注册中心,服务消费方调用服务,提供者接收到调用请求后,通过约定好的通信协议来处理该请求,然后做反序列化,完成后,将请求放入线程池中处理,某个线程接收到这个请求然后找到对应的接口实现进行调用,然后将调用结果原路返回。

Registry

即服务注册发现的注册中心,注册中心负责服务地址的注册与查找,相当于服务目录,服务提供者和消费者只会再启动时与注册中心交互,注册中心不转发请求,压力小。

在这里插入图片描述

注册中心还可以集中化处理配置以及动态地将变更通知订阅方。

但是为什么需要注册中心呢?没有注册中心不可以吗?

在没有注册中心,各服务之间的调用关系是这样的:

在这里插入图片描述

当服务越来越多时,服务URL配置管理变得非常困难,硬件负载均衡器的单点压力也越来越大,而有了注册中心之后,就可以实现服务的统一管理,并且实现软负载均衡,降低硬件成本,以下为注册中心示意图:

在这里插入图片描述

Monitor

即统计服务调用次数和调用时间的监控中心,面对众多服务,精细化的监控和方便的运维是不可或缺的,对后期维护相当重要。

Container

即服务运行的容器。


架构

在这里插入图片描述

图中的各个节点充当的角色已经介绍过了,以下是各节点之间调用关系:

  • Container服务容器负责启动,加载以及运行Provider服务提供者
  • Provider服务提供者启动时,需要将自身暴露出去让远程服务器可以发现,同时向Registry注册中心注册自己提供的服务
  • Consumer服务消费者启动时,向Registry注册中心订阅所需要的服务
  • Registry注册中心返回服务提供者列表给消费者,同时如果发生变更,注册中心将基于长连接推送实时数据给消费者
  • 服务消费者需要调用远程服务时,会从提供者的地址列表中,基于负载均衡算法选出一台提供者服务器进行调用,如果调用失败,会基于集群容错策略进行调用重试
  • 服务消费者与提供者会在内存中统计调用次数和调用时间,然后通过定时任务将数据发送给Monitor监控中心

高可用性

  • 监控中心宕机后不会对服务造成影响,只是丢失部分统计数据
  • 注册中心集群后,任意一台宕机后,将自动切换到其他注册中心
  • 当所有注册中心均宕机后,服务提供者和消费者之间仍然能通过本地记录了彼此信息的缓存进行通讯,但是如果一方产生变更,另外一方无法感知
  • 服务提供者无状态,任意一台服务器宕机后不影响使用,会有其他服务提供者提供服务
  • 当所有服务提供者宕机后,服务消费者无法正常使用,将进行无限次重连等待服务提供者重新连线恢复

框架设计

在这里插入图片描述

大的分层为Business(业务逻辑层)、RPC层和Remoting层。

再细分下来,Dubbo一共有十层架构,作用分别如下:

  • Service,业务层,即日常开发中的业务逻辑层
  • Config,配置层,对外配置接口,以ServiceConfigReferenceConfig为中心,可以直接初始化配置类,也可以通过Spring解析配置生成配置类
  • Proxy,服务代理层,服务接口透明代理,生成服务的客户端Stub和客户端Skeleton,负责远程调用和返回结果
  • Registry,注册中心层,封装服务地址的注册与发现,以服务URL为中心,拓展接口为RegistryFactoryRegistryRegistryService
  • Cluster路由和集群容错层,封装了多个提供者的路由、负载均衡以及集群容错,并桥接注册中心,负责通过负载均衡选取调用具体的节点,处理特殊调用请求和负责远程调用失败的容错措施
  • Monitor,监控层,负责监控统计RPC调用次数和调用时间
  • Portocol,远程调用层,主要封装RPC远程调用方法
  • Exchange,信息交换层,用于封装请求响应模型
  • Transport,网络传输层,抽象化网络传输统一接口,有MinaNetty可供使用
  • Serialize,序列化层,将数据序列化成二进制流进行传输,也可以反序列化接收数据

服务暴露过程

首先Provider启动,Protocal通过Proxy代理将需要暴露的接口封装成Invoker,是一个可执行体,然后通过Exporter包装并发送到注册中心完成注册,至此服务就暴露完成。

在这里插入图片描述


服务消费过程

在这里插入图片描述

注:上图中蓝色部分为服务消费者,绿色部分为服务提供者。

服务消费者启动时会向注册中心订阅并拉取所需服务提供者的信息,并保存到本地缓存,由此即使所有注册中心宕机后,服务提供者和服务消费者也可以通过本地缓存进行通讯,只是一方出现了信息变更,另一方无法感知,但并不影响服务的进行。

之后整个服务消费流程从图中的Proxy开始,由代理类完成处理,以此到达透明无感知。

ProxyFactory生成一个Proxy代理类,Proxy持有一个Invoker可执行对象,调用invoke之后需要通过Cluster从Directory中获取所有可调用的远程服务Invoker列表,如果配置了某些路由规则,还需要再过滤一遍Invoker列表。

剩下的Invoker再通过LoadBalance做负载均衡选取一个,还需要再通过Filter进行一些数据统计,之后将这些数据保存下来,定时发送给Monitor

接下来用Client做数据传输,一般用Netty进行传输。

传输需要通过Codec接口进行协议构造,然后再通过Serialization进行序列化,最后将序列化后的二进制流发送至给对应的服务提供者。

<=分割线=>

服务提供者接收到二进制流后也会进行Codec协议处理,然后进行反序列化(此处的处理与传输之前的处理是呈对称的)后将请求放入线程池中处理,某个线程会根据请求找到对应的Exporter,然后再通过Filter进行层层过滤得到Invoker,最终调用对应的实现类然后将结果原路返回。


以上。

整理不易,如果对你有帮助请留个三连吧!

如有错误或不足欢迎评论指正。


http://chatgpt.dhexx.cn/article/LiQo3bU8.shtml

相关文章

Dubbo基础及原理机制

1. 什么是Dubbo&#xff1f; Dubbo是 阿里巴巴公司开源的一个高性能RPC 分布式服务框架&#xff0c;使得应用可通过高性能的 RPC 实现服务的输出和输入功能&#xff0c;可以和 Spring框架无缝集成&#xff0c;现已成为 Apache 基金会孵化项目。 2. 为什么要用Dubbo&#xff1…

Dubbo原理和机制详解(非常全面)

Dubbo是一款Java RPC框架&#xff0c;致力于提供高性能的RPC远程服务调用方案。Dubbo 作为主流的微服务框架之一&#xff0c;为开发人员带来了非常多的便利。 本文我们重点详解 Dubbo 的原理机制 mikechen 目录 Dubbo核心功能Dubbo核心组件Dubbo的架构设计Dubbo调用流程 1️…

大地测量学基础(复习)第一部分

写在前面 这篇博文是用来复习课程“大地测量学基础”的&#xff0c;里面仅列出本人觉得这门课程比较重要的部分&#xff0c;希望能够帮助到有需要的朋友。 课本采用《大地测量学基础》孔祥元&#xff0c;武汉大学出版社。 前面已经有一篇“大地测量学基础&#xff08;复习&…

深入理解ArcGIS的地理坐标系、大地坐标系

1、引言 地理坐标&#xff1a;为球面坐标。 参考平面地是 椭球面,坐标单位:经纬度 大地坐标&#xff1a;为平面坐标。参考平面地是 水平面,坐标单位&#xff1a;米、千米等 地理坐标转换到大地坐标的过程可理解为投影。 &#xff08;投影&#xff1a;将不规则的地球曲面转…

GNSS定位中的不同高度概念及计算

文章目录 高度相关的几个基本概念RTKLIB中高度设置与计算参考文献 由于在GNSS定位中由多种高度表示&#xff0c;不同的高度概念很容易混淆&#xff0c;中英文对应有时候也容易搞混。因此整理了一下常用的两种高度——椭球高、正高的概念与计算&#xff0c;并且标注了对应的英文…

概念讲解:大地水准面 | 地球椭球体 | 参考椭球体 | 大地基准面 | 地图投影

文章目录 大地水准面地球椭球体参考椭球体大地基准面地图投影几个概念之间的关系相关文章 大地水准面 指平均海平面通过大陆延伸勾画出的一个连续的封闭曲面。大地水准面包围的球体称为大地球体。从大地水准面起算的陆地高度&#xff0c;称为绝对高度或海拔。 大地水准面是对地…

地图学的基础知识_天文坐标系_大地坐标系_地心坐标系及其相关概念

学习地图学&#xff0c;由于地理知识欠缺&#xff0c;学习相关投影知识还为时过早&#xff0c;需要复习一些基本概念。 阅读对象:测绘类 地球自然球体: 由地球自然表面所包围的的形体称为地球自然体。 地球自然球体形状:地球不是一个正球体&#xff0c;而是一个极半径略短&a…

大地测量学

大地测量学简答题复习 问&#xff1a;建立国家平面控制网的方法&#xff1f; 答&#xff1a; 常规大地测量&#xff1a;三角测量&#xff08;已知一个点的坐标&#xff0c;又精密测量了1&#xff0c;2点的边长和坐标方位角&#xff0c;依据三角形的正弦定理推测出其他边的长…

[复试——大地测量学]第一章节——2022/12/30

PART 1 大地测量学的定义 是在一定的时间和空间的参考系中&#xff0c;测量和描绘地球形状及其重力场并监测其变化&#xff0c;为人类活动提供地球空间信息的一门学科。 大地测量学的作用 1.建立地面控制网 2.精确测定大地控制点的三维位置以及其重力场参数 大地测量学的…

1985高程基准与全球大地水准面(EGM2008)的关系综述

​按照惯例&#xff0c;先给结论&#xff1a; &#xff08;1&#xff09;1985国家高程基准与EGM2008的差异有严密的理论公式计算&#xff1b; &#xff08;2&#xff09;1985国家高程基准与EGM20008的垂直偏差与参考系、水准模型、选取的水准点有关系 &#xff08;3&#xf…

似大地水准面精化

转载自&#xff1a;http://blog.sina.com.cn/s/blog_64886846010153qi.html 大地高是指以参考椭球面作为高程基准面的高程系统&#xff0c;是地面点沿法线到参考椭球面的距离。 正高是地面点沿重力线到大地水准面的距离。正常高是指从一地面点沿过此点的**正常重力线**到似…

正常高、大地高、海拔高的测绘概念

一、海拔高、大地高 高程是地理学和测量学中对地物高度的一种表达。英文的表达是elevation。与高程相关的两个概念——大地高与海拔高,在实践上有差异,但很容易混淆。 王慧麟等编著的《测量与地图学》(南大出版社,2004年)中对这两个概念有明确表述: 点位沿椭球面的法线至…

大地高、正高和正常高及高程异常

测量学习过程中&#xff0c;这几个高程或许曾困扰过许多人&#xff08;其中也包括我&#xff09;&#xff0c;希望我能在这里把这些说清楚。 可以简单地理解&#xff0c;高程其实就是某点到某个基准面的距离。 这么算下来&#xff0c;对于这几个高程的理解就是怎么理解相对应…

大地高、海拔高 地心纬度、大地纬度/地理纬度

大地测量学模型所表示的地球表面&#xff0c;所有点的当地重力矢量都垂直于该表面&#xff0c;即一个“等位面”&#xff1b;这种形状称为大地水准面&#xff01; 但是由于表面及其不规则&#xff0c;见如下图&#xff1a; 真实的地球据说如下&#xff1a; 地球真实不是一个正球…

大地高、正高和正常高的区别

测量学习过程中&#xff0c;这几个高程或许曾困扰过许多人&#xff08;其中也包括我&#xff09;&#xff0c;希望我能在这里把这些说清楚。 可以简单地理解&#xff0c;高程其实就是某点到某个基准面的距离。 这么算下来&#xff0c;对于这几个高程的理解就是怎么理解相对应…

大地高和正常高、正高的详细说明

测量学习过程中&#xff0c;这几个高程或许曾困扰过许多人&#xff08;其中也包括我&#xff09;&#xff0c;希望我能在这里把这些说清楚。 可以简单地理解&#xff0c;高程其实就是某点到某个基准面的距离。 这么算下来&#xff0c;对于这几个高程的理解就是怎么理解相对应…

【转载】GIS概念解析:大地高 | 海拔 | 正高 | 正常高

一、海拔高、大地高 高程是地理学和测量学中对地物高度的一种表达。英文的表达是elevation。与高程相关的两个概念——大地高与海拔高&#xff0c;在实践上有差异&#xff0c;但很容易混淆。 王慧麟等编著的《测量与地图学》&#xff08;南大出版社&#xff0c;2004年&#x…

大地高、正高和正常高

测量学习过程中&#xff0c;这几个高程或许曾困扰过许多人&#xff08;其中也包括我&#xff09;&#xff0c;希望我能在这里把这些说清楚。 可以简单地理解&#xff0c;高程其实就是某点到某个基准面的距离。 这么算下来&#xff0c;对于这几个高程的理解就是怎么理解相对应…

java 椭圆拟合,OpenCV2马拉松第25圈——直线拟合与RANSAC算法

最小二乘法(least square)拟合 Total least square 拟合 RANSAC拟合 葵花宝典 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWJjZDE5OTI3MTln/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA/dissolve/70/gravity/Center" alt""> 终于&#xff0c;我们就能解…

激光数据的直线拟合

激光雷达获取的信息是和周围物体之间的距离信息&#xff0c;在移动机器人尤其是自主移动机器人领域具有非常广泛的应用&#xff0c;那我们就从移动机器人的自主导航开始聊吧。 移动机器人导航是指移动机器人依靠传感器在特定环境中&#xff0c;按时间最优、路径最短或能耗最低…