浅析Dubbo 原理:架构、通信与调用流程
一、Dubbo 简介
Dubbo 是阿里巴巴开源的高性能、轻量级的 Java RPC(Remote Procedure Call,远程过程调用)框架,旨在实现不同服务之间的远程通信和调用。在分布式系统中,不同服务可能部署在不同的服务器上,Dubbo 能够让这些服务像本地调用一样方便,极大地提升了系统的可扩展性和可维护性。
二、Dubbo 架构核心组件
2.1 服务提供者(Provider)
服务提供者是指暴露服务的一方,它将自己的服务接口和实现注册到注册中心,等待消费者调用。服务提供者通常是业务逻辑的具体实现者,负责处理消费者的请求并返回结果。
2.2 服务消费者(Consumer)
服务消费者是指调用服务的一方,它从注册中心获取服务提供者的地址信息,然后根据这些信息发起远程调用。服务消费者通常是业务流程的发起者,通过调用服务提供者的接口来完成特定的业务功能。
2.3 注册中心(Registry)
注册中心是 Dubbo 架构中的核心组件之一,它负责服务的注册和发现。服务提供者将自己的服务信息注册到注册中心,服务消费者从注册中心订阅所需的服务信息。注册中心可以使用 ZooKeeper、Nacos、Etcd 等,其作用是维护服务提供者和消费者之间的映射关系,确保消费者能够找到合适的服务提供者。
2.4 监控中心(Monitor)
监控中心负责收集和统计服务的调用信息,如调用次数、调用时间、成功率等。通过监控中心,开发人员可以实时了解服务的运行状态,及时发现和解决性能问题。
2.5 容器(Container)
容器是服务运行的环境,它负责启动、加载和管理服务提供者。Dubbo 提供了多种容器实现,如 Spring Container、Jetty Container 等,开发人员可以根据实际需求选择合适的容器。
三、Dubbo 通信机制
3.1 远程调用协议
Dubbo 支持多种远程调用协议,如 Dubbo 协议、HTTP 协议、RESTful 协议等。其中,Dubbo 协议是 Dubbo 框架默认的协议,它基于 TCP 协议,采用 NIO 异步通信方式,具有高性能、低延迟的特点。
3.2 序列化与反序列化
在远程调用过程中,需要将对象转换为字节流进行传输,这个过程称为序列化;在接收端,需要将字节流转换为对象,这个过程称为反序列化。Dubbo 支持多种序列化方式,如 Java 序列化、Hessian 序列化、JSON 序列化等,开发人员可以根据实际需求选择合适的序列化方式。
3.3 网络传输
Dubbo 使用 Netty 作为底层网络传输框架,Netty 是一个高性能的 NIO 网络编程框架,它提供了异步、事件驱动的网络编程模型,能够高效地处理大量的并发连接。
四、Dubbo 服务调用流程
4.1 服务注册
服务提供者启动时,会将自己的服务信息(包括服务接口、实现类、地址等)注册到注册中心。注册中心会将这些信息存储在内存中,并提供给服务消费者查询。
4.2 服务订阅
服务消费者启动时,会从注册中心订阅所需的服务信息。注册中心会将服务提供者的地址信息推送给服务消费者,服务消费者会将这些信息缓存到本地。
4.3 远程调用
服务消费者在需要调用服务时,会根据本地缓存的服务提供者地址信息,选择一个合适的服务提供者进行调用。调用过程中,服务消费者会将请求信息进行序列化,然后通过网络传输到服务提供者。服务提供者接收到请求后,会将请求信息进行反序列化,然后调用相应的服务方法,并将结果进行序列化后返回给服务消费者。
4.4 结果返回
服务消费者接收到服务提供者返回的结果后,会将结果进行反序列化,然后将结果返回给调用者。
五、Dubbo 负载均衡策略
5.1 Random LoadBalance
随机负载均衡策略是 Dubbo 默认的负载均衡策略,它根据服务提供者的权重随机选择一个服务提供者进行调用。
5.2 RoundRobin LoadBalance
轮询负载均衡策略按照服务提供者的顺序依次选择服务提供者进行调用,每个服务提供者被调用的机会均等。
5.3 LeastActive LoadBalance
最少活跃调用数负载均衡策略会选择当前活跃调用数最少的服务提供者进行调用,这样可以保证性能较好的服务提供者能够处理更多的请求。
5.4 ConsistentHash LoadBalance
一致性哈希负载均衡策略根据请求的参数计算哈希值,然后根据哈希值选择服务提供者。这样可以保证相同参数的请求总是被路由到同一个服务提供者。
六、Dubbo 集群容错机制
6.1 Failover Cluster
失败自动切换集群容错机制是 Dubbo 默认的集群容错机制,当调用失败时,会自动切换到其他服务提供者进行重试,重试次数可以通过配置指定。
6.2 Failfast Cluster
快速失败集群容错机制在调用失败时,会立即抛出异常,不会进行重试。
6.3 Failsafe Cluster
失败安全集群容错机制在调用失败时,会忽略异常,返回一个默认值。
6.4 Failback Cluster
失败自动恢复集群容错机制在调用失败时,会记录失败的请求,然后在后台定时重试。
6.5 Forking Cluster
并行调用多个服务提供者,只要有一个成功就返回结果。
七、总结
Dubbo 作为一款优秀的 Java RPC 框架,通过注册中心、通信机制、负载均衡和集群容错等核心组件和机制,实现了高效、可靠的远程服务调用。它在分布式系统中发挥着重要的作用,能够帮助开发人员快速构建可扩展、高性能的分布式应用。随着微服务架构的广泛应用,Dubbo 的应用场景也越来越广泛,值得开发人员深入学习和掌握。
相关文章:
浅析Dubbo 原理:架构、通信与调用流程
一、Dubbo 简介 Dubbo 是阿里巴巴开源的高性能、轻量级的 Java RPC(Remote Procedure Call,远程过程调用)框架,旨在实现不同服务之间的远程通信和调用。在分布式系统中,不同服务可能部署在不同的服务器上,D…...
03垃圾回收篇(D3_垃圾收集器的选择及相关参数)
目录 学习前言 一、收集器的选择 二、GC日志参数 三、垃圾收集相关的常用参数 四、内存分配与回收策略 1. 对象优先在Eden分配 2. 大对象直接进入老年代 3. 长期存活的对象将进入老年代 4. 动态对象年龄判定 5. 空间分配担保 学习前言 本章主要学习垃圾收集器的选择及…...
一、引论,《组合数学(第4版)》卢开澄 卢华明
零、前言 发现自己数数题做的很烂,重新学一遍组合数学吧。 参考卢开澄 卢华明 编著的《组合数学(第4版)》,只打算学前四章。 通过几个经典问题来了解组合数学所研究的内容。 一、幻方问题 据说大禹治水之前,河里冒出来一只乌龟,…...
Vue3+TS 实现批量拖拽文件夹上传图片组件封装
1、html 代码: 代码中的表格引入了 vxe-table 插件 <Tag /> 是自己封装的说明组件 表格列表这块我使用了插槽来增加扩展性,可根据自己需求,在组件外部做调整 <template><div class"dragUpload"><el-dialo…...
二叉树的所有路径(力扣257)
因为题目要求路径是从上到下的,所以最好采用前序遍历。这样可以保证按从上到下的顺序将节点的值存入一个路径数组中。另外,此题还有一个难点就是如何求得所有路径。为了解决这个问题,我们需要用到回溯。回溯和递归不分家,每递归一…...
Python OrderedDict 实现 Least Recently used(LRU)缓存
OrderedDict 实现 Least Recently used(LRU)缓存 引言正文 引言 LRU 缓存是一种缓存替换策略,当缓存空间不足时,会移除最久未使用的数据以腾出空间存放新的数据。LRU 缓存的特点: 有限容量:缓存拥有固定的…...
LabVIEW项目中的工控机与普通电脑选择
工控机(Industrial PC)与普通电脑在硬件设计、性能要求、稳定性、环境适应性等方面存在显著差异。了解这些区别对于在LabVIEW项目中选择合适的硬件至关重要。下面将详细分析这两种设备的主要差异,并为LabVIEW项目中的选择提供指导。 硬件设…...
Ansys Speos | Speos Meshing 网格最佳实践
概述 网格划分是在各种计算应用中处理3D几何的基本步骤: 表面和体积:网格允许通过将复杂的表面和体积分解成更简单的几何元素(如三角形、四边形、四面体或六面体)来表示复杂的表面和体积。 模拟和渲染:网格是创建离散…...
elasticsearch segment数量对读写性能的影响
index.merge.policy.segments_per_tier 是一个配置选项,用于控制 Elasticsearch 中段(segment)合并策略的行为。它定义了在每一层的段合并过程中,允许存在的最大段数量。调整这个参数可以优化索引性能和资源使用。 假设你有一个索…...
全同态加密理论、生态现状与未来展望(中2)
《全同态加密理论、生态现状与未来展望》系列由lynndell2010gmail.com和mutourend2010gmail.com整理原创发布,分为上中下三个系列: 全同态加密理论、生态现状与未来展望(上):专注于介绍全同态加密理论知识。全同态加密…...
鸿蒙UI(ArkUI-方舟UI框架)-开发布局
返回主章节 → 鸿蒙UI(ArkUI-方舟UI框架) 开发布局 1、布局概述 1)布局结构 2)布局元素组成 3)如何选择布局 声明式UI提供了以下10种常见布局,开发者可根据实际应用场景选择合适的布局进行页面开发。 …...
RPC是什么?和HTTP区别?
RPC 是什么?HTTP 是什么? 作为一个程序员,假设我们需要从A电脑的进程发送一段数据到B电脑的进程,我们一般会在代码中使用 Socket 进行编程。 此时,可选性一般就是 TCP 和 UDP 二选一,由于 TCP 可靠、UDP 不…...
Linux C\C++编程-建立文件和内存映射
【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Linu…...
行政纠错——pycorrector学习
pycorrector是一个开源中文文本纠错工具,它支持对中文文本进行音似、形似和语法错误的纠正。此工具是使用Python3进行开发的,并整合了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多种模型来实现文本纠错功能。pycorrector官方仓库…...
Go的defer原理
Go 的 defer 原理 defer 是 Go 语言中的一个关键字,用于延迟执行一个函数调用。它通常用于处理资源释放、连接关闭等操作,确保这些操作在函数返回之前执行。 1. 什么是 defer? defer 关键字用于延迟执行一个函数调用,直到包含它…...
Windows 下本地 Docker RAGFlow 部署指南
Windows 下本地 Docker RAGFlow 部署指南 环境要求部署步骤1. 克隆代码仓库2. 配置 Docker 镜像加速(可选)3. 修改端口配置(可选)4. 启动服务5. 验证服务状态6. 访问服务7. 登录系统8. 配置模型8.1 使用 Ollama 本地模型8.2 使用在线 API 服务9. 开始使用10. 常见问题处理端…...
专题三_穷举vs暴搜vs深搜vs回溯vs剪枝_全排列
dfs解决 全排列&子集 1.全排列 link:46. 全排列 - 力扣(LeetCode) 全局变量回溯 code class Solution { public:vector<vector<int>> ans;vector<int> cur;vector<bool> used;vector<vector<int>> permute…...
【IEEE Fellow 主讲报告| EI检索稳定】第五届机器学习与智能系统工程国际学术会议(MLISE 2025)
重要信息 会议时间地点:2025年6月13-15日 中国深圳 会议官网:http://mlise.org EI Compendex/Scopus稳定检索 会议简介 第五届机器学习与智能系统工程国际学术会议将于6月13-15日在中国深圳隆重召开。本次会议旨在搭建一个顶尖的学术交流平台…...
华为E9000刀箱服务器监控指标解读
美信监控易内置了数千种常见设备监测器,能够监测超过20万项指标。这些指标涵盖了从硬件设备到软件系统,从网络性能到安全状态等各个方面。如下基于美信监控易——IT基础监控模块,对华为E9000刀箱服务器部分监控指标进行解读。 一、华为E9000…...
【LC】2544. 交替数字和
题目描述: 给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号: 最高有效位 上的数字分配到 正 号。剩余每位上数字的符号都与其相邻数字相反。 返回所有数字及其对应符号的和。 示例 1: 输入:n 521 输出&…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
WinUI3开发_使用mica效果
简介 Mica(云母)是Windows10/11上的一种现代化效果,是Windows10/11上所使用的Fluent Design(设计语言)里的一个效果,Windows10/11上所使用的Fluent Design皆旨在于打造一个人类、通用和真正感觉与 Windows 一样的设计。 WinUI3就是Windows10/11上的一个…...
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中,未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS,可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...
MySQL用户远程访问权限设置
mysql相关指令 一. MySQL给用户添加远程访问权限1. 创建或者修改用户权限方法一:创建用户并授予远程访问权限方法二:修改现有用户的访问限制方法三:授予特定数据库的特定权限 2. 修改 MySQL 配置文件3. 安全最佳实践4. 测试远程连接5. 撤销权…...
Monorepo架构: 项目管理模式对比与考量
关于 monorepo 相关概念及项目管理模式 在软件开发中,尤其是前端项目,我们会涉及到不同的项目管理模式,这里先介绍几个重要的概念“monorepo”是当前较为热门的一种项目管理方式,虽然很多人可能听说过,但可能在实际项…...
