【Dubbo】Dubbo架构的演进过程分析

news2025/4/7 7:26:31

📫作者简介:小明java问道之路2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 


🍅 文末获取联系 🍅  👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录 

本文目录 

本文导读

一、Dubbo架构的演进-Dubbo 1.x

二、Dubbo架构的演进-Dubbo 2.x

1、服务注册

2、服务发现

3、服务调用

三、Dubbo架构的演进-Dubbo 3.x

1、Dubbo微服务集群架构

2、Dubbo数据面架构

2.1、Dubbo服务开发框架

2.2、Dubbo通信协议

3、Dubbo 服务治理

3.1、服务治理抽象

3.2、服务网格

总结


本文导读

本文讲了Dubbo架构的演进的Dubbo1.x的RMI体系结构,到Dubbo2.x服务注册、发现和调用,最后Dubbo架构的演进到Dubbo3.x丰富了,Dubbo微服务集群架构、数据面架构(服务开发框架、Dubbo通信协议)、Dubbo服务治理(服务治理抽象、服务网格)。

一、Dubbo架构的演进-Dubbo 1.x

Dubbo 1.x 是Dubbo的第一版,采用传统的RPC服务架构,包括三个角色:服务提供者、服务使用者和注册中心,Dubbo 1.x 支持多种协议和序列化方法,包括dubbo、hessian、http等,但不支持服务治理和容错机制。

Dubbo 1.x是RMI体系结构,RMI架构有三个角色:注册中心(Registry)、客户端(Client)、服务端(Server)。在整个 RMI 中Stub(存根) 和 Skeleton(骨架)。随后的RPC框架基本上遵循了这一概念,客户端Stub和服务器Skeleton是Service的代理对象,专门用于屏蔽网络通信。

二、Dubbo架构的演进-Dubbo 2.x

Dubbo 2.x 是 Dubbo 的第二个版本,支持了服务治理和容错机制的面向服务的体系结构模式。

Dubbo1.x到Dubbo2.x 主要包括以下几个方面:

一、支持更多的协议和序列化方法,包括rest、thrift、protobuf等;二、支持多种服务注册和多种发现方法,包括zookeeper、redis、consult等;三、支持多种负载均衡和容错机制,包括随机、轮询、一致性哈希、快速失败等;四、支持服务治理功能,包括监控、路由、限流、熔断等。

所有与网络通信相关的内容都封装在Stub和Skeleton中。相对而言,服务器端Skeleton的概念实际上有点模糊,因为RMI中没有明确的对象,而客户端Stub是接口Service的代理对象。整个服务注册、发现和调用过程如下:

1、服务注册

(对应图1-2)首先在服务器上创建远程对象,一种是创建一个ServiceImpl远程对象、注册ServiceImpl服务,ServiceImpl继承自UnicastRemoteObject,并在创建时随机绑定到端口,启动套接字以侦听客户端请求,再向注册表注册服务。

2、服务发现

(对应图3-4)当客户端访问注册中心时,服务器生成的Stub将被序列化并传递给客户端。在客户端反序列化之后,客户端将生成相应的实例,此时可以使用此Stub与服务器进行通信,Stub由服务器生成,并在使用过程中通过网络传输到客户端。

3、服务调用

(对应图5-9)客户端Stub和服务器Skeleton通信并返回结果,有一个关键问题,Stub在调用时要找到调用的方法,对远程方法的Java RPC调用需要四个信息:接口名称、方法名称、参数类型和参数。在服务器端注册服务时,每个服务都会生成一个ObjID并将其封装在Stub中。同时,Java类中的每个方法都对应一个唯一的数字opum,Stub在每次通信期间向服务提供商发送ObjId和opum。

三、Dubbo架构的演进-Dubbo 3.x

Dubbo 3.x 是Dubbo的第三个版本,采用云原生架构模式,支持更多微服务场景。Dubbo 3的改进主要包括以下几个方面:支持更多的协议和编解码方法,包括http2、GRPC、AVRO等。;支持更多的注册和配置中心,包括ETCD、CONSUL、NACOS、APOLLO等;支持更多的服务治理和微服务能力,包括微服务网关、服务注册和发现、配置中心、服务跟踪等。

1、Dubbo微服务集群架构

根据抽象架构,它分为两层:服务治理抽象控制面和Dubbo数据面。

服务治理控制表面:服务治理控制表面并不是专门指注册中心等单个特定组件,而是Dubbo治理系统的抽象表达。控制包括协调服务发现的注册表、流量控制策略、Dubbo管理控制台等。如果采用service Mesh架构,它还包括Istio等服务网格控制表面。

Dubbo数据面:数据平面表示集群中部署的所有Dubbo进程,进程之间通过RPC协议实现数据交换。Dubbo定义了微服务应用程序开发和调用规范,并负责完成数据传输编码和解码工作。服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程;服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程。

2、Dubbo数据面架构

从数据面视角,Dubbo 帮助解决了微服务实践中的以下问题:Dubbo 作为 服务开发框架 约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式Dubbo 作为 RPC 通信协议实现 解决服务间数据传输的编解码问题。

2.1、Dubbo服务开发框架

Dubbo作为一个服务开发框架,包括以下具体内容:RPC服务定义和开发范式。例如,Dubbo支持通过IDL定义服务,还支持特定于编程语言的服务开发和定义方法,例如通过Java Interface定义服务。RPC服务发布和调用API。Dubbo支持调用服务的编程模式,如同步、异步和反应流,以及请求上下文API和设置超时时间。服务治理战略、流程和适应方法。作为服务框架的一个数据方面,Dubbo定义了服务治理抽象,如服务地址发现、负载平衡策略、基于规则的流量路由和度量指标收集,并将其适应于特定的产品实现。

2.2、Dubbo通信协议

Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。 这样的 Protocol 设计模式给构建微服务带来了最大的灵活性,开发者可以根据需要如性能、通用型等选择不同的通信协议,不再需要任何的代理来实现协议转换,甚至你还可以通过 Dubbo 实现不同协议间的迁移。

3、Dubbo 服务治理

服务开发框架解决了开发和通信问题,但在微服务集群环境中,我们仍然需要解决一系列问题,如无状态服务节点的动态变化、外挂配置、日志跟踪、可观察性、流量管理、高可用性和数据一致性。我们将这些问题统称为服务治理。

3.1、服务治理抽象

地址发现:Dubbo服务发现具有高性能、支持大规模集群、服务级元数据配置等优势。默认情况下,它提供各种注册表调整,如Nacos、Zookeeper和Consul,并与Spring Cloud和Kubernetes服务模型兼容,支持自定义扩展。

负载平衡:Dubbo默认提供加权随机、加权轮询、最低活动请求优先级、最短响应时间优先级、一致哈希和自适应负载等策略

流量路由:Dubbo支持通过一系列流量规则来控制业务呼叫的流量分布和行为。基于这些规则,它可以实现基于权重的比例流量分配、灰度验证、金丝雀发布、基于请求参数的路由、相同区域优先级、超时配置、重试和限流降级能力。

链接跟踪:Dubbo通过适应OpenTelemetry,正式为跟踪提供全链路跟踪支持,允许用户访问支持Skywalking和Zipkin等OpenTelemetry标准的产品。此外,Skywalking和Zipkin等许多社区也为Dubbo提供了官方改编。

可观察性:Dubbo实例通过Prometheus报告多维可观察指标,如QPS、RT、请求计数、成功率和异常计数,以帮助了解服务运行状态。通过访问Grafana和Admin控制台,可以可视化和显示数据指示器。

3.2、服务网格

将 Dubbo 接入 Istio 等服务网格治理体系

3.3、Dubbo Admin

Admin 控制台提供了 Dubbo 集群的可视化视图,通过 Admin 你可以完成集群的几乎所有管控工作。Dubbo Admin查询服务、应用或机器状态、创建项目、服务测试、文档管理等、查看集群实时流量、定位异常问题等、流量比例分发、参数路由等流量管控规则下发。

总结

本文讲了Dubbo架构的演进的Dubbo1.x的RMI体系结构,到Dubbo2.x服务注册、发现和调用,最后Dubbo架构的演进到Dubbo3.x丰富了,Dubbo微服务集群架构、数据面架构(服务开发框架、Dubbo通信协议)、Dubbo服务治理(服务治理抽象、服务网格)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go并发编程 Goroutine、Channel、Select、Mutex锁、sync、Atomic等

本文所有实例代码运行go版本:go version go1.18.10 windows/amd64 1 并发编程介绍 1.1 串行、并发、并行 串行:所有任务一件一件做,按照事先的顺序依次执行,没有被执行到的任务只能等待。最终执行完的时间等于各个子任务之和。…

效率神器!神级ChatGPT浏览器插件分享

大家好,我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师,带来最新的前沿AI知识和工具,欢迎大家交流~,后续我还会分享更多 AI 有趣工具和实用玩法,包括AI相关技术、ChatGPT、AI…

初识SpringBoot -- SpringBoot入门保姆级教程(一)

文章目录 前言一、初识SpringBoot1.SpringBoot简介2.用编译器IDEA创建SpringBoot项目3.在官网创建SpringBoot项目4.SpringBoot项目快速启动(前后端分离基本能力)5.了解SpringBoot起步依赖和启动类 总结 前言 为了巩固所学的知识,作者尝试着开…

RocketMQ消息消费

RocketMQ消息消费示例代码: public static void main(String[] args) throws InterruptedException, MQClientException {DefaultMQPushConsumer consumer new DefaultMQPushConsumer("please_rename_unique_group_name_4");consumer.setNamesrvAddr(&qu…

C++ 学习 ::【基础篇:15】:C++ 类的基本成员函数:析构顺序问题(全局/静态/局部量) 及 类类型(自定义类型)与析构函数

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

Nginx配置块location及rewrite详解(遗憾)

文章目录 一、location配置块详解1.location 大致分为三类2.location 常用的匹配规则3.location 匹配的优先级4.location 匹配流程5.location 的实际使用(1)直接匹配网站根目录首页(2)处理静态文件请求(3)通…

函数式接口相关知识点

这里写目录标题 函数式接口简介以及注意点函数式接口作为方法的参数函数式接口作为方法参数常用的函数式接口Supplier简介具体代码操作 Consumer简介具体代码演示演示1演示2 Predicate接口简介以及接口中的方法text和negate方法and和or方法Function方法简介具体操作1具体操作2 …

SQL语句之DDL语言

说明:DDL(Data Definition Language,数据定义语言),用来定义数据库对象(数据库、表),包括了数据库和表的创建、查询、使用和删除操作。 一、数据库操作 新安装的数据库,默认有以下四个数据库&…

计算机网络-数据链路层

概念 结点:主机、路由器 链路:结点间物理通道 数据链路:结点间逻辑通道,控制数据传输协议的硬件和软件加到链路上构成数据链路 帧:链路层的协议数据单元,封装网络层数据报 数据链路层负责通过一条链路从一…

银行转账问题(死锁)

本文主要讲述死锁的一个经典案例—银行转账问题,并对该问题进行定位、修复。 1. 问题说明 当账户A对账户B进行转账时, 首先需要获取到两把锁:账户A和账户B的锁。获取两把锁成功,且余额大于0,则扣除转出人的余额&…

我记不住的那些C语言的struct知识

背景: 最近在重学C语言,目的是为了能看懂操作系统的底层代码,也为后续使用C语言开发一个类似redis数据库的中间件做准备,于是又重新踏上了学习C语言的道路,早在上学期间就学习过C语言,但是很久都不用了&…

ssm学习-spring01

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? 从使用和占有率看 Spri…

使用 ChatGPT API 构建系统(一):分类

今天我学习了DeepLearning.AI的 Building Systems with the ChatGPT API 的在线课程,我想和大家一起分享一下该门课程的一些主要内容。 下面是我们通过Openai API来访问ChatGPT模型的主要代码: import openai#您的openai的api key openai.api_key YOUR…

chatgpt赋能python:Python删除节点:从入门到实践

Python删除节点:从入门到实践 在任何编程语言中,删除节点都是一个极为常见的操作。在Python中,它同样非常重要,因为我们通常会使用Python处理各种数据结构,诸如树、链表等等。但是,删除节点并不总是一件容…

C++类和对象 -- 知识点补充

补充 const成员函数static成员友元内部类匿名对象拷贝对象时的一些编译器优化 const成员函数 将const修饰的成员函数称为const成员函数,const修饰类成员函数,实际是修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的成员进行修改。…

javaWeb ssh自习室管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh自习室管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,…

预报名通道已开启,2023第11届国际生物发酵展,8月4-6日上海见!

新机遇、新挑战、新发展 同期展会:酵素产品与益生产品展 制药机械与包装技术展 生化仪器及实验室设备展 合成生物技术与生物制造展 展会时间: 2023年8月4日 9:00-17:00 2023年8月5日 9:00-17:00 2023年8月6日 9:00-15:00 展会地点&#xff1a…

【数据结构】栈和队列选择题和面试编程题

目录 一、选择题 二、栈和队列的面试题 1、括号匹配问题 1.1 题目说明 1.2 题目解析 2、用队列实现栈 2.1 题目说明 2.2 题目解析 3、用栈实现队列 3.1 题目说明 3.2 题目解析 一、选择题 1、若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的…

软考A计划-电子商务设计师-信息安全知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

安全防御——IDS(入侵检测系统)

安全防御——IDS(入侵检测系统) IDS介绍为什么需要IDSIDS的工作原理IDS的工作过程第一步:信息收集第二步:数据分析 IDS的主要检测方法1、模式匹配(误用检测)2、统计分析(异常检测)3、…