spring cloud alibaba-dubbo3 rpc运行原理
Dubbo3 运行原理
Dubbo3 是 Apache Dubbo 的最新版本,是一个高性能、轻量级的分布式服务框架,支持微服务架构。相比 Dubbo2,它在协议、扩展性、服务治理、流控等方面做了大量改进,特别是引入了 Triple 协议,使其更加适应现代微服务架构需求。
核心架构
Dubbo 的运行机制包括以下核心组件:
- 服务提供者(Provider) :
- 提供服务的具体实现。
- 启动时通过注册中心暴露服务。
- 服务消费者(Consumer) :
- 调用远程服务。
- 启动时从注册中心订阅服务。
- 注册中心(Registry) :
- 服务的元数据存储与发现。
- 负责服务的动态注册和发现。
- Dubbo3 支持 Zookeeper、Nacos、Consul 等作为注册中心。
- 协议层(Protocol) :
- Dubbo3 默认采用基于 gRPC 的
Triple协议,支持 HTTP/2 和 protobuf。 - 兼容旧版 Dubbo 协议,支持多协议。
- 调用链路 :
- 支持透明化的 RPC 调用,通过拦截器实现动态过滤和增强。
- 治理与监控 :
- 包括负载均衡、限流熔断、服务降级、监控和日志等。
Dubbo3 的运行流程
服务注册与发现
- 服务注册 :
- Provider 启动时,向注册中心注册服务元数据(包括服务名称、地址、端口、接口信息等)。
- 服务发现 :
- Consumer 启动时,从注册中心订阅所需服务列表,动态感知服务的上线、下线和变更。
服务调用
- 动态代理 :
- Consumer 通过动态代理生成服务接口的本地实现,用户调用时,实际是发起一个远程 RPC 请求。
- 负载均衡 :
- Consumer 根据配置的负载均衡策略(如随机、轮询、一致性哈希等)选择目标 Provider。
- 调用链路 :
- Consumer 发起远程调用请求,经过协议层序列化后,通过网络传输到 Provider。
- 响应返回 :
- Provider 接收到请求后,执行具体方法,结果通过网络返回给 Consumer。
Dubbo3 的主要特性
1. Triple 协议
- 基于 gRPC 的高性能协议,支持 HTTP/2。
- 使用 protobuf 作为默认序列化方式,极大提高了跨语言支持能力。
- 支持流式通信(Streaming)和双向流通信(Bi-Directional Streaming)。
2. 服务元数据中心
- Dubbo3 使用独立的元数据中心存储服务信息,支持 JSON 和 protobuf 格式。
- 提供更灵活的服务治理能力,如版本控制、元数据的动态更新等。
3. 增强的服务治理
- 限流熔断 :支持基于 QPS 和并发数的限流。
- 负载均衡 :支持多种策略(随机、最少活跃调用、一致性哈希等)。
- 服务降级 :当服务不可用时,提供兜底策略。
4. 多语言支持
- 支持 Java、Go、Python 等多语言互通,适配混合语言开发场景。
5. 流控与链路增强
- 支持链路追踪(如 OpenTelemetry)。
- 内置流控和超时机制。
Dubbo3 的运行时组件
- Protocol(协议层)
- 负责序列化、反序列化和通信。
Triple协议是默认协议,也支持 Dubbo2 协议和 HTTP 协议。
- Cluster(集群层)
- 提供负载均衡、失败重试、熔断降级等功能。
- 默认策略为随机(Random)。
- Invoker(调用层)
- 是 Dubbo 的核心接口,封装了服务调用逻辑。
- Filter(过滤器)
- 类似拦截器的功能,可在服务调用前后执行自定义逻辑。
- SPI(可扩展机制)
- Dubbo 的核心设计之一,基于
Java SPI的增强实现,支持自定义扩展组件。
- Dubbo 的核心设计之一,基于
Dubbo3 的改进点
| 特性 | Dubbo2 | Dubbo3 |
|---|---|---|
| 协议 | Dubbo 自定义协议 | Triple(基于 gRPC) |
| 序列化方式 | Hessian、Java 原生序列化 | Protobuf |
| 多语言支持 | 较差 | 极好 |
| 服务元数据 | 注册中心嵌套存储 | 独立元数据中心 |
| 流式通信 | 不支持 | 支持流式和双向流通信 |
| 服务治理 | 基础的限流、熔断 | 增强的治理功能 |
Dubbo3 运行原理示意图
总结
Dubbo3 相较于 Dubbo2,适配了现代微服务架构的需求,尤其是在协议、跨语言支持和服务治理方面做出了显著提升。通过引入 Triple 协议和元数据中心,Dubbo3 提供了更高的性能和更灵活的扩展性,是大规模分布式服务的强大工具。
相关文章:
spring cloud alibaba-dubbo3 rpc运行原理
Dubbo3 运行原理 Dubbo3 是 Apache Dubbo 的最新版本,是一个高性能、轻量级的分布式服务框架,支持微服务架构。相比 Dubbo2,它在协议、扩展性、服务治理、流控等方面做了大量改进,特别是引入了 Triple 协议,使其更加适…...
【Uniapp-Vue3】computed计算属性用法及方法对比
如果我们想要将两个响应式变量进行某种运算,就可以使用computed计算属性。 比如下面这个例子中,输入名和姓合成全名,可以用直接显示的方法: 我们也可以使用computed属性: import {computed} from "vue"; le…...
web实操10——Filter和Listener
Filter介绍 web三大组件:servlet,filter, lisenter。 Filter快速入门 步骤 拦截路径:你访问什么样的资源,过滤器会生效,包括静态资源,动态资源。 配置:两种配置方式 代码实现 代码&#…...
Spring中,出现依赖不完全注入后才执行逻辑
1. Bean生命周期机制 Spring管理的Bean是通过生命周期回调进行初始化和依赖注入的。以下是典型的生命周期阶段: 实例化(Instantiation): 创建Bean对象。依赖注入(Dependency Injection): 向Be…...
如何选择 Dockerfile 的放置方式
是否将 Dockerfile 放在项目根目录下还是为每个应用服务单独创建 Dockerfile,取决于项目架构和使用场景。以下是针对不同项目类型的最佳实践和推荐方式: 一、单体应用项目 项目特点 项目是一个单体应用,只有一个运行环境,例如&a…...
用 HTML5 Canvas 和 JavaScript 实现炫酷跨年烟花特效
一、引言 跨年夜,五彩斑斓、绚丽绽放的烟花是最令人期待的视觉盛宴之一。在网页端,我们能否通过技术手段复现这一梦幻场景呢?答案是肯定的。本文将深入剖析一段使用 HTML5 Canvas 和 JavaScript 实现的跨年烟花特效源码,带你领略前端技术创造的惊艳画面。 用 HTML5 Canvas…...
cat命令详解
🏝️专栏:https://blog.csdn.net/2301_81831423/category_12872319.html 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” cat 是 Linux/Unix 中的一个非常常用的命令&…...
el-table 自定义表头颜色
第一种方法:计算属性 <template><div><el-table:data"formData.detail"border stripehighlight-current-row:cell-style"{ text-align: center }":header-cell-style"headerCellStyle"><el-table-column fixed…...
window.print()预览时表格显示不全
问题描述:使用element的table组件,表格列宽为自适应,但使用window.print()方法预览的页面会直接按预览宽度截取表格内容进行展示,造成表格可能的显示不全问题 解决方法:添加如下样式 media print {::v-deep {// 表头…...
React Router底层核心原理详解
React Router 是一个功能强大的路由库,它允许开发者在 React 单页面应用(SPA)中实现客户端路由管理。React Router 通过匹配 URL 和组件的关系来实现页面的导航,它不仅提供了简单的 API,还在底层实现了复杂的 URL 匹配…...
linux MySQL 实时性能监控工具
在 Linux 上,有多个工具可以用于 实时监控 MySQL 的性能。根据你的需求,以下是常用的 MySQL 实时性能监控工具,包括轻量级的命令行工具和可视化监控工具。 🔧 1. MySQLTuner – 一键性能优化建议 ✅ 特点 快速分析 MySQL 的性能…...
ModuleNotFoundError: No module named ‘setuptools_rust‘ 解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
基于Spring Boot的海滨体育馆管理系统的设计与实现
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 宠物医院…...
【机器视觉】OpenCV 图像轮廓(查找/绘制轮廓、轮廓面积/周长、多边形逼近与凸包、外接矩形)
文章目录 7. 图像轮廓7.1 什么是图像轮廓7.2 查找轮廓7.3 绘制轮廓7.4 轮廓的面积和周长7.5 多边形逼近与凸包7.6 外接矩形 OpenCV官网 7. 图像轮廓 7.1 什么是图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线. 轮廓在形状分析和物体的检测和识别中很有用。 轮廓的作用…...
深入浅出:React 前端框架解析与应用
引言 随着前端开发技术的不断发展,现代化的前端框架成为了提升开发效率、优化用户体验和构建复杂应用的关键工具。在众多的前端框架中,React凭借其简洁、高效、可扩展的特点,已成为目前最流行的前端框架之一。它由Facebook于2013年发布&…...
【网络安全设备系列】7、流量监控设备
0x00 定义: 网络流量控制是一种利用软件或硬件方式来实现对电脑网络流量的控制。它的最主要方法,是引入QoS的概念,从通过为不同类型的 网络数据包标记,从而决定数据包通行的优先次序。 0x01 类型: 流控技术分为两种: 一种是…...
qemu解析qcow文件
旧的 QEMU 图像格式,支持备份文件、紧凑图像文件、加密和压缩。 backing_file 基础镜像的文件名(参见create子命令) encryption 此选项已弃用,相当于encrypt.formataes encrypt.format 如果设置为aes,则图像将使用 128…...
免费网站源码下载指南:如何安全获取并降低开发成本
许多开发者或是需要建立网站的人,可以方便地获取免费网站源码。这样的下载能帮助他们降低开发费用,迅速构建起基本框架。但在此过程中,仍有许多需要注意的事项。 许多开发者或是需要建立网站的人,可以方便地获取免费网站源码。这…...
【Ubuntu】如何设置 Ubuntu 自动每日更新:轻松保持系统安全
如何设置 Ubuntu 自动每日更新:轻松保持系统安全 大家好!今天我们来聊一个非常实用的话题——如何让 Ubuntu 系统自动每日更新。如果你是一个 Ubuntu 用户,尤其是服务器管理员,你可能会经常遇到这样的问题:系统需要频…...
江科大STM32入门——UART通信笔记总结
wx:嵌入式工程师成长日记 1、简介 简单双向串口通信有两根通信线(发送端TX和接收端RX)TX与RX要交叉连接当只需单向的数据传输时,可以只接一根通信线当电平标准不一致时,需要加电平转换芯片 传输模式:全双工;时钟&…...
4大场景下的智能激活工具实战指南:开源激活工具系统激活解决方案
4大场景下的智能激活工具实战指南:开源激活工具系统激活解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你的系统是否遇到过这些激活困境?刚完成系统重装却面对&…...
AI开发AI:基于快马平台多模型能力深度打造旗博士口播智能体
AI开发AI:基于快马平台多模型能力深度打造旗博士口播智能体 最近在做一个挺有意思的项目——旗博士口播智能体。这个项目本身是个AI应用,但更有趣的是,整个开发过程都借助了AI来辅助完成。这种"用AI开发AI"的体验,让我…...
BilibiliDown:3分钟上手,从此告别B站视频下载烦恼
BilibiliDown:3分钟上手,从此告别B站视频下载烦恼 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mi…...
Windows系统Btrfs文件系统革新性应用指南
Windows系统Btrfs文件系统革新性应用指南 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs 革新性数据管理体验:WinBtrfs驱动价值定位 打破系统边界:Windows平台…...
CYBER-VISION零号协议在STM32F103C8T6最小系统板开发中的实战指南
CYBER-VISION零号协议在STM32F103C8T6最小系统板开发中的实战指南 如果你手头正好有一块经典的“蓝板子”——STM32F103C8T6最小系统板,想用它做点东西,但又觉得从零开始配置寄存器、调试外设有点头疼,那这篇文章就是为你准备的。我们今天要…...
解锁Noria查询重用机制:如何智能复用数据流组件实现应用性能飞跃
解锁Noria查询重用机制:如何智能复用数据流组件实现应用性能飞跃 【免费下载链接】noria Fast web applications through dynamic, partially-stateful dataflow 项目地址: https://gitcode.com/gh_mirrors/no/noria 在现代Web应用开发中,性能优化…...
UUV Simulator 一站式部署指南:从零搭建Ubuntu20.04、ROS Noetic与Gazebo11仿真环境
1. 环境准备:虚拟机与Ubuntu20.04部署 水下机器人仿真开发的第一步是搭建稳定的基础环境。我推荐使用VMware Workstation Pro 17作为虚拟机平台,它的快照功能能让你在配置出错时快速回滚。实测在Windows 10/11系统上运行稳定,对硬件资源的调度…...
《jEasyUI 格式化列》
《jEasyUI 格式化列》 引言 jEasyUI 是一款流行的开源jQuery UI库,旨在简化Web用户界面(UI)的开发。在jEasyUI中,格式化列是一种常见且强大的功能,它允许开发者根据需要自定义表格列的显示格式。本文将详细介绍jEasyUI…...
哈夫曼编码实战:从电文压缩到代码实现(附完整Python示例)
哈夫曼编码实战:从电文压缩到代码实现(附完整Python示例) 在数据存储和传输领域,压缩算法始终扮演着关键角色。想象一下,当你需要处理数百万条日志记录,或是传输高分辨率医学影像时,未经压缩的原…...
Java开发踩坑:一次 JVM 调优实战记录
在Java开发中,性能问题一直是面试和实际项目中重点关注的点。尤其是高并发系统,JVM 的调优直接影响系统的稳定性和响应速度。今天,我将结合一次真实项目经历,分享一次完整的 JVM 调优实战记录,帮助大家掌握核心原理和实…...
