Dubbo框架面试题

news2024/11/17 14:28:12
1.什么是Dubbo?

Dubbo是基于Java的高性能轻量级的RPC分布式服务框架,现已成为 Apache 基金会孵化项目。

2.为什么要使用Dubbo?

随着互联网的快速发展,Web应用程序的规模不断扩大,分布式服务体系结构和流计算体系结构势在必行。

dubbo的优点是:开源免费;一些核心业务被提取并作为独立的服务提供服务,逐渐形成一个稳定的服务中心,这样前端应用程序就可以更好地响应变化多端的市场需求;分布式框架能承受更大规模的流量;内部基于netty性能高。

3.Dubbo提供了哪3个关键功能?

    基于接口的远程调用

    容错和负载均衡

    自动服务注册和发现

4.Dubbo服务的关键节点有哪些?

5.Dubbo服务注册流程?

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

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

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

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

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

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

6.画一下服务注册流程图。

7.Dubbo架构的特点?

连通性、健壮性、伸缩性、以及向未来架构的升级性。

8.对jdk的最小版本需求?

jdk1.6+

9.注册中心的选择?

一般来说选中Zookeeper ,因为更稳定更合适。

除了Zookeeper还有Redis注册中心、Multicast注册中心、Simple注册中心。

10.Dubbo的核心配置和用途

11.Dubbo支持哪些序列化协议,它们各有什么特点?

Dubbo支持多种序列化协议,每种协议都有其特点:

1、Hessian: 一种简单易用的序列化协议,适用于跨语言调用,但性能和效率居中。

2、Java: 默认的序列化协议,易用但性能较低,不适用于高性能场景。

3、Kryo: 性能高效的序列化协议,但不支持跨语言。

4、FST: 性能类似于Kryo,且更加易用。

5、Protobuf: 谷歌开发的高效、跨语言的序列化协议,适合高性能和跨语言环境。

选择合适的序列化协议取决于具体应用场景,如性能需求、跨语言调用等。

12.Dubbo中的服务治理包括哪些内容?

服务治理是Dubbo框架的重要组成部分,主要包括以下内容:

1、服务注册与发现:管理服务的注册与动态发现。

2、负载均衡:在多个服务提供者之间进行负载均衡。

3、故障转移:在服务调用失败时,提供故障转移机制。

4、服务监控:监控服务调用次数、调用时间等信息。

5、路由规则:根据规则路由调用请求到指定服务。

6、配置管理:动态配置服务参数。

这些内容共同构成了Dubbo的服务治理机制,确保了服务的高效运行和可靠性。

13.Dubbo支持哪些负载均衡策略?

Dubbo支持多种负载均衡策略,主要包括:

1、随机(Random): 随机选择一个服务提供者。

2、轮询(Round Robin): 按顺序轮流选择服务提供者。

3、最少活跃调用数(Least Active): 选择活跃调用数最少的服务提供者。

4、一致性哈希(Consistent Hash): 基于调用参数的哈希值选择服务提供者。

不同的负载均衡策略适用于不同的应用场景,选择合适的策略可以提高服务的处理效率和系统的稳定性。

14.Dubbo的服务容错机制主要包括哪些?

Dubbo的服务容错机制主要包括以下几种:

1、Failover: 当服务调用失败时,自动切换到其他服务器重试。

2、Failfast: 快速失败,只发起一次调用,失败立即报错。

3、Failsafe: 失败安全,出现异常时,直接忽略。

4、Failback: 失败自动恢复,后台记录失败请求,定时重发。

5、Forking:并行调用多个服务器,只要一个成功即返回。

6、Broadcast:广播调用所有提供者,逐个调用,任意一台报错则报错。

这些容错机制提高了服务的可用性和稳定性,适用于不同的业务需求和场景。

15.Dubbo中,如何实现服务的版本控制?

在Dubbo中,服务的版本控制可以通过以下方式实现:

1、版本号定义: 在服务提供者和消费者的配置中,指定服务的版本号。

2、版本匹配: 消费者在调用服务时,会请求匹配其版本号的服务。

3、多版本并行:可以同时运行多个不同版本的服务,以实现平滑升级和兼容性测试。

服务版本控制使得在服务升级和维护过程中,减少对消费者的影响,提高系统稳定性。

16.Dubbo默认使用什么协议?

Dubbo缺省的默认协议是自身的dubbo协议,采用的是单一长连接和NIO异步通信的方式,适用于小数据量以及大并发的服务调用,消费者远大于提供者,Dubbo的传输层协议TCP,异步的,使用Hessian序列化。

17.Dubbo 支持哪些协议,每种协议的应用场景,优缺点?

dubbo:Dubbo缺省协议是dubbo协议,采用的是单一长连接和NIO异步通信的方式,适用于小数据量以及大并发的服务调用,消费者远大于提供者,Dubbo的传输层协议TCP,异步的,使用Hessian序列化。

rmi(remote Method invocation):采用的是我们的JDK标准的rmi的实现,传输以及返回参数的时候都需要实现Serializable接口,使用java标准的序列化机制,使用的是阻塞式的短连接,传输数据包可以大小混合,并且我们的消费者与提供者可以差不多数量,可以传文件。传输协议TCP,同步传输,适用于常规的远程服务调用以及rmi的相互操作。序列化安全漏洞。

webservice:基于 WebService 的远程调用协议,集成 CXF 实现,提供和原生 WebService 的互操作。多个短连接,基于 HTTP 传输,同步传输,适用系统集成和跨语言调用;

http:基于 Http 表单提交的远程调用协议,使用 Spring 的 HttpInvoke 实现。多个短连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消费者,需要给应用程序和浏览器 JS 调用;

hessian:集成 Hessian 服务,基于 HTTP 通讯,采用 Servlet 暴露服务,Dubbo 内嵌 Jetty 作为服务器时默认实现,提供与 Hession 服务互操作。多个短连接,同步 HTTP 传输,Hessian 序列化,传入参数较大,提供者大于消费者,提供者压力较大,可传文件;

18.RPC与HTTP的区别?

通过一张图来说明:

19.如何选择RPC与Rest风格的HTTP?

RPC:远程方法调用,远程直接调用你的方法,可以选择Http做为我们的最终协议。Http2.0,

Rest风格的HTTP:Rest风格,可读性好,跨语言,得到防火墙的支持。异构设计,开发快。缺陷:效率低,带来大量的无用信息。

如果你的项目不是那么大,并且希望快速开发,那么你使用Rest风格的HTTP,但是如果你的公司牛人很多,建议你使用RPC,你的项目比较大,对于网络传输的速率要求比较严格,那么你也可以使用RPC。

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

十层分层,遵循了领域驱动设计原则,并且他是在分层架构设计的基础上进行衍生的。

Service 这一层次是与业务相关的,根据我们的服务提供者以及服务的消费者进行对应的业务接口设计与实现

Config 配置层:对外配置接口,以ServiceConfig以及ReferenceConfig做为中心。

Proxy 服务接口透明代理,生成客户端Stub以及服务端的骨架Skeketon,以ServiceProxy为中心点,扩展点是ProxyFactory

Registry:服务注册层:封装服务地址的注册与发现,

Cluster:封装了我们的提供者的路由以及负载策略,并且我们会通过这个层面去桥接注册中心,以invoker为中心,去进行相应的接口拓展

Monitor:监控层:PPC的调用次数和调用时间,Statistics为中心,去进行接口拓展

Protocol :封装RPC调用,以invocation以及Result做为中心点,去进行拓展接口

Exchange :封装请求响应的模式,同步转异步,Request以及Response为中心

Transport :抽象mina,或者netty3,Netty4。以Message做为中心

Sreialize :可复用的工具。

21.Dubbo超时设置有哪些方式

超时设置可以在服务提供者端设置也可以在服务消费者端设置,但是我们一般会选择设置在服务提供者这边,因为消费者是没有办法感知服务提供者的特性的,所以尽可能优先设置在服务提供者端,如果消费者以及提供者都设置了超时时间,那么这个时候默认优先消费端设置,如果你在消费端设置,也有好处,好处是如果消费方超时,不会影响到提供者,提供者只会报警告不会报异常。

22.如果我们的Dubbo调用超时了会怎么办?

dubbo在调用服务不成功的时候,默认重试两次。

23.Dubbo服务之间的调用是阻塞的吗?

默认是同步等待结果的阻塞的,但是我们可以去设置成异步。

Dubbo是基于NIO非阻塞实现的并行调用,客户端不用读线程启动就可以完成并行调用远程服务,相对于原本的多线程,我们的线程开销较小。

24.Dubbo的管理控制台能够做什么?

管理控制台:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡策略等相关的管理功能。

25.当一个服务接口有多种实现的时候,我们应该怎么做?

分组问题:当一个接口有多种实现的时候,我们可以用group属性进行分组,可以让服务的提供方,以及服务的消费者都指定同一个Group。

26.出现调用超时com.alibaba.dubbo.remoting.TimeoutException异常怎么办?

一般情况下都是你的业务处理太慢,那么这个时候你可以首先去jstack.log分析线程是卡在哪个方法的调用上。

如果不能将业务处理好的话,那么这个时候请调整超时时间timeout。

27.出现java.util.concurrent.RejectedExecutionException或者Thread pool exhausted怎么办?

代表你的线程池已经到达了最大值,并且没有空闲的连接。拒绝执行你的任务。

//建议你出现了这样的错误,将最大的线程池连接数以及最小的设置成一样

dubbo.service.min.thread.pool.size=200  

dubbo.service.max.thread.pool.size=200

这个参数是Dubbo.properties中的。

28.Dubbo的安全性如何得到保障

在有注册中心的情况下,我们是可以通过Dubbo的路由规则,指定固定的IP的消费方来访问。在直连的情况下,那么这个时候我可以通过服务提供者的令牌(token),我们的消费方也需要在消费的时候输入这个token,才能够直连成功。Dubbo还可以提供服务白名单,防止接口被刷。

29.dubbo的服务发布

服务的暴露起始于 Spring IOC 容器刷新完毕之后,会根据配置参数组装成 URL, 然后根据 URL 的参数来进行本地或者远程调用。

会通过 proxyFactory.getInvoker,利用 javassist 来进行动态代理,封装真的实现类,然后再通过 URL 参数选择对应的协议来进行 protocol.export,默认是 Dubbo 协议。

30.Dubbo中用到了哪些设计模式?

简单工厂:提供一个方法,返回创建好的对象 他在Dubbo源码中的体现:LoggerFactory

工厂方法模式:对创建过程有修改,所以需要抽象一个工厂类,如果增加一个产品,就直接增加一个工厂类​。

抽象工厂:抽象工厂就是我们可以把不用的结果放到同一个工厂类之中 源码体现:ProxyFactory

策略模式​:SPI本身就是典型的策略模式,比如我们的负载均衡策略。

装饰器模式:ClassLoadFilter的过滤器 ,在这里对于他的主功能做了增强,所以,是装饰器模式。

观察者模式:服务自动注册的时候,或者说服务启动的时候,我们会有监听,我们的ApplicationContextListen。

代理模式:我们的整个RPC实际上就是代理对象传递信息的过程。

单例模式:​这个不多说,很多地方。

适配器模式:Dubbo可以支撑多个日志框架,但是我们每个日志框架都需要有对应的Adapter类,所以我们需要用适配器模式去对应Dubbo本身以及实现类的日志级别。

​责任链模式:我们会有判断回升测试的判断,ProtocolFilterWrapper的buildInvokerChain用到了责任链模式。​

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

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

相关文章

对博客系统进行自动化测试

博客系统代码:spring-blog taotao/Studying JavaEE Advanced - 码云 - 开源中国 (gitee.com) 自动化脚本代码:BlogAutoTest taotao/Studying JavaEE Advanced - 码云 - 开源中国 (gitee.com) 上线项目地址:博客登陆页 目录 一、博客系统项…

【Spring】lombok、dbUtil插件应用

一、lombok插件 1. 功能:对实体类自动,动态生成get、set方法,无参、有参构造..... 2. 步骤: (1)idea安装插件(只做一次) (2)添加坐标 (3)编写注解 NoArgsCo…

Python面向对象编程:类和对象①

文章目录 一、什么是面向对象编程1.1 面向对象编程的基本概念1.2 Python中的类和对象 二、定义类和创建对象2.1 定义类2.2 创建对象2.3 __init__方法2.4 self参数 三、类的属性和方法3.1 类的属性3.1.1 实例属性3.1.2 类属性 3.2 类的方法3.2.1 实例方法3.2.2 类方法3.2.3 静态…

Redis缓存技术 基础第二篇(Redis的Java客户端)

文章目录 一、Redis的Java客户端二、Jedis快速入门三、Jedis连接池四、SpringDataRedis快速入门五、SpringDataRedis优化 一、Redis的Java客户端 在Redis官网中提供了各种语言的客户端,地址:https://redis.io/clients 而关于java的功能模块分为以下几种…

数据的表示和存储 第4讲 C语言中的浮点数的编码表示

作者简介:互联网行业 算法研发工程师 本文适合阅读者:对C语言浮点数有一些疑惑的同学~ C语言的基本数据类型中,除了整数之外,还包含浮点数。 浮点数在机器中是如何表示的呢? 科学计数法,我们比较熟悉,任何十进制的数,都可以表示为:一个小数✖10的多少次方。 尾数的…

FIOT/浙江信达可恩消防股份有限公司25周年庆典隆重召开

一年一度,有着智慧消防物联网发展“行业风向标”的FIOT2024中国消防物联网大会,9月10日在杭州拉开帷幕!大会以丰富的流程设置,全新的会议视角为您呈现一场新思想、有干货、有价值的行业盛会。 9月10号下午,浙江信达可…

Spring MVC中实现一个文件上传和下载功能

说到文件上传和下载,相信每个开发者都有或多或少的接触过文件上传的功能吧,文件上传和下载是我们在学习计算机网络应用常见的一个功能,主要涉及到用户和服务器之间的数据传输。 我们来对文件上传和下载功能的进行相关概述吧! 文…

MySQL事务、索引、数据恢复和备份

MySQL事务、索引、数据恢复和备份 1.MySQL的事务处理 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL的事务实现方法 : SET AUTOCOMMIT 使用SET语句来改变自动提交模式 SET AUTOCOMMIT 0; # 关…

测试干货 | 一文读懂工业CT检测技术—无损检测手段

撰文排版:刘佳 审核指导:肖俊灵 “研路漫漫,伴你同行” 本文较长,建议先收藏后随时查看!以后我们将更新更多此类硬核科普,欢迎关注! 工业CT,即工业计算机断层成像技术,作…

舞台灯细绿激光模组安装方式

在追求视觉盛宴的现代舞台艺术中,细绿激光模组以其独特的色彩、高亮度和精准性,成为了不可或缺的创意元素。舞台灯细绿激光模组不仅能营造出梦幻般的氛围,还能通过精准的光束定位,引领观众视线,增强表演的层次感和沉浸…

大浪淘沙下的金融智变:AGI入场,巨头们已经吃到了第一波红利

长久以来,金融行业始终是全球 AI 技术投入的最大领域,其中银行这一细分市场的 AI 投资金额就占据了全球 AI 市场的超过 10%,无疑成为了 AI 实践的先锋。在国内市场,这一趋势同样显著且强劲。2024 年上半年的大模型招标统计数据显示…

《论软件架构建模技术与应用》写作框架,软考高级系统架构设计师

论文真题 软件架构风格是描述一类特定应用领域中系统组织方式的惯用模式,反映了领域中诸多系统所共有的结构特征和语义特征,并指导如何将各个模块和子系统有效组织成一个完整的系统。分层架构是一种常见的软件架构风格,能够有效简化设计&…

世优科技“1+2+N”,助力湖南旅发大会“火出圈”

刚刚,第三届湖南旅游发展大会在衡阳盛大启幕,现场,世优科技团队通过“12N”模式(即:1个IP复活,2项技术突破,N个场景应用),助力衡阳市IP“火出圈”3D形象惊艳亮相&#xf…

支付宝开放平台-开发者社区——AI 日报「9 月 26 日」

1 突破数据墙!27岁华裔MIT辍学创业8年,年化收入逼近10亿 新智元|阅读原文 就在刚刚,创业成功的27岁亿万富翁Alexandr Wang宣布——Scale AI的年化收入,几乎达到了10亿美元!Scale AI主攻的就是如今AI模型…

BACnet协议-(基于ISO 8802-3 UDP)(2)

1、模拟设备的工具界面如下: 2、使用yet another bacnet explorer 用作服务,用于发现设备,界面如下: 3、通过wireshark 抓包如下: (1)、整体包如下: (2)、m…

AI制作30秒疗愈视频,单月变现9万+,这才是顶流赛道!

用AI做短视频,赚流量分成,一个月竟然能月赚9万元,毫不夸张的说已经能够媲美二线城市普通上班族全年收入! 在国外社交平台YouTube油管上的账号,仅仅只用一段30秒的风景空镜头,配上一段纯文字的情感鸡汤&…

【GUI设计】基于图像分割和边缘算法的GUI系统(7),matlab实现

博主简介: 如需获取设计的完整源代码或者有matlab图像代码项目需求/合作,可联系主页个人简介提供的联系方式或者文末的二维码。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于图像分割和边缘算法的GUI系统…

[Redis][Zset]详细讲解

目录 0.前言1.常见命令1.ZADD2.ZCARD3.ZCOUNT4.ZRANGE5.ZREVRANGE6.ZRANGEBYSCORE7.ZPOPMAX8.BZPOPMAX9.ZPOPMIN10.BZPOPMIN11.ZRANK12.ZREVRANK13.ZSCORE14.ZREM15.ZREMRANGEBYRANK16.ZREMRANGEBYSCORE17.ZINCRBY 2.集合间操作1.有序集合的交集操作2.ZINTERSTORE3.有序集合的并…

ROS-noetic自定义action文件进行通信

前言 本系统的系统是Ubuntu20.04的ros-noetic,本文讲述了通过创建 ROS 节点(服务器和客户端)的完整流程,使用 Action 实现从 1 到 N 的累加和,并在计算过程中向客户端发送进度反馈。 整体概述 创建功能包:…

多线程极速导出/9字段10W行只需2秒/导入导出打印组件/功能丰富简单易用

一、功能特点 组件同时集成了导出数据到csv、xls、pdf和打印数据。所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便。同时支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等数据源。提供静态方法…