• 互联网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、画一画服务注册与发现的流程图?


    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博客

  • 相关阅读:
    第六章 图论 16 AcWing 1558. 加油站
    uniCloud云开发入门以及对传统开发方式的思考
    Kafka3.0.0版本——消费者(手动提交offset)
    VScode配置 github 上传代码
    将 JavaScript 字符串隐藏为数字的 4 种简单方法以及如何删除浮点数上的尾随零
    基于java的乡村图书馆管理系统的设计与实现毕业设计-附源码191505
    腾讯课堂批量下载视频
    php判断和过滤get或者post的html标签,防止跨站点脚本(XSS),链接注入,框架注入等攻击
    【tokio】异步编程
    【算法集训专题攻克篇】第二十篇之二叉搜索树
  • 原文地址:https://blog.csdn.net/MANONGDKY/article/details/133542692