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

您所在的位置:网站首页 rmi协议和dubbo协议 【Dubbo】Dubbo架构的演进过程分析

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

2023-06-12 12:55| 来源: 网络整理| 查看: 265

📫作者简介:小明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服务治理(服务治理抽象、服务网格)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3