dubbo知识点

news2024/11/28 2:34:24
  1. 为什么要用 Dubbo?

    1. 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),
    2. 也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架
    3. 就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了
  2. Dubbo 的整体架构设计有哪些分层?

    1. 接口服务层(Service):该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现
    2. 配置层(Config):对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心
    3. 服务代理层(Proxy):服务接口透明代理,生成服务的客户端 Stub 和 服务端的 Skeleton,以 ServiceProxy 为中心,扩展接口为 ProxyFactory
    4. 服务注册层(Registry):封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为 RegistryFactory、Registry、RegistryService
    5. 路由层(Cluster):封装多个提供者的路由和负载均衡,并桥接注册中心,以Invoker 为中心,扩展接口为 Cluster,Directory、Router 和 LoadBlancce
    6. 监控层(Monitor):RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory、Monitor 和 MonitorService
    7. 远程调用层(Protocal):封装 RPC 调用,以 Invocation 和 Result 为中心,扩展接口为 Protocal、Invoker 和 Exporter
    8. 信息交换层(Exchange):封装请求响应模式,同步转异步。以 Request 和Response 为中心,扩展接口为 Exchanger、ExchangeChannel、ExchangeClient 和 ExchangeServer
    9. 网络传输层(Transport):抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel、Transporter、Client、Server 和 Codec
    10. 数据序列化层(Serialize):可复用的一些工具,扩展接口为 Serialization、ObjectInput、ObjectOutput 和 ThreadPool
  3. 默认使用的是什么通信框架,还有别的选择吗

    1. 默认也推荐使用 netty 框架,还有 mina。
  4. 服务调用是阻塞的吗

    1. 默认是阻塞的,可以异步调用,没有返回值的可以这么做
    2. Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。
  5. 一般使用什么注册中心?还有别的选择吗?

    1. 推荐使用 Zookeeper 作为注册中心,还有 Redis、Multicast、Simple 注册中心,但不推荐。
  6. 默认使用什么序列化框架,你知道的还有哪些?

    1. 推荐使用 Hessian 序列化,还有 Duddo、FastJson、Java 自带序列化
  7. 服务提供者能实现失效踢出是什么原理?

    1. 服务失效踢出基于 zookeeper 的临时节点原理
  8. 服务上线怎么不影响旧版本?

    1. 采用多版本开发,不影响旧版本
  9. 如何解决服务调用链过长的问题

    1. 可以结合 zipkin 实现分布式服务追踪
  10. 说说核心的配置有哪些

    1. dubbo:service 服务配置
    2. dubbo:reference 引用配置
    3. dubbo:protocol 协议配置
    4. dubbo:application 应用配置
    5. dubbo:module 模块配置
    6. dubbo:registry 注册中心配置
    7. dubbo:monitor 监控中心配置
    8. dubbo:provider 提供方配置
    9. dubbo:consumer 消费方配置
    10. dubbo:method 方法配置
    11. dubbo:argument 参数配置
  11. Dubbo 推荐用什么协议

    1. dubbo://(推荐)
    2. rmi://
    3. hessian://
    4. http://
    5. webservice://
    6. thrift://
    7. memcached://
    8. redis://
    9. rest://
  12. 同一个服务多个注册的情况下可以直连某一个服务吗

    1. 可以点对点直连,修改配置即可,也可以通过 telnet 直接某个服务
  13. 画一画服务注册与发现的流程图

    1. 在这里插入图片描述
  14. Dubbo 集群容错有几种方案

    1. Failover Cluster 失败自动切换,自动重试其它服务器(默认)
    2. Failfast Cluster 快速失败,立即报错,只发起一次调用
    3. Failsafe Cluster 失败安全,出现异常时,直接忽略
    4. Failback Cluster 失败自动恢复,记录失败请求,定时重发
    5. Forking Cluster 并行调用多个服务器,只要一个成功即返回
    6. Broadcast Cluster 广播逐个调用所有提供者,任意一个报错则报错
  15. Dubbo 服务降级,失败重试怎么做?

    1. 可以通过 dubbo:reference 中设置 mock=“return null”。mock 的值也可以修改为 true,然后再跟接口同一个路径下实现一个 Mock 类,命名规则是 “接口名称+Mock” 后缀。然后在 Mock 类里实现自己的降级逻辑
  16. Dubbo 使用过程中都遇到了些什么问题?

    1. 在注册中心找不到对应的服务,检查 service 实现类是否添加了@service 注解无法连接到注册中心,检查配置文件中的对应的测试 ip 是否正确
  17. Dubbo Monitor 实现原理?

    1. Consumer 端在发起调用之前会先走 filter 链;provider 端在接收到请求时也是先走 filter 链,然后才进行真正的业务逻辑处理。
    2. 默认情况下,在 consumer 和 provider 的 filter 链中都会有 Monitorfilter。
    3. MonitorFilter 向 DubboMonitor 发送数据
    4. DubboMonitor 将数据进行聚合后(默认聚合 1min 中的统计数据)暂存到ConcurrentMap<Statistics, AtomicReference> statisticsMap,然后使用一个含有 3 个线程(线程名字:DubboMonitorSendTimer)的线程池每隔 1min 钟,调用 SimpleMonitorService 遍历发送 statisticsMap 中的统计数据,每发送完毕一个,就重置当前的 Statistics 的 AtomicReference
    5. SimpleMonitorService 将这些聚合数据塞入 BlockingQueue queue 中(队列大写为 100000)
    6. SimpleMonitorService 使用一个后台线程(线程名为:DubboMonitorAsyncWriteLogThread)将 queue 中的数据写入文件(该线程以死循环的形式来写)
    7. SimpleMonitorService 还会使用一个含有 1 个线程(线程名字:DubboMonitorTimer)的线程池每隔 5min 钟,将文件中的统计数据画成图表
  18. Dubbo 用到哪些设计模式

    1. 工厂模式
      1. Provider 在 export 服务时,会调用 ServiceConfig 的 export 方法。ServiceConfig中有个字段
      2. private static final Protocol protocol =ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
      3. Dubbo 里有很多这种代码。这也是一种工厂模式,只是实现类的获取采用了 JDKSPI 的机制。这么实现的优点是可扩展性强,想要扩展实现,只需要在 classpath下增加个文件就可以了,代码零侵入。另外,像上面的 Adaptive 实现,可以做到调用时动态决定调用哪个实现,但是由于这种实现采用了动态代理,会造成代码调试比较麻烦,需要分析出实际调用的实现类
    2. 装饰器模式
      1. Dubbo 在启动和调用阶段都大量使用了装饰器模式。以 Provider 提供的调用链为例,具体的调用链代码是在 ProtocolFilterWrapper 的 buildInvokerChain 完成的,具体是将注解中含有 group=provider 的 Filter 实现,按照 order 排序,最后的调用顺序是
      2. EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter ->ExecuteLimitFilter -> TraceFilter -> TimeoutFilter -> MonitorFilter ->ExceptionFilter
      3. 更确切地说,这里是装饰器和责任链模式的混合使用。例如,EchoFilter 的作用是判断是否是回声测试请求,是的话直接返回内容,这是一种责任链的体现。而像ClassLoaderFilter 则只是在主功能上添加了功能,更改当前线程的 ClassLoader,这是典型的装饰器模式
    3. 观察者模式
      1. Dubbo 的 Provider 启动时,需要与注册中心交互,先注册自己的服务,再订阅自己的服务,订阅时,采用了观察者模式,开启一个 listener。注册中心会每 5 秒定时检查是否有服务更新,如果有更新,向该服务的提供者发送一个 notify 消息,provider 接受到 notify 消息后,即运行 NotifyListener 的 notify 方法,执行监听器方法
    4. 动态代理模式
      1. Dubbo 扩展 JDK SPI 的类 ExtensionLoader 的 Adaptive 实现是典型的动态代理实现。Dubbo 需要灵活地控制实现类,即在调用阶段动态地根据参数决定调用哪个实现类,所以采用先生成代理类的方法,能够做到灵活的调用。生成代理类的代码是 ExtensionLoader 的 createAdaptiveExtensionClassCode 方法。代理类的主要逻辑是,获取 URL 参数中指定参数的值作为获取实现类的 key。
  19. Dubbo 配置文件是如何加载到 Spring 中的?

    1. Spring 容器在启动的时候,会读取到 Spring 默认的一些 schema 以及 Dubbo 自定义的 schema,每个 schema 都会对应一个自己的 NamespaceHandler
    2. NamespaceHandler 里面通过 BeanDefinitionParser 来解析配置信息并转化为需要加载的 bean 对象
  20. Dubbo SPI 和 Java SPI 区别?

    1. JDK SPI
      1. JDK 标准的 SPI 会一次性加载所有的扩展实现,如果有的扩展很耗时,但也没用上,很浪费资源
      2. 所以只希望加载某个的实现,就不现实了
    2. DUBBO SPI
      1. 对 Dubbo 进行扩展,不需要改动 Dubbo 的源码
      2. 延迟加载,可以一次只加载自己想要加载的扩展实现。
      3. 增加了对扩展点 IOC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。
      4. Dubbo 的扩展机制能很好的支持第三方 IoC 容器,默认支持 Spring Bean。
  21. Dubbo 支持分布式事务吗?

    1. 目前暂时不支持,可与通过 tcc-transaction 框架实现
  22. Dubbo 可以对结果进行缓存吗

    1. 为了提高数据访问的速度。Dubbo 提供了声明式缓存,以减少用户加缓存的工作量
    2. <dubbo:reference cache=“true” />
    3. 其实比普通的配置文件就多了一个标签 cache=“true”
  23. 服务上线怎么兼容旧版本?

    1. 可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似
  24. Dubbo 必须依赖的包有哪些

    1. Dubbo 必须依赖 JDK,其他为可选。
  25. Dubbo telnet 命令能做什么

    1. dubbo 服务发布之后,我们可以利用 telnet 命令进行调试、管理。
    2. Dubbo2.0.5 以上版本服务提供端口支持 telnet 命令
    3. 连接服务telnet localhost 20880 //键入回车进入 Dubbo 命令模式。
    4. 查看服务列表ls com.test.TestService
      1. ls (list services and methods)
      2. ls : 显示服务列表。
      3. ls -l : 显示服务详细信息列表。
      4. ls XxxService:显示服务的方法列表。
      5. ls -l XxxService:显示服务的方法详细信息列表
  26. Dubbo 支持服务降级吗

    1. 以通过 dubbo:reference 中设置 mock=“return null”。mock 的值也可以修改为 true,然后再跟接口同一个路径下实现一个 Mock 类,命名规则是 “接口名称+Mock” 后缀。然后在 Mock 类里实现自己的降级逻辑
  27. Dubbo 如何优雅停机

    1. Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行
  28. Dubbo 和 Dubbox 之间的区别?

    1. Dubbox 是继 Dubbo 停止维护后,当当网基于 Dubbo 做的一个扩展项目,如加了服务可 Restful 调用,更新了开源组件等
  29. Dubbo 和 Spring Cloud 的区别?

    1. ​ Dubbo Spring Cloud

      服务注册中心 Zookeeper Spring Cloud Netflix Eureka

      服务调用方式 RPC REST API

      服务网关 无 Spring Cloud Netflix Zuul

      断路器 不完善 Spring Cloud Netflix Hystrix

      分布式配置 无 Spring Cloud Config

      服务跟踪 无 Spring Cloud Sleuth

      消息总线 无 Spring Cloud Bus

      数据流 无 Spring Cloud Stream

      批量任务 无 Spring Cloud Task

  30. 你还了解别的分布式框架吗

    1. 别的还有 spring 的 spring cloud,facebook 的 thrift,twitter 的 finagle 等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1577084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式Linux驱动开发——汇编点灯

嵌入式Linux驱动开发——汇编点灯 本文章开始记录学习嵌入式Linux的过程&#xff0c;使用的开发板是正点原子的阿尔法&#xff0c;以及左老师的书籍和视频。然后这个系列不会介绍基础知识&#xff08;书上都有&#xff09;&#xff0c;主要是记录思考过程以及需要注意的点。 代…

《深入浅出多模态》:多模态经典模型CLIP

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

淘宝天猫详情接口API:打造个性化购物体验

在数字时代的购物领域&#xff0c;个性化体验成为了各大电商平台竞争的核心。随着互联网和大数据技术的快速发展&#xff0c;淘宝天猫作为中国最大的电商平台&#xff0c;不断推出创新的功能和工具&#xff0c;联讯数据为用户提供个性化购物服务。其中&#xff0c;淘宝天猫详情…

The Closest Pair Problem

Problem Let S be a set of n points ((xi,yi), 1≤i≤n) in the plane, finding a pair of points p and q in S whose mutual distance is minimum. Algorithm 1: Θ ( n 2 ) The brute-force algorithm simply examines all the possible n(n−1)/2 distances and returns t…

实战中内网穿透的打法

前言 在内网渗透时&#xff0c;一个WebShell或CobaltStrike、Metasploit上线等&#xff0c;只是开端&#xff0c;更多是要内网横向移动&#xff0c;扩大战果&#xff0c;打到核心区域。但后渗透的前提是需要搭建一条通向内网的“专属通道”&#xff0c;才能进一步攻击。可实战…

交易要想成功澳福总结几点

100%使用基本面分析的投资者能保证每次交易都能成功吗&#xff1f;100%使用技术分析的投资者能保证每次交易都能成功吗&#xff1f;在fpmarkets澳福看来无论是基本面分析还是技术分析都不能保证100%交易成功。 投资者不能只依赖一种分析进行投资交易。在fpmarkets澳福看来成功的…

4【PS让图片动起来】系列2-【素材拆分 抠图】

【问题介绍】上章展示了如何将花瓣网的素材导入PS&#xff0c;但导入的是一堆花瓣&#xff0c;怎么拆分成一片片飘落的花瓣呢&#xff1f; 今天介绍的主体就是PS抠图 PS抠图的方法有很多种&#xff0c;一口气讲完也不实用&#xff0c;计划是根据合适的案例&#xff0c;介绍合…

uniapp开发笔记----配置钉钉小程序

uniapp开发笔记----配置钉钉小程序 1. 项目根目录添加package.json文件2. 之后点击运行就可以看到已经添加了钉钉小程序3. 如果首次使用需要配置 其他功能待开发。。。 接上一章之后&#xff0c;我想要把项目配置成钉钉小程序 官方文档点击这里 1. 项目根目录添加package.json…

linux:du和df区别

文章目录 1. 概述2. du 命令2. df 命令3. 区别总结 1. 概述 du 和 df 都是 Linux 系统中用于查看磁盘空间使用情况的命令&#xff0c;但它们的功能和用法有所不同。 2. du 命令 du 是 “disk usage” 的缩写&#xff0c;用于显示文件或目录的磁盘使用情况。du 命令用于查看指…

接口自动化入门: Http请求的域名与IP地址概念!

在进行接口自动化测试时&#xff0c;经常需要与服务器进行通信&#xff0c;这就涉及到了使用Http协议发送请求。在发送请求时&#xff0c;我们需要指定目标服务器的域名或者IP地址。下面将从0到1详细介绍域名与IP地址的概念及其在接口自动化测试中的应用。 本文从5个方面来书写…

【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程

nnUNet是一个自适应的深度学习框架&#xff0c;专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点&#xff1a; 自适应框架&#xff1a;nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等&#xff0c;从而避免了繁琐的手工调参过程。 自动化流程&a…

申请免费SSL证书

SSL证书是数字证书的一种&#xff0c;配置在服务器上&#xff0c;起到文件信息传输加密的作用。由受信任的数字证书颁发机构CA在验证服务器身份后颁发&#xff0c;防止第三方窃取或篡改信息。 具体来说&#xff0c;SSL证书在客户端浏览器与Web服务器两端建立一条SSL安全通道&a…

【C++】流程控制语句:跳转语句之Break

在C编程语言中&#xff0c;流程控制不仅包括循环和条件分支&#xff0c;还包括一类特别重要的语句——跳转语句。 这类语句允许程序在执行过程中“打破”常规流程&#xff0c;转而执行其他位置的代码。 C提供了四种跳转语句&#xff1a;break、continue、goto 以及 return。…

(已解决)使用IEEE格式的latex模板时出现引用(citation/reference)下面有下划线的情况

文章目录 背景原因解决方案 背景 问题如下&#xff0c;1.有一个下划线标注所发表的期刊或者会议2.不是斜体的。 上面这样肯定是不对的&#xff0c;那为什么会出现这种情况呢&#xff1f; 原因 I think I know of no style that applies underlining to titles in the bibli…

实现第一个动态链接库 游戏插件 成功在主程序中运行 dll 中定义的类

devc 5.11编译环境 dll编译环境设置参考 Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 插件 DLL代码和主程序代码如下 注意 dll 代码中的class 类名需要 和主程序 相同 其中使用了函数指针和强制类型转换 函数指针教程参考 以动态库链接库 .dll 探索结构体…

基于51单片机的温度、烟雾、火焰检测设计

基于51单片机的火灾检测设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用MQ-2烟雾采集&#xff0c;使用ADC0832将传感器输出的模拟信号转化为数字信号&#xff0c;再传给单片机。 2.使用DS18B20采集温度。…

fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化

为了 提供数据做后端回环优化和手动回环优化,需要保存每帧的点云和每帧的里程计为单独的文件,并且需要保存的名字为ros时间戳。 效果很好,比我自己写的手动回环模块好用 // This is an advanced implementation of the algorithm described in the // following paper: /…

Ceph学习 -4.Ceph组件介绍

文章目录 1.Ceph组件介绍1.1 组件介绍1.2 流程解读1.2.1 综合效果图1.2.2 数据存储逻辑 1.3 小结 1.Ceph组件介绍 学习目标&#xff1a;这一节&#xff0c;我们从组件介绍、流程解读、小结三个方面来学习。 1.1 组件介绍 无论是想向云平台提供 Ceph 对象存储和 Ceph 块设备服务…

Mamba入局遥感图像分割 | Samba: 首个基于SSM的遥感高分图像语义分割框架

文章目录 1、导读 2、背景 3、动机 4、方法 5、实验 6、总结 标题&#xff1a;《Samba: Semantic Segmentation of Remotely Sensed Images with State Space Model》论文&#xff1a;https://arxiv.org/abs/2404.01705源码&#xff1a;https://github.com/zhuqinfeng1999…

原来科技感的三维地图可以这么简单实现

前言 2024.02.20 下午摸鱼时接到一个客户的数字孪生项目的需求&#xff0c;客户什么也没说&#xff0c;就要求“炫酷”和“科技感”地图&#xff0c;还要把他们的模型都放上去&#xff0c;起初我以为又是一个可视化大屏的项目&#xff0c;准备用高德地图应付过去&#xff0c;然…