百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Dubbo面试题

toyiye 2024-05-25 20:11 15 浏览 0 评论

资料收集于网络,做了一些整理修改。

1、Dubbo是什么?

dubbo是一个分布式的服务框架,致力于提高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

简言之,dubbo就是一个服务框架,如果没有分布式的需求,其实不需要用的,只有分布式的时候,才需要dubbo这样的分布式框架,dubbo就是个远程服务调用的分布式框架(告别webservice模式中的wsdl,以服务者与消费者的方式在dubbo上注册)

dubbo可以和spring无缝集成

2、dubbo能干什么,即主要业务场景?

1)透明化的远程方法调用,就像调用本地方法一样,只需简单配置,没有任何API侵入

2)软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点

3)服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者

4)dubbo采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需spring加载dubbo的配置即可,dubbo基于spring的schema扩展进行加载

3、dubbo都支持什么协议,各有什么特点,推荐用哪种?

一、dubbo 默认协议:

单一 TCP 长连接,Hessian 二进制序列化和 NIO 异步通讯

适合于小数据包大并发的服务调用和服务消费者数远大于服务提供者数的情况

不适合传送大数据包的服务

二、rmi 协议:

采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式如果服务接口继承了 java.rmi.Remote 接口,可以和原生 RMI 互操作因反序列化漏洞,需升级 commons-collections3 到 3.2.2版本或 commons-collections4 到 4.1 版本,对传输数据包不限,消费者和传输者个数相当

3、hessian 协议:

底层 Http 通讯,Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现

可与原生 Hessian 服务互操作

通讯效率高于 WebService 和 Java 自带的序列化

参数及返回值需实现 Serializable 接口,自定义实现 List、Map、Number、Date、Calendar 等接口

适用于传输数据包较大,提供者比消费者个数多,提供者压力较大

4、http 协议:

基于 http 表单的远程调用协议,短连接,json 序列化

对传输数据包不限,不支持传文件

适用于同时给应用程序和浏览器 JS 使用的服务

5、webservice 协议:

基于 Apache CXF 的 frontend-simple 和 transports-http 实现,短连接,SOAP文本序列化

可与原生 WebService 服务互操作

适用于系统集成、跨语言调用

6、thrift 协议:

对 thrift 原生协议 [2] 的扩展添加了额外的头信息

使用较少,不支持传 null 值

七、基于 Redis实现的 RPC 协议

八、基于 Memcached 实现的 RPC 协议

4、Dubbo需要 Web 容器吗?

不需要,如果硬要用 Web 容器,只会增加复杂性,也浪费资源。

5、Dubbo内置了哪几种服务容器?

Spring Container

Jetty Container

Log4j Container

Dubbo 的服务容器只是一个简单的 Main 方法,并加载一个简单的 Spring 容器,用于暴露服务。

6、Dubbo的核心功能?

主要就是如下3个核心功能:

Remoting:网络通信框架,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。

Cluster:服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

Registry:服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

7、Dubbo里面有哪几种节点角色?

Provider

Consumer

Registry

Monitor

Container

8、Dubbo的服务注册与发现的流程图是怎样的?

9、Dubbo默认使用什么注册中心,还有别的选择么?

Multicast注册中心: Multicast注册中心不需要任何中心节点,只要广播地址,就能进行服务注册和发现。基于网络中组播传输实现;

Zookeeper注册中心: 基于分布式协调系统Zookeeper实现,采用Zookeeper的watch机制实现数据变更;

redis注册中心: 基于redis实现,采用key/Map存储,住key存储服务名和类型,Map中key存储服务URL,value服务过期时间。基于redis的发布/订阅模式通知数据变更;

Simple注册中心

10、Dubbo有哪几种配置方式?

XML配置

API配置

注解配置

属性配置

10、Dubbo的架构设计?

Dubbo框架设计一共划分了10个层:

服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。

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

服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton。

服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心。

集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心。

监控层(Monitor):RPC调用次数和调用时间监控。

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

信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心。

网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心。

11、Dubbo 核心的配置有哪些?

dubbo:service服务配置

dubbo:method方法配置

dubbo:protocol协议配置

dubbo:provider提供方配置

dubbo:consumer消费方配置

dubbo:application应用名称

dubbo:reference引用配置

dubbo:registry注册中心配置

dubbo:argument参数配置

dubbo:mudule模块配置

dubbo:monitor监控中心配置

12、Dubbo启动时如果依赖的服务不可用会怎样?

Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,默认check=“true”,可以通过check=“false”关闭检查。

13、Dubbo推荐使用什么序列化框架,你知道的还有哪些?

推荐使用Hessian序列化,它的底层就是基于Hessian,还有Dubbo,fastJson,java自带的序列化

14、Dubbo默认使用的是什么通信框架,还有别的选择吗?

默认使用NIO Netty框架, 也是推荐使用的,还有Mina,Grizzly

15、Dubbo有哪几种负载均衡策略,默认是哪种?

随机(默认),轮询,最少活跃数,一致Hash

Random LoadBalance: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高,调用次数越多,分布越均匀;

RoundRobin LoadBalance: 轮循选取提供者策略,平均分布,但是存在请求累积的问题;

LeastActive LoadBalance: 最少活跃调用策略,解决慢提供者接收更少的请求;

ConstantHash LoadBalance: 一致性Hash策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊至其他提供者,避免引起提供者的剧烈变动;

16、Dubbo有哪几种集群容错方案,默认是哪种,服务读写推荐的策略是什么?

Failover Cluster失败自动切换,自动重试其他服务器(默认)

Failfast Cluster快速失败,立即报错,只发起一次调用

Failsafe Cluster失败安全,出现异常时,直接忽略

Failback Cluster失败自动恢复,记录失败请求,定时重发

Failking Cluster并行调用多个服务器,只要一个成功及返回

Failcast Cluster广播逐个调用所有的提供者,任意一个报错则报错

读操作建议使用Failover失败自动切换,写操作建议使用Failfst快速失败,并一次调用失败就立即报错

17、Dubbo支持服务多协议吗?

Dubbo支持配置多个协议,在不同服务上支持不同协议或者同一服务上同时支持多协议。

18、Dubbo可以对结果进行缓存吗?

可以,Dubbo提供了声明式缓存,用于加速热门数据的访问速度,以减少用户加载缓存的工作量

19、Dubbo服务之间的调用是阻塞的吗?

默认是同步等待结果阻塞的,支持异步调用。

20、Dubbo支持分布式事务吗?

支持(2018)但不成熟生产环境不可使用

21、Dubbo支持服务降级吗?

支持(2018)但不成熟生产环境不可使用

22、Dubbo的通信采用什么?

Dubbo底层采用Socket进行通信

23、服务提供者能实现失效踢出是什么原理?

服务失效踢出基于Zookeeper的临时节点原理

24、Dubbo超时时间怎样设置?服务调用超时问题怎么解决?

Dubbo超时时间设置有两种方式:

服务提供者端设置超时时间,在Dubbo的用户文档中,推荐如果能在服务端多配置就尽量多配置,因为服务提供者比消费者更清楚自己提供的服务特性。

服务消费者端设置超时时间,如果在消费者端设置了超时时间,以消费者端为主,即优先级更高。因为服务调用方设置超时时间控制性更灵活。如果消费方超时,服务端线程不会定制,会产生警告。

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

25、Dubbo的管理控制台能做什么?

路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡等管理功能

26、Dubbo在安全机制方面是如何解决?

Dubbo通过Token令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。Dubbo还提供服务黑白名单,来控制服务所允许的调用方。

27、是否看过Dubbo的代码底层原理?具体有哪些?

SPI

28、Dobbo的调用流程是什么?

29、Dobbo支持动态添加服务吗?

支持

30、注册了多个同一样的服务,如果检测指定的某一个服务呢?

可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。

31、当一个服务接口有多种实现怎么办?

可以用group属性来分,服务提供方和消费方都可以指定同一个group即可。

32、Dubbo telnet 命令能做什么?

进行服务治理

33、Dubbo如何优雅停机?

Dubbo是通过jdk的shutDownHook来完成优雅停机的,所以如果使用Kill-9 PID等强制关闭指令,是不会执行优雅停机的,只是通过kill PID时,才会执行。

34、如何解决服务调用链过长的问题?

Dubbo可以使用Pinpoint和Apache Skywalking实现分布式服务追踪

35、Dubbo必须依赖的包有哪些?

Dubbo必须依赖JDK,其他可选

36、Dubbo服务暴露的过程?

Dubbo会在Spring实例化完bean之后,在刷新容器最后一步发送ContextRefreshEvent事件的时候,通知实现了ApplicationListener的serviceBean类进行回调onApplicationEvent事件方法,Dubbo会在这个方法中调用ServiceBean父类ServiceConfig的export方法,而该方法真正实现了服务的发布

37、服务上线怎么兼容旧版本?

可以使用版本号(version)过度,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念类似

38、为什么需要服务治理?

过多的服务URL配置困难

负载均衡分配节点压力过大的情况下也需要部署集群

服务依赖混乱,启动顺序不清晰

过多服务导致性能指标分析难度较大,需要监控

39、Dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信么?

可以的,启动dubbo时,消费者会从zookeeper拉取注册的生产者的地址接口等数据,缓存在本地。

每次调用时,按照本地存储的地址进行调用。

40、Dubbo和dubbox的区别?

Dubbox是继Dubbo停止维护后,当当网基于dubbo做的一个拓展应用,dubbox 基于 dubbo 上做了一些扩展,如加了服务可 restful 调用,更新了开源组件等。

41、Dubbo与Spring的关系?

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

42、你还了解过其他的分布式框架吗?

springcloud,facebook的Thrift,teitter的finagle

43、Dubbo能集成Spring Cloud吗?

可以的

44.Dubbo和Spring Cloud的关系?

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

45、Dubbo 和 Spring Cloud 有什么区别?

1、Dubbo主要分为服务注册中心,服务提供者,服务消费者,还有管控中心;

相比起Dubbo简单的四个模块,SpringCloud则是一个完整的分布式一站式框架,他有着一样的服务注册中心,服务提供者,服务消费者,管控台,断路器,分布式配置服务,消息总线,以及服务追踪等;

在性能上来说,由于Dubbo底层是使用Netty这样的NIO框架,是基于TCP协议传输的,配合以Hession序列化完成RPC。而SpringCloud是基于Http协议+rest接口调用远程过程的,相对来说,Http请求会有更大的报文,占的带宽也会更多。

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

而SpringCloud是基于Http协议+Rest接口调用远程过程的通信,相对来说,Http请求会有更大的报文,占的带宽也会更多。但是REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖。

46、你觉得用dubbo好还是用Spring Cloud好?

没有好坏,只有适合 我倾向于Dubbo ,Spring Cloud的更新速度太快,配置太繁琐,外国人的东西总归不如自己人的东西顺手,我喜欢Spring Cloud,方便,功能齐全

47、在使用中遇到的那些问题?

dubbo的设计目的是为了满足高并发小数据量的rpc调用,在大数据下的性能表现并不好,建议使用rmi或者http协议

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码