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

article/2025/11/7 21:22:04

Dubbo是一款Java RPC框架,致力于提供高性能的RPC远程服务调用方案。Dubbo 作为主流的微服务框架之一,为开发人员带来了非常多的便利。

本文我们重点详解 Dubbo 的原理机制 @mikechen

目录

  • Dubbo核心功能
  • Dubbo核心组件
  • Dubbo的架构设计
  • Dubbo调用流程

1️⃣ Dubbo核心功能

Dubbo主要提供了3大核心功能:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

 1)远程方法调用

网络通信框架,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。

 2)智能容错和负载均衡

提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3)服务注册和发现

服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

2️⃣ Dubbo核心组件

Dubbo角色,主要包含如下几个核心组件:

1)注册中心(registry)

生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。

2)消费者(consumer)

客户端,从注册中心获取到方法,可以调用生产者中的方法。

3)生产者(provider)

服务端,生产内容,生产前需要依赖容器(先启动容器)。

4)容器(container)

生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),

5)监控(Monitor)

统计服务的调用次数与时间等。

3️⃣ Dubbo的架构设计

Dubbo整体架构如下图所示:

图中:

  • 左边(淡蓝背景):为服务消费方使用的接口
  • 右边(淡绿色背景):为服务提供方使用的接口
  • 位于中轴线上:为双方都用到的接口。

Dubbo 框架设计一共划分了10个层:

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。

4️⃣ Dubbo调用流程

对照上面的整体架构图,大致分为以下8大步骤:

1、服务提供者启动,开启Netty服务,创建Zookeeper客户端,向注册中心注册服务;

2、服务消费者启动,通过Zookeeper向注册中心获取服务提供者列表,与服务提供者通过Netty建立长连接;

3、服务消费者通过接口开始远程调用服务,ProxyFactory通过初始化Proxy对象,Proxy通过创建动态代理对象;

4、动态代理对象通过invoke方法,层层包装生成一个Invoker对象,该对象包含了代理对象;

5、Invoker通过路由,负载均衡选择了一个最合适的服务提供者,在通过加入各种过滤器,协议层包装生成一个新的DubboInvoker对象;

6、再通过交换成将DubboInvoker对象包装成一个Reuqest对象,该对象通过序列化通过NettyClient传输到服务提供者的NettyServer端;

7、到了服务提供者这边,再通过反序列化、协议解密等操作生成一个DubboExporter对象,再层层传递处理,会生成一个服务提供端的Invoker对象;

8、这个Invoker对象会调用本地服务,获得结果再通过层层回调返回到服务消费者,服务消费者拿到结果后,再解析获得最终结果。

以上,是关于 Dubbo 原理及机制的详细解析,可以作为 Dubbo 的参考学习资料,建议收藏、时常温顾。

如果觉得有用,请点击 点赞 + 转发 支持下,谢谢~

作者简介

陈睿 | mikechen,10年+大厂架构经验,「mikechen 的互联网架构」系列文章作者,专注互联网架构技术。

阅读「mikechen 的互联网架构」的更多技术文章:

Java并发 | JVM | MySQL | Spring | Redis | 分布式 | 高并发 


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

相关文章

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

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

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

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

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

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

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

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

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

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

大地测量学

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

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

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

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

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

似大地水准面精化

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

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

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

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

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

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

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

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

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

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

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

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

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

大地高、正高和正常高

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

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""> 终于,我们就能解…

激光数据的直线拟合

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

直线拟合2

Opencv中的fitLine函数,实现了《直线拟合》一文中的总体最小二乘法拟合直线。 C: void fitLine(InputArray points, OutputArray line, int distType, double param, double reps, double aeps) 参数说明: points:需要拟合的点; L…

C++ 最小二乘法 直线拟合、曲线拟合、平面拟合、高斯拟合

本节介绍如何用Eigen求解线性最小二乘方程组。求解Axb的最小二乘问题,等价于求解方程 使用Eigen的求解的代码如下: Eigen::MatrixXd MatX;//样本数据Eigen::MatrixXd MatY;//观测值Eigen::MatrixXd MatLS;//待定系数MatLS (MatX.transpose() * MatX).in…