当前位置: 首页 > news >正文

2023年面试题之Dubbo基础架构

一. Dubbo 的整体架构设计有哪些分层?

接口服务层(Service):该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现

配置层(Config):对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心

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

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

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

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

远程调用层(Protocal):封装 RPC 调用,以 Invocation 和 Result 为中心,扩展接口为Protocal、Invoker 和 Exporter

信息交换层(Exchange):封装请求响应模式,同步转异步。以 Request 和Response 为中心,扩展接口为 Exchanger、ExchangeChannel、ExchangeClient 和 ExchangeServer网络 传输 层(Transport):抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为Channel、Transporter、Client、Server 和 Codec

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

ObjectOutput 和 ThreadPool

二. Dubbo Monitor 实现原理?

Consumer 端在发起调用之前会先走 filter 链;provider 端在接收到请求时也是先走 filter 链,然后才进行真正的业务逻辑处理。默认情况下,在 consumer 和 provider 的 filter 链中都会有Monitorfilter。

1. MonitorFilter 向 DubboMonitor 发送数据

2. DubboMonitor 将数据进行聚合后(默认聚合 1min 中的统计数据)暂存到

ConcurrentMap<Statistics, AtomicReference> statisticsMap,然后使用一个含有 3 个线程(线程名字:DubboMonitorSendTimer)的线程池每隔 1min 钟,调用 SimpleMonitorService 遍历发送 statisticsMap 中的统计数据,每发送完毕一个,就重置当前的 Statistics 的AtomicReference

3. SimpleMonitorService 将这些聚合数据塞入 BlockingQueue queue 中(队列大写为 100000)

4. SimpleMonitorService 使用一个后台线程(线程名为:DubboMonitorAsyncWriteLogThread)将 queue 中的数据写入文件(该线程以死循环的形式来写)

5. SimpleMonitorService 还会使用一个含有 1 个线程(线程名字:DubboMonitorTimer)的线程池每隔 5min 钟,将文件中的统计数据画成图表

三. Dubbo 类似的分布式框架还有哪些?

比较著名的就是 Spring Cloud。

四. Dubbo 和 Spring Cloud 有什么关系?

Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了Spring、Spring Boot 的优势之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spring Cloud 是打造一个生态。

五. Dubbo 和 Spring Cloud 有什么哪些区别?

Dubbo 底层是使用 Netty 这样的 NIO 框架,是基于 TCP 协议传输的,配合以 Hession 序列化完成 RPC 通信。

Spring Cloud 是基于 Http 协议 Rest 接口调用远程过程的通信,相对来说 Http 请求会有更大的报文,占的带宽也会更多。但是 REST 相比 RPC 更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适,至于注重通信速度还是方便灵活性,具体情况具体考虑。

六. Dubbo 和 Dubbox 之间的区别?

Dubbox 是继 Dubbo 停止维护后,当当网基于 Dubbo 做的一个扩展项目,如加了服务可 Restful调用,更新了开源组件等。

相关文章:

  • 原生PHP及thinkphp6接入阿里云短信
  • sparksql案例实操
  • [杂记]算法:前缀和与差分数组
  • Codeforces Round #720 (Div. 2) B. Nastia and a Good Array
  • Unreal中Interface接口的使用
  • 硬件仿真加速器与原型验证平台
  • SymPy符号运算库与latex数学公式
  • 【小白向】让电脑成为热点WIFI
  • mysql常用操作记录
  • P5587 打字练习————C++
  • 2022年Tesla技术分享
  • 详解数据库的锁机制及原理
  • Java实现doc、ppt、pdf和视频的缩略图
  • 《Linux Shell脚本攻略》学习笔记-第六章
  • Tomcat打破双亲委派模型
  • A. Parallel Projection codeforces 1782A
  • echarts柱状图值为0是不显示以及柱状图百分比展示
  • [前端笔记——HTML介绍] 3.<head>标签里有什么?
  • ESP32设备驱动-TCS34725颜色传感器驱动
  • 系统分析师案例必备知识点汇总---2023系列文章二