作者简介:小明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 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 2.x 是 Dubbo 的第二个版本,支持了服务治理和容错机制的面向服务的体系结构模式。
Dubbo1.x到Dubbo2.x 主要包括以下几个方面:
一、支持更多的协议和序列化方法,包括rest、thrift、protobuf等;二、支持多种服务注册和多种发现方法,包括zookeeper、redis、consult等;三、支持多种负载均衡和容错机制,包括随机、轮询、一致性哈希、快速失败等;四、支持服务治理功能,包括监控、路由、限流、熔断等。
所有与网络通信相关的内容都封装在Stub和Skeleton中。相对而言,服务器端Skeleton的概念实际上有点模糊,因为RMI中没有明确的对象,而客户端Stub是接口Service的代理对象。整个服务注册、发现和调用过程如下:
(对应图1-2)首先在服务器上创建远程对象,一种是创建一个ServiceImpl远程对象、注册ServiceImpl服务,ServiceImpl继承自UnicastRemoteObject,并在创建时随机绑定到端口,启动套接字以侦听客户端请求,再向注册表注册服务。
(对应图3-4)当客户端访问注册中心时,服务器生成的Stub将被序列化并传递给客户端。在客户端反序列化之后,客户端将生成相应的实例,此时可以使用此Stub与服务器进行通信,Stub由服务器生成,并在使用过程中通过网络传输到客户端。
(对应图5-9)客户端Stub和服务器Skeleton通信并返回结果,有一个关键问题,Stub在调用时要找到调用的方法,对远程方法的Java RPC调用需要四个信息:接口名称、方法名称、参数类型和参数。在服务器端注册服务时,每个服务都会生成一个ObjID并将其封装在Stub中。同时,Java类中的每个方法都对应一个唯一的数字opum,Stub在每次通信期间向服务提供商发送ObjId和opum。
Dubbo 3.x 是Dubbo的第三个版本,采用云原生架构模式,支持更多微服务场景。Dubbo 3的改进主要包括以下几个方面:支持更多的协议和编解码方法,包括http2、GRPC、AVRO等。;支持更多的注册和配置中心,包括ETCD、CONSUL、NACOS、APOLLO等;支持更多的服务治理和微服务能力,包括微服务网关、服务注册和发现、配置中心、服务跟踪等。
根据抽象架构,它分为两层:服务治理抽象控制面和Dubbo数据面。
服务治理控制表面:服务治理控制表面并不是专门指注册中心等单个特定组件,而是Dubbo治理系统的抽象表达。控制包括协调服务发现的注册表、流量控制策略、Dubbo管理控制台等。如果采用service Mesh架构,它还包括Istio等服务网格控制表面。
Dubbo数据面:数据平面表示集群中部署的所有Dubbo进程,进程之间通过RPC协议实现数据交换。Dubbo定义了微服务应用程序开发和调用规范,并负责完成数据传输编码和解码工作。服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程;服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程。
从数据面视角,Dubbo 帮助解决了微服务实践中的以下问题:Dubbo 作为 服务开发框架 约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式Dubbo 作为 RPC 通信协议实现 解决服务间数据传输的编解码问题。
Dubbo作为一个服务开发框架,包括以下具体内容:RPC服务定义和开发范式。例如,Dubbo支持通过IDL定义服务,还支持特定于编程语言的服务开发和定义方法,例如通过Java Interface定义服务。RPC服务发布和调用API。Dubbo支持调用服务的编程模式,如同步、异步和反应流,以及请求上下文API和设置超时时间。服务治理战略、流程和适应方法。作为服务框架的一个数据方面,Dubbo定义了服务治理抽象,如服务地址发现、负载平衡策略、基于规则的流量路由和度量指标收集,并将其适应于特定的产品实现。
Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。 这样的 Protocol 设计模式给构建微服务带来了最大的灵活性,开发者可以根据需要如性能、通用型等选择不同的通信协议,不再需要任何的代理来实现协议转换,甚至你还可以通过 Dubbo 实现不同协议间的迁移。
服务开发框架解决了开发和通信问题,但在微服务集群环境中,我们仍然需要解决一系列问题,如无状态服务节点的动态变化、外挂配置、日志跟踪、可观察性、流量管理、高可用性和数据一致性。我们将这些问题统称为服务治理。
地址发现:Dubbo服务发现具有高性能、支持大规模集群、服务级元数据配置等优势。默认情况下,它提供各种注册表调整,如Nacos、Zookeeper和Consul,并与Spring Cloud和Kubernetes服务模型兼容,支持自定义扩展。
负载平衡:Dubbo默认提供加权随机、加权轮询、最低活动请求优先级、最短响应时间优先级、一致哈希和自适应负载等策略
流量路由:Dubbo支持通过一系列流量规则来控制业务呼叫的流量分布和行为。基于这些规则,它可以实现基于权重的比例流量分配、灰度验证、金丝雀发布、基于请求参数的路由、相同区域优先级、超时配置、重试和限流降级能力。
链接跟踪:Dubbo通过适应OpenTelemetry,正式为跟踪提供全链路跟踪支持,允许用户访问支持Skywalking和Zipkin等OpenTelemetry标准的产品。此外,Skywalking和Zipkin等许多社区也为Dubbo提供了官方改编。
可观察性:Dubbo实例通过Prometheus报告多维可观察指标,如QPS、RT、请求计数、成功率和异常计数,以帮助了解服务运行状态。通过访问Grafana和Admin控制台,可以可视化和显示数据指示器。
将 Dubbo 接入 Istio 等服务网格治理体系
3.3、Dubbo Admin
Admin 控制台提供了 Dubbo 集群的可视化视图,通过 Admin 你可以完成集群的几乎所有管控工作。Dubbo Admin查询服务、应用或机器状态、创建项目、服务测试、文档管理等、查看集群实时流量、定位异常问题等、流量比例分发、参数路由等流量管控规则下发。
本文讲了Dubbo架构的演进的Dubbo1.x的RMI体系结构,到Dubbo2.x服务注册、发现和调用,最后Dubbo架构的演进到Dubbo3.x丰富了,Dubbo微服务集群架构、数据面架构(服务开发框架、Dubbo通信协议)、Dubbo服务治理(服务治理抽象、服务网格)。