互联网Java工程师面试题·Dubbo篇·第一弹

目录

1、为什么要用 Dubbo?

2、Dubbo 的整体架构设计有哪些分层?

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

4、服务调用是阻塞的吗?

5、一般使用什么注册中心?还有别的选择吗?

6、默认使用什么序列化框架,你知道的还有哪些?

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

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

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

10、说说核心的配置有哪些?

11、Dubbo 推荐用什么协议?

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

13、画一画服务注册与发现的流程图?

14、Dubbo 集群容错有几种方案?

16、Dubbo 使用过程中都遇到了些什么问题?

17、Dubbo Monitor 实现原理?


1、为什么要用 Dubbo

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

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

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

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

默认也推荐使用 netty 框架,还有 mina

4、服务调用是阻塞的吗?

默认是阻塞的,可以异步调用,没有返回值的可以这么做。
Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。

5、一般使用什么注册中心?还有别的选择吗?

推荐使用 Zookeeper 作为注册中心,还有 Redis Multicast Simple 注册中心,但不推荐。

6、默认使用什么序列化框架,你知道的还有哪些?

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

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

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

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

采用多版本开发,不影响旧版本。

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

可以结合 zipkin 实现分布式服务追踪。

10、说说核心的配置有哪些?

配置
配置说明
dubbo:service
服务配置
dubbo:reference
引用配置
dubbo:protocol
协议配置
dubbo:application
应用配置
dubbo:module
模块配置
dubbo:registry
注册中心配置
dubbo:monitor
监控中心配置
dubbo:provider
提供方配置
dubbo:consumer
消费方配置
dubbo:method
方法配置
dubbo:argument
参数配置

11Dubbo 推荐用什么协议?

dubbo:// (推荐)
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://

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

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

13、画一画服务注册与发现的流程图?

互联网Java工程师面试题·Dubbo篇·第一弹_第1张图片


14Dubbo 集群容错有几种方案?

集群容错方案
说明
Failover Cluster
失败自动切换,自动重试其它服务器(默认)
Failfast Cluste
快速失败,立即报错,只发起一次调用
Failsafe Cluster
失败安全,出现异常时,直接忽略
Failback Cluster
失败自动恢复,记录失败请求,定时重发
Forking Cluster
并行调用多个服务器,只要一个成功即返回
Broadcast Cluster
广播逐个调用所有提供者,任意一个报错则报错

16Dubbo 使用过程中都遇到了些什么问题?

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

17Dubbo Monitor 实现原理?

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

要想了解更多:

千题千解·Java面试宝典_时光の尘的博客-CSDN博客

互联网Java工程师面试题·Dubbo篇·第一弹_第2张图片

你可能感兴趣的:(千题千解·Java面试宝典,java,开发语言,dubbo,面试)