Dubbo 高频面试题及真实口语化答案_第1页
Dubbo 高频面试题及真实口语化答案_第2页
Dubbo 高频面试题及真实口语化答案_第3页
Dubbo 高频面试题及真实口语化答案_第4页
Dubbo 高频面试题及真实口语化答案_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Dubbo高频面试题及真实口语化答案(2026最新)一、Dubbo基础认知(初级必问)1、简单说下你对Dubbo的理解,它是干嘛的?Dubbo是阿里开源的一款高性能、轻量级的JavaRPC远程调用框架,核心就是解决分布式项目中服务和服务之间的调用问题。传统单体项目所有代码在一起,方法直接调用就行;拆分微服务后,各个服务部署在不同服务器,没法直接调用,Dubbo就是用来实现跨机器、跨服务的方法调用,让远程调用像调用本地方法一样简单。同时它不只是单纯的调用工具,还自带服务注册发现、负载均衡、容错、限流、服务治理整套能力,是国内最主流的微服务RPC框架。2、Dubbo的核心架构角色有哪些?各自作用?总共五个核心角色,面试常问,记准职责就行:Provider(服务提供者):暴露服务的一方,部署在服务端,把自己的接口注册到注册中心,供别人调用。Consumer(服务消费者):调用远程服务的一方,启动时去注册中心订阅需要的服务,然后发起远程调用。Registry(注册中心):中间人,核心是注册+发现。提供者注册服务地址,消费者拉取服务列表,常用Nacos、Zookeeper。Monitor(监控中心):监控服务调用数据,比如调用次数、成功率、响应时间、异常数,用于排查问题、服务治理。Container(容器):服务运行容器,一般就是Spring容器,负责启动、加载、运行Dubbo服务。3、Dubbo和SpringCloud的区别?什么时候用Dubbo?很多人搞混,核心区别:Dubbo是RPC调用,SpringCloud是HTTP调用协议不同:Dubbo默认Dubbo协议(TCP长连接、二进制),速度快、性能高;SpringCloud默认RestTemplate/Feign(HTTP短连接、文本协议),性能弱一些。侧重点不同:Dubbo偏向服务治理、高性能服务调用;SpringCloud是整套微服务生态,包含网关、配置、熔断、链路追踪等全套组件。适用场景:内部服务之间频繁调用、对性能要求高的场景,用Dubbo;对外接口、跨语言调用、快速搭微服务架构,用SpringCloud。现在企业大多是SpringCloud+Dubbo混合架构,用SpringCloud做生态治理,用Dubbo做内部高性能RPC调用。4、Dubbo支持哪些协议?常用的有哪些?主流三种,工作中最常用前两个:Dubbo协议(默认):TCP长连接、NIO异步、二进制序列化,性能最高,适合内部服务高频调用,单连接多复用。HTTP协议:基于HTTP,通用性强、跨语言,但是性能差,适合对接前端、第三方系统。gRPC协议:谷歌开源,序列化压缩率高,适合跨语言、高并发场景,新版本Dubbo重点支持。二、核心原理与调用流程(中级核心)1、Dubbo完整的调用流程,说一遍?我按项目启动+调用两个阶段说,通俗易懂:第一步:服务提供者启动服务启动后,扫描@DubboService注解的接口,把接口信息、服务器IP、端口、协议封装好,注册到注册中心,同时开启端口监听,等待消费者调用。第二步:服务消费者启动消费者启动时,扫描@DubboReference注解,去注册中心订阅对应的服务接口,注册中心把存活的服务节点列表推送给消费者,消费者本地缓存服务列表。第三步:发起远程调用消费者调用接口方法时,Dubbo通过动态代理拦截请求,通过负载均衡从本地缓存的节点列表选一个服务节点,通过TCP协议发送请求。第四步:响应返回提供者接收请求、执行业务逻辑,返回结果,消费者接收结果、解析返回,完成一次远程调用。第五步:监控上报调用的耗时、结果、异常等数据异步上报到监控中心。2、Dubbo动态代理原理是什么?Dubbo消费者之所以能像调本地方法一样调远程接口,核心就是动态代理。消费者注入的接口,并不是真正的实现类,而是Dubbo生成的代理对象。当我们调用接口方法时,会被代理拦截,不会走本地方法,而是把方法名、参数、接口信息封装成RPC请求,通过网络发给服务提供者,拿到结果后返回给业务代码。Dubbo默认用Javassist动态代理,性能比JDK代理、Cglib都高,无需生成class文件,速度快。3、Dubbo的序列化方式有哪些?默认是什么?远程调用必须序列化对象,Dubbo默认使用Hessian2序列化。常用序列化方式对比:Hessian2(默认):二进制序列化,速度快、体积小、兼容性好,适合Java服务内部调用。JSON序列化:可读性高、跨语言,但体积大、性能差,不适合高频调用。ProtoBuf:压缩率极高、性能强,适合高并发、跨语言场景,配置稍复杂。工作中基本不用改默认序列化,除非需要跨语言对接才换ProtoBuf。4、Dubbo长连接和短连接的区别?为什么默认长连接?Dubbo协议默认单组长连接、多连接复用。短连接是每次调用都建立连接、用完关闭,三次握手四次挥手损耗大,高并发下性能极差。长连接是服务启动后只建立一次TCP连接,后续所有请求都复用这个连接,省去频繁创建销毁连接的开销,所以Dubbo内部高频调用性能远高于HTTP短连接。三、负载均衡&集群容错(面试高频重点)1、Dubbo有哪几种负载均衡策略?各自场景?一共5种,必须熟记,面试必考:随机(Random)默认:随机选节点,概率均匀,简单高效,适合节点性能一致的场景,是Dubbo默认策略。轮询(RoundRobin):按顺序轮流调用每个节点,适合所有服务器配置一致、压力均匀的场景。最少活跃调用(LeastActive):优先选当前请求少、响应快的节点,自动避开慢节点,生产最常用,容错性最好。一致性哈希(ConsistentHash):相同参数的请求永远路由到同一个节点,适合需要会话保持、缓存复用的场景。加权轮询(WeightRoundRobin):给性能好的高配机器加大权重,分配更多请求,适配机器配置不一致的集群。2、Dubbo集群容错策略有哪些?工作中用哪个?集群容错是指调用失败后Dubbo的处理策略,核心5种:Failover(默认)失败重试:调用失败后,自动重试其他节点,默认重试2次。适合读多写少、幂等的查询接口,生产默认使用。Failfast快速失败:调用失败直接报错,不重试。适合写入、下单、扣款等非幂等接口,防止重复操作。Failsafe失败安全:调用失败直接忽略,返回空值,不抛异常。适合日志、统计、埋点等不重要的非核心接口。Failback失败自动恢复:失败后异步记录请求,后台定时重试。适合消息通知、异步更新场景。Forking并行调用:同时调用多个节点,只要一个成功就返回,适合高可用、实时性极高的核心接口,资源消耗高。工作经验总结:查询接口用默认Failover,写入接口必须手动改成Failfast,防止重试导致数据重复。3、Dubbo重试会带来什么问题?怎么解决?核心问题:非幂等接口重试会造成重复下单、重复扣款、重复数据插入,引发数据脏数据、业务bug。解决方案:写入、更新、删除接口,手动指定容错策略为Failfast,关闭重试;所有业务接口保证幂等性,用唯一订单号、请求ID做去重;调整重试次数,非核心接口可设置重试次数为0。4、Dubbo超时时间怎么配置?超时会重试吗?Dubbo超时默认1000ms,支持全局配置、接口配置、方法配置,方法级别优先级最高。重点:超时属于调用失败,在默认Failover策略下,会触发重试。很多线上问题都是因为接口慢、超时重试,导致请求雪崩,所以核心写入接口一定要关闭重试。四、注册中心&服务治理(进阶面试)1、Dubbo支持哪些注册中心?Zookeeper和Nacos区别?主流Zookeeper、Nacos,老项目多用ZK,新项目基本Nacos。核心区别:ZK侧重一致性,适合分布式协调,但是性能一般、重启卡顿、心跳机制笨重;Nacos侧重服务注册+配置中心,性能更高、心跳更灵敏、支持动态配置,适配微服务架构,更轻量。现在企业选型:Dubbo注册中心优先Nacos。2、Dubbo服务注册、发现、心跳机制原理?注册:提供者启动,将服务元数据注册到注册中心临时节点。心跳:提供者定时发送心跳包,告诉注册中心自己存活。如果注册中心长时间收不到心跳,判定服务宕机,剔除节点。发现:消费者订阅服务,注册中心推送最新节点列表,消费者本地缓存,后续调用不走注册中心,直接直连服务节点,性能极高。核心优势:注册中心只负责通知,不参与实际调用,不会成为性能瓶颈。3、Dubbo服务下线的流程?会不会有脏节点?正常优雅下线:服务关闭时,主动向注册中心注销服务,注册中心立刻删除节点,推送更新给消费者,消费者立马剔除本地缓存节点,不会有问题。异常宕机(断电、kill-9):无法主动注销,依靠心跳机制,超时后注册中心自动剔除,短暂时间内消费者本地会有脏节点,会调用失败,依靠容错策略重试其他节点,不影响业务。4、Dubbo的静默退出(优雅停机)怎么做的?Dubbo优雅停机机制:服务收到关闭信号后,先停止接收新请求,等待正在执行的请求处理完毕,再注销服务、关闭端口,避免正在执行的请求被中断,防止业务异常。五、线上问题、调优与避坑(高薪面试重点)1、Dubbo常见的线上问题有哪些?你怎么解决的?整理工作中最常遇到的4个问题:超时重试导致重复请求:写入接口改为Failfast,接口做幂等去重;服务调用雪崩、慢接口拖垮服务:开启Dubbo限流、设置超时时间、隔离快慢接口;注册中心脏节点导致调用失败:依赖心跳剔除,配合消费者重试机制,定期清理无效节点;序列化异常、参数不匹配:保证入参实体类字段一致,版本迭代兼容旧字段。2、Dubbo怎么实现限流?Dubbo自带原生限流,无需额外组件,两种常用方式:并发限流(actives):限制单个接口最大并发数,超过直接拒绝,防止接口被打垮;连接数限流:限制单个服务最大连接数,避免单机连接过多。高并发场景配合Sentinel限流熔断,稳定性更高。3、Dubbo版本兼容怎么处理?Dubbo支持多版本共存,升级迭代时非常有用。同一个接口可以部署v1、v2两个版本服务,消费者可以指定调用对应版本,实现灰度发布、平滑升级,不用停机改代码,避免全量发布风险。4、Dubbo为什么不建议用过大的对象传输?Dubbo基于TCP长连接+二进制序列化,传输超大对象会出现两个问题:序列化、反序列化耗时过长,导致接口超时、阻塞;占用缓冲区过大,容易引发网络粘包、缓冲区溢出,导致调用异常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论