Dubbo架构设计与源码解析(一) 架构设计

dubbo,架构设计,源码,解析 · 浏览次数 : 92

小编点评

## Dubbo总体架构设计与源码解析 **作者:黄金一** **目录** 1. 垂直架构 2. 分布式架构 3. 微服务架构 4. 云原生架构 5. Dubbo总体架构1、角色职能• Container 6. Dubbo分层架构 7. Config 配置层 8. Proxy 服务代理层 9. Registry 注册中心层 10. Cluster 路由层 11. Monitor 监控层 12. Protocol 远程调用层 13. Exchange 信息交换层 14. Transport 网络传输层 15. Serialization 数据序列化层 16. RPC通信协议分布式框架 17. 三大核心能力 18. 服务自动注册和发现 19. 负载均衡和智能容错 20. 可视化的服务治理与运维提供丰富服务治理、运维工具 21. 设计思想 22. 基领域模型 23. Microkernel + Plugin 模式 24. URL 25. 总结 **1. 垂直架构** 垂直架构是一种服务架构,它将多个服务运行在独立的服务器上。这种架构可以更好地处理并行请求,并降低了系统开销。 **2. 分布式架构** 分布式架构是一种服务架构,它将多个服务部署在不同的服务器上。这种架构可以更好地处理高负载请求,并降低了系统延迟。 **3. 微服务架构** 微服务架构是一种服务架构,它将应用程序分解成多个独立的服务。这种架构可以更好地管理应用程序,并降低了系统成本。 **4. 云原生架构** 云原生架构是一种服务架构,它将应用程序容器化,并托管在云平台上。这种架构可以提供更好的性能和弹性,但也更难管理。 **5. Dubbo总体架构1、角色职能• Container** Dubbo总体架构是基于容器技术的服务架构。容器是一种虚拟化软件,可以独立地运行多个应用程序实例。 **6. Dubbo分层架构** Dubbo分层架构是一个分层的架构模式,它将应用程序分解成多个层次,每个层次由一个独立的服务提供。 **7. Config 配置层** Config 配置层是 Dubbo 中一个重要的组件,它负责加载和配置应用程序的配置。 **8. Proxy 服务代理层** Proxy 服务代理层是 Dubbo 中一个重要的组件,它负责代理请求到应用程序。 **9. Registry 注册中心层** Registry 注册中心层是 Dubbo 中一个重要的组件,它负责注册和发现应用程序中的服务实例。 **10. Cluster 路由层** Cluster 路由层是 Dubbo 中一个重要的组件,它负责将请求路由到不同的应用程序实例。 **11. Monitor 监控层** Monitor 监控层是 Dubbo 中一个重要的组件,它负责监控应用程序的健康状态和性能。 **12. Protocol 远程调用层** Protocol 远程调用层是 Dubbo 中一个重要的组件,它负责提供远程调用服务。 **13. Exchange 信息交换层** Exchange 信息交换层是 Dubbo 中一个重要的组件,它负责将应用程序之间的通信信息交换。 **14. Transport 网络传输层** Transport 网络传输层是 Dubbo 中一个重要的组件,它负责将应用程序之间的通信信息传输到正确的目的地。 **15. Serialization 数据序列化层** Serialization 数据序列化层是 Dubbo 中一个重要的组件,它负责将应用程序数据序列化为字节流。 **16. RPC通信协议分布式框架** RPC 通信协议分布式框架是 Dubbo 中一个重要的组件,它提供分布式 RPC 的支持。 **17. 三大核心能力** * Invoker:负责 Invoker 的生命周期管理。 * Invoker 实体域:Dubbo 的核心模型,其它模型都向它靠拢,或转换成它,它代表一个可执行体,可向它发起 invoke 调用。 * Invocation 会话域:持有调用过程中的变量,比如方法名,参数等。 **18. 服务自动注册和发现** 服务自动注册和发现是 Dubbo 中一个重要的功能,它负责在应用程序启动时自动注册和发现新的服务实例。 **19. 负载均衡和智能容错** 负载均衡和智能容错是 Dubbo 中一个重要的功能,它可以处理多个请求并提供最佳性能。 **20. 可视化的服务治理与运维提供丰富服务治理、运维工具** 可视化的服务治理与运维提供丰富服务治理、运维工具可以帮助管理员更好地管理应用程序的性能和健康状态。 **21. 设计思想** Dubbo 的设计思想是采用容器技术,并使用微服务架构、分布式架构、云原生架构等技术来构建一个可扩展、可靠、易维护的服务架构。 **22. 基领域模型** Dubbo 的基领域模型是一个面向服务的分布式计算框架,它可以被用于构建各种各样的应用程序,包括机器学习、数据分析、游戏等。 **23. Microkernel + Plugin 模式** Dubbo 使用 Microkernel + Plugin 模式来实现可扩展性。Microkernel 是 Dubbo 本身的功能,而 Plugin 是用户可以扩展 Dubbo 的功能。 **24. URL** Dubbo 使用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息。 **25. 总结** Dubbo总体架构是分布式架构,它可以提供更好的性能、可靠性和易维护性。Dubbo 的设计思想和技术选型能够帮助构建一个高效、可扩展的服务架构。

正文

作者:黄金

一、架构演变

单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构

二、Dubbo总体架构

1、角色职能

• Container:服务容器 (tomcat、jetty、weblogic)

• Provider:服务提供者

•Consumer:服务消费者

•Registry:注册中心( zookeeper、Nacos 、Apollo)

•Minitor:监控中心

2、调用流程

(1)服务容器负责启动,加载,运行服务提供者。

(2)服务提供者在启动时,向注册中心注册自己提供的服务。

(3)服务消费者在启动时,向注册中心订阅自己所需的服务。

(4)注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

(5)服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

(6)服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

三、Dubbo分层架构

Config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类

Proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory

Registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService

Cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance

Monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService

Protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter

Exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer

Transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec

Serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

四、Dubbo六大核心能力

1、面向接口代理的高性能RPC调用

提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。

2、服务自动注册和发现

支持多种注册中心服务,服务实例上下线实时感知。

3、负载均衡和智能容错

内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。

4、高度可扩展能力

遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现

5、运行期流量调度

内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。

6、可视化的服务治理与运维

提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

五、RPC通信协议

分布式框架的核心是RPC框架,RPC框架的核心是RPC协议。RPC是指服务之间远程调用协议,也就是指明了服务之间接口调用,进行序列化和网络传输的约定。

Dubbo提供了 Triple(Dubbo3)、Dubbo2 协议, 第三方协议进行了集成,包括 gRPC、Thrift、JsonRPC、Hessian2、REST 等。其中RPC协议包含:服务提供者的IP地址、协议指定开放端口、运行服务、协议报文编码、序列化方式

六、负载均衡和集群容错

1、负载均衡

Dubbo 提供的是客户端负载均衡,即由 Consumer 通过负载均衡算法得出需要将请求提交到哪个 Provider 实例。在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。

算法 特性 备注
RandomLoadBalance 加权随机 默认算法,默认权重相同
RoundRobinLoadBalance 加权轮询 借鉴于 Nginx 的平滑加权轮询算法,默认权重相同
LeastActiveLoadBalance 最少活跃优先 + 加权随机 背后是能者多劳的思想
ShortestResponseLoadBalance 最短响应优先 + 加权随机 更加关注响应速度
ConsistentHashLoadBalance 一致性 Hash 确定的入参,确定的提供者,适用于有状态请求

2、集群容错

在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试

容错机制 特性
Failover 失败自动切换
Failfast 快速失败
Failsafe 失败安全
Failback 失败自动恢复
Forking 并行调用多个服务器
Broadcast 广播调用所有提供者

七、设计思想

1、领域模型

Protocol 服务域:Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理

Invoker 实体域:Dubbo 的核心模型,其它模型都向它靠拢,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现

Invocation 会话域:持有调用过程中的变量,比如方法名,参数等

2、基本设计原则

Microkernel + Plugin 模式:Microkernel 只负责组装 Plugin,Dubbo 自身的功能也是通过扩展点实现的,也就是 Dubbo 的所有功能点都可被用户自定义扩展所替换

URL:采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息

八、总结

至此,Dubbo总体架构与核心模块介绍完成,文中如有不当或者错误观点,欢迎大家评论区指出。感兴趣的同学,可以关注后续“Dubbo架构设计与源码解析”系列的文章。

与Dubbo架构设计与源码解析(一) 架构设计相似的内容:

Dubbo架构设计与源码解析(一) 架构设计

作者:黄金 一、架构演变 单应用架构 > 垂直架构 > 分布式架构 > 微服务架构 > 云原生架构   二、Dubbo总体架构   1、角色职能 • Container:服务容器 (tomcat、jetty、weblogic) • Provider:服务提供者 •Consumer:服务消

Dubbo架构设计与源码解析(三)责任链模式

作者:周可强 一、责任链模式简介 1、责任链模式定义 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

Dubbo架构设计与源码解析(二) 服务注册

作者:黄金 一、Dubbo简介 Dubbo是一款典型的高扩展、高性能、高可用的RPC微服务框架,用于解决微服务架构下的服务治理与通信问题。其核心模块包含 【RPC通信】 和 【服务治理】 ,其中服务治理又分为服务注册与发现、服务容错、负载均衡、流量调度等。今天将重点介绍Dubbo的服务注册与发现。

Dubbo3应用开发——架构的演变过程

Dubbo3应用开发——架构的演变过程 什么是Dubbo 早期Dubbo的定位; 基于Java的高性能,轻量级的RPC框架;SOA【Service-Oriented Architecture ⾯向服务的架构】 = RPC+服务治理; 2018年阿⾥巴巴把这个框架捐献给了 Apache 基⾦会,正式更

哈啰面试:说说Dubbo运行原理?

Dubbo 是一款高性能、轻量级的开源 RPC(远程过程调用)框架,主要用于构建分布式服务和微服务架构。那 Dubbo 又是如何运行的呢?让我们一起来看。 1.核心组件 要说 Dubbo 运行流程就不得不先来了解一下 Dubbo 的核心组件了,因为 Dubbo 的交互流程是和核心组件息息相关的。 D

Spring Cloud微服务核心架构分析

Spring Cloud是一个相对比较成熟的微服务框架。虽然,Spring Cloud于2016年才推出1.0的release版本, 时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。 Spring Cloud是一系列框架的有序集合。它利用Spri

『手写Mybatis』实现映射器的注册和使用

前言 如何面对复杂系统的设计? 我们可以把 Spring、MyBatis、Dubbo 这样的大型框架或者一些公司内部的较核心的项目,都可以称为复杂的系统。 这样的工程也不在是初学编程手里的玩具项目,没有所谓的 CRUD,更多时候要面对的都是对系统分层的结构设计和聚合逻辑功能的实现,再通过层层转换进行

dubbo~全局异常拦截器的使用与设计缺陷~续

上一次的介绍,主要围绕如何统一去捕获异常,以及为每一种异常添加自己的Mapper实现,并且我们知道,当在ExceptionMapper中返回非200的Response,不支持application/json的响应类型,而是写死的text/plain类型。 Filter为二方包异常手动捕获 参考:ht

dubbo~全局异常拦截器的使用与设计缺陷

异常拦截器ExceptionMapper 在JAX-RS(Java API for RESTful Web Services)中,ExceptionMapper接口用于将Java异常映射到HTTP响应。通过实现ExceptionMapper接口,你可以自定义如何处理特定类型的异常,并生成相应的HTT

dubbo~javax.validation和jakarta.validation的介绍与排雷

javax.validation和jakarta.validation都是用于Java中进行数据验证(validation)的相关API,它们提供了一套标准的验证框架,用于验证Java对象的属性是否符合指定的约束条件。这两个API的作用类似,只是在Java EE平台的演进过程中发生了一些变化。 ja