Java面试题Dubbo

Dubbo 

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

标签 

用途 

解释 

dubbo:service/ 

服务配

 

用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 

dubbo:reference/ 

引用配

 

用于创建一个远程服务代理,一个引用可以指向

多个注册中心 

dubbo:protocol/ 

协议配

 

用于配置提供服务的协议信息,协议由提供方指

定,消费方被动接受 

dubbo:application

/ 

应用配

 

用于配置当前应用信息,不管该应是提供者还

是消费者 

dubbo:module/ 

模块配

 

用于配置当前模块信息,可选 

dubbo:registry/ 

注册中

心配置 

用于配置连接注册中心相关信 

dubbo:monitor/ 

监控中

心配置 

用于配置连接监控中心相关信息,可 

dubbo:provider/ 

提供方

配置 

 ProtocolConfig  ServiceConfig 某属

有配置时,采用此缺省值,可 

dubbo:consumer/ 

消费方

配置 

 ReferenceConfig 某属性没有配置时,采用

此缺省值,可选 

dubbo:method/ 

方法配

 

用于 ServiceConfig  ReferenceConfig 

方法级的配置信息 

dubbo:argument 

参数配

 

用于指定方法参数配置 

2Dubbo 支持哪协议,每种协议的应用场景,优缺点? 

  dubbo:单一长连接和 NIO 异步通讯,适大并发小数据量的服务调用,以及消费者远 大于提供者。传输协议 TCP,异步, Hessian 序列化; 

   rmi:采用 JDK  rmi 协议实现,传参数和返回参数对象需要实Serializable 接口,使用 java 序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和 提供者个数差不多,可传文件,传输协议 TCP。多个短连接 TCP 协议传输,同步传 输,适用常规的远程服务调用和 rmi 互操作在依赖低版本的 Common-Collections 包, java 序列化存安全漏洞; 

   http:基于 Http 表单提交的远程调用协议,使用 Spring  HttpInvoke 实现。多个短 连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消费者,需要给应用程序和 浏览器 JS 调用; 

   webservice:基 WebService 的远程调协议,集 CXF ,提供和原生  WebService 的互操。多个短连接,基 HTTP 传输,同步传输,适用系统集成和跨语 言调用; 

   hessian:集成 Hessian 服务,基于 HTTP 通讯,采用 Servlet 服务,Dubbo   Jetty 作为服务器时认实现,提供 Hession 服务互操作。多短连接,同步 HTTP 输, Hessian 序列,传入参数较大,提供者大于消费者,提供者压力较大,可传文件 

   Redis:基于 Redis 现的 RPC 协议 

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

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

4RPC 架构有哪些件? 

一个基本RPC架构里面应该至少包含以4个组件: 

  客户端(Client: 务调用方(服务消费者); 

   客户端存根(Client Stub: 存放服务端地信息,将客户端的请求参数数据信息打包成 网络消息,再通过网络传输发送给服务端; 

   服务端存根(Server Stub: 接收客户端发过来的请求消息并进行解包,然后再调用 本地服务进行处理; 

  服务端(Server: 务的真正提供者。 

具体调用过程 

  服务消费者(client户端)通过调用本地服务的方式调用需要消费的服务; 

   客户端存根(client stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成 能够进行网络传输的消息体; 

   客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端; 

   服务端存根(server stub)收到消息后进行解码(反序列化操作); 

   服务端存根(server stub)根据解码结果调用本地的服务进行相关处理; 

   本地服务执行具体业务逻辑并将处理结果返回给服务端存根server stub); 

   服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消 费方; 

   客户端存根(client stub)接收到消息,并进行解码(反序列化); 

   服务消费方得到最终结果。 

5Dubbo 服务调是阻塞的吗? 

默认是阻塞的,可以异步调用,没有返回值的可以这么做 

6Dubbo 核心功有哪些? 

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

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

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

7Dubbo 服务器册与发现的流程? 

  服务容Container责启动,加载,运行服务提供者。 

  服务提供Provider在启动时,向注册中心注册自己提供的服务 

 

 

服务消费Consumer在启动时,向注册中心订阅自己所需的服务。 

注册中Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长

连接推送变更数据给消费者。 

  服务消费Consumer,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行 调用,如果调用失败,再选另一台调用。 

  服务消费Consumer和提供Provider在内存中累计调用次数和调用时间,定时每 分钟发送一次统计数据到监控中Monitor 

8Dubbo Monitor 实现原理? 

Consumer 端在发起用之前会先 filter provider 端在接到请求时也是先 filter 链,然后才进真正的业务逻辑处理。默认情况下,在 consumer  provider  filter 链中都会有 Monitorfilter 

   MonitorFilter  DubboMonitor 发送数  

   DubboMonitor 据进行聚合后(默认聚 1min 中的统计数)暂存到
ConcurrentMap<Statistics, AtomicReference> statisticsMap然后使用一个含 3  个线程(线程名字:DubboMonitorSendTimer)的线程池每隔 1min 钟,调  SimpleMonitorService 遍历发送 statisticsMap 中的统计数据,每发送完毕一个,就重 置当前的 Statistics  AtomicReference  

   SimpleMonitorService 将这些聚合数据塞入 BlockingQueue queue 中(队列大写  100000  

   SimpleMonitorService 使用一个后台线程(线程名为:
DubboMonitorAsyncWriteLogThread)将 queue 中的数据写文件(该线程以死循环 的形式来写)  

   SimpleMonitorService 还会使用一个含有 1 个线程(线程名字:
DubboMonitorTimer)的线程池每隔 5min 钟,将文件中的统计数据画成图 

9Dubbo  Spring Cloud 有什么关系? 

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

10Dubbo  Spring Cloud 有什么哪些区别? 

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

 

 Spring Cloud 是基于 Http 协议 Rest 接口调用远程过程的通信,相对来说 Http 请求会

有更大的报文,占的带宽也会更多。但是 REST 相比 RPC 更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适,至于注重通信速度还是方便灵活性,具体情况具体考虑 

11Dubbo 有哪些册中心? 

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

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

  Redis 注册中心:基于 Redis 实现,采用 key/map 存储,key 服务名和类型map   key 存储服务 urlvalue 服务过期时间 Redis 的发/阅模式通知数据变更。 

  Simple 注册中心 

  推荐使用 Zookeeper 作为注册中心  

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

可以通讯。启动 Dubbo 时,消费者会从 Zookeeper 拉取注册的产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用 

13Dubbo 集群提了哪些负载均衡策略? 

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

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

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

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

14Dubbo 的集群错方案有哪些? 

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

  Failfast Cluster:快失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操 作,比如新增记录。 

 

 

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

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

作。 

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

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

15Dubbo 超时设有哪些方式? 

Dubbo 超时设置有种方式 

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老歪不歪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值