Dubbo系统架构解析

本文详细介绍了Dubbo框架的十层架构,包括服务注册与发现的Registry、监控服务的Monitor、以及RPC、配置、代理、路由、监控、协议等核心组件。此外,还提到了Remoting和数据序列化等底层实现。文章结尾部分列出了相关的面试题,适合准备面试者参考。
摘要由CSDN通过智能技术生成
  • Registry :服务注册与发现的中心,提供目录服务。

  • Monitor :服务监控,统计服务的调用次数、调用时间等信息的日志服务,并可以对服务设置权限、降级处理等,称为服务管控中心。

Dubbo 的十层架构

===========

Dubbo系统架构解析

Dubbo 的架构设计划分为了 10 层。图中左边淡蓝色背景为服务 Consumer 使用的接口,右边淡绿色背景为服务 Provider 使用的接口,位于中轴线的为双方都要用到的接口。对于这10 层,根据其总体功能划分,可以划分为三大层:

Business 层

==========

该层仅包含一个 service 服务层 ,该层与实际业务逻辑有关,根据服务消费方和服务提供方的业务设计,实现对应的接口。

RPC 层

=====

该层主要负责整个分布式系统中各个主机间的通讯。该层包含了以下 6 层。

  • config 配置层 :一 ServiceConfig 和 ReferenceConfig 为中心,用于加载并解析 Spring 配置文件中的 Dubbo标签。

  • proxy 服务代理层 :服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton以 ServiceProxy 为中心,扩展接口为 ProxyFactory。Proxy 层封装了所有接口的透明化代理,而在其它层都以 Invoker 为中心只有到了暴露给用户使用时,才用 Proxy 将 Invoker 转成接口,或将接口实现转成 Invoker,也就是去掉 Proxy 层 RPC 是可以运行的只是不那么透明,不那么看起来像调本地服务一样调远程服务。

  • registry 注册中心层 :封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为 RegistryFactory、Registry、RegistryService,可能没有服务注册中心,此时服务提供方直接暴露服务。

  • cluster 路由层 :封装多个提供者的路由和负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为Cluster、Directory、Router 和 LoadBalance,将多个服务提供方组合为一个服务提供方,实现对服务消费通明。只需要与一个服务提供方进行交互。Dubbo 官方指出,在 Dubbo 的整体架构中,Cluster 只是一个外围概念。Cluster 的目的是将多个 Invoker 伪装成一个 Invoker,这样用户只需关注 Protocol 层 Invoker 即可,加上Cluster 或者去掉 Cluster 对其它层都不会造成影响,因为只有一个提供者时,是不需要Cluster 的。

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

  • protocol 远程调用层 :封装 RPC 调用,以 Invocation 和 Result 为中心,扩展接口为 Protocol、Invoker 和 Exporter。Protocol 是服务域,它是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。Invoker 是实体域,它是 Dubbo 的核心模型,其其他模型都是向它靠拢,或转换成它,它代表一个可执行体,可向它发起 Invoker 调用,它有可能是一个本地实现,也有可能是一个远程实现,也有可能是一个集群实现。在 RPC 中,Protocol 是核心层,也就是只要有 Protocol + Invoker + Exporter 就可以完成非透明的 RPC 调用,然后在 Invoker 的主过程上 Filter 拦截点。

Remitting 层

===========

Remoting 实现是 Dubbo 协议的实现,如果我们选择 RMI 协议,整个 Remoting 都不会用上,Remoting 内部再划为 Transport 传输层和 Exchange 信息交换层,Transport 层只负责单向消息传输,是对 Mina, Netty, Grizzly 的抽象,它也可以扩展 UDP 传输,而 Exchange层是在传输层之上封装了 Request-Response 语义。

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

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

  • serialize 数据序列化层 :可复用的一些工具,扩展接口为 Serialization、ObjectInput、ObejctOutput 和 ThreadPool。

Dubbo 框架模块解析

============

将Dubbo源码工程导入Idea

================

写在最后

为了这次面试,也收集了很多的面试题!

以下是部分面试题截图

Java程序员秋招三面蚂蚁金服,我总结了所有面试题,也不过如此

写在最后

为了这次面试,也收集了很多的面试题!

以下是部分面试题截图

[外链图片转存中…(img-NKaYXhIV-1714287752428)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值