常见dubbo面试题及答案

一、服务上线怎么不影响旧版本?

采用多版本开发(dubbo:service配置version),不影响旧版本。

二、Dubbo如何做负载均衡?

<dubbo:service interface="..."loadbalance="random"/>

<dubbo:reference interface="..."loadbalance=" random "/>

Dubbo内置了4种负载均衡策略:

1)RandomLoadBalance随机负载均衡:是Dubbo的默认负载均衡策略。

2)RoundRobinLoadBalance轮询负载均衡:轮询依次。

3)LeastActiveLoadBalance最少活跃调用数:相同活跃数的随机。活跃数指调用前后计数差。使慢的 Provider 收到更少请求,因为越慢的 Provider 的调用前后计数差会越大。

4)ConsistentHashLoadBalance一致性哈希负载均衡:相同参数的请求总是落在同一台机器上。

二、Dubbo如何做限流降级?

1)dubbo提供了mock配置,可以很好的实现dubbo服务降级

<dubbo:reference id="xxxService" interface="com.x..service.xxxxService" check="false" mock="return fail" />

2)整合Sentinel

三、Dubbo如何优雅停机?

线上服务不要轻易的kill -9,可进行kill触发应用的钩子程序,做相关的资源清理,如果一直关闭不掉,最终可以通过kill -9执行。

Dubbo 可以通过 JDK 的 ShutdownHook 来完成优雅停机的,使用Kill pid命令干掉进程。

四、Dubbo如何实现异步调用的?

1)api注入时添加异步调用标示

@Reference(interfaceClass=xxx.class, async-true)

2)启动类开启异步调用

@EnableAsycn

3)异步调用的接口添加异步调用代码

RpcContext.getContext.future()

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

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

SpringCloud是基于Http协议+rest接口调用远程过程的通信。

Http请求会有更大的报文,占的带宽也会更多。

REST相比RPC更为灵活,不存在代码级别的强依赖。

  Dubbo SpringCloud
服务注册中心 Zookeeper  Spring Cloud Netfix Eureka
服务调用方式 RPC  REST API
服务监控 Dubbo-monitor Spring Boot Admin
熔断器 不完善 Spring Cloud Netflix Hystrix
服务网关 Spring Cloud Netflix Zuul
分布式配置 Spring Cloud Config
服务跟踪 Spring Cloud Sleuth
数据流 Spring Cloud Stream
批量任务 Spring Cloud Task
信息总线 Spring Cloud Bus

六、dubbo都支持什么协议,推荐用哪种?

dubbo(推荐):单一长连接、NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况

hessian:短连接,http,适合于页面传输,文件传输,或与原生hessian服务互操作

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

WebService:适用于系统集成,跨语言调用

RMI 协议:适用于常规远程服务方法调用,与原生RMI服务互操作

七、Dubbo需要 Web 容器吗?

不需要,dubbo服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源。 

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

 Spring Container  Jetty Container  Log4j Container

九、Dubbo里面有哪些角色?

registry:注册中心

consumer:消费者

provider:服务提供者

container:容器

monitor:监控

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

zookeeper,还有 Redis、Multicast、Simple 注册中心,但不推荐

十一、在 Provider 上可以配置的 Consumer 端的属性有哪些?

1)timeout:调用超时

2)retries:失败重试次数(默认重试 2 次 )

3)loadbalance:负载均衡算法,默认随机

4)actives 消费者端,最大并发调用限制

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

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

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

推荐使用Hessian,还有Duddo、FastJson、Java自带序列化。

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

Dubbo 默认使用 Netty 框架(推荐),另外内容还集成有Mina、Grizzly

十五、Dubbo有哪几种集群容错方案,默认是哪种?

1)Failover Cluster默认

失败自动切换,当出现失败,重试其它服务器(retries 重试次数)。通常用于读操作,但重试会带来更长延迟。

2)Failfast Cluster

快速失败,只发起一次调用,失败立即报错,通常用于写操作。

3)Failsafe Cluster

失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

4)Failback Cluster

失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

5)Forking Cluster

并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

6)Broadcast Cluster

广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。

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

<dubbo:reference cache="true" />

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

默认是阻塞的,可以异步调用。

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

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

十九、说说 Dubbo 服务暴露的过程

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

二十、同一个服务多个注册的情况下可以直连某一个服务吗?

可以通过修改配置点对点直连,也可以通过 telnet 直接某个服务。

发布了43 篇原创文章 · 获赞 0 · 访问量 3899

猜你喜欢

转载自blog.csdn.net/zhangdx001/article/details/105201344