热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Java面试Dubbo[一]

本文由编程笔记#小编为大家整理,主要介绍了Java面试-Dubbo[一]相关的知识,希望对你有一定的参考价值。来源:
本文由编程笔记#小编为大家整理,主要介绍了Java面试-Dubbo [ 一 ]相关的知识,希望对你有一定的参考价值。


来源:segmentfault.com/u/jack3021


Dubbo篇

1.Dubbo是什么?

Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架。


2.为什么使用Dubbo?

因为是阿里开源项目,国内很多互联网公司都在使用,已经经过了很多线上考验。

内部使用Netty、Zookeeper,保证了高性能高可用性。

使用dubbo可以将核心业务抽取出来,作为独立的服务,用于提高业务复用灵活扩展。


3.dubbo支持什么协议,推荐用哪种?



  • dubbo://(推荐)


  • rmi://


  • hessian://


  • http://


  • webservice://


  • thrift://


  • memcached://


  • redis://


  • rest://



4.Dubbo需要 Web 容器吗?

不需要,如果硬要用 Web 容器,只会增加复杂性,也浪费资源。


5.Dubbo内置了哪几种服务容器?



  • Spring Container


  • Jetty Container


  • Log4j Container


Dubbo的服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。


6. Dubbo里面有几种节点角色?































节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

7.服务注册与发现的流程图?

Java面试-Dubbo [ 一 ]


8.Dubbo核心的配置有哪些?



































































配置 配置说明 解释
服务配置 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心
引用配置 用于创建一个远程服务代理,一个引用可以指向多个注册中心
协议配置 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
应用配置 用于配置当前应用信息,不管该应用是提供者还是消费者
模块配置 用于配置当前模块信息,可选
注册中心配置 用于配置连接注册中心相关信息
监控中心配置 用于配置连接监控中心相关信息,可选
提供方配置 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选
消费方配置 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选
方法配置 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息
参数配置 用于指定方法参数配置

不同粒度配置的覆盖关系

以 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:



  • 方法级优先,接口级次之,全局配置再次之。


  • 如果级别一样,则消费方优先,提供方次之。


其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。

Java面试-Dubbo [ 一 ]

(建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置)。

理论上 ReferenceConfig 中除了interface这一项,其他所有配置项都可以缺省不配置,框架会自动使用ConsumerConfig,ServiceConfig, ProviderConfig等提供的缺省配置。

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

1)timeout:方法调用超时

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

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

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


9. Dubbo有哪几种集群容错方案?



































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

10.Dubbo有哪几种负载均衡策略?



























负载均衡策略 说明
Random LoadBalance 随机,按权重设置随机概率(默认)
RoundRobin LoadBalance 轮训,按公约后的权重设置轮询比率
LeastActive  LoadBalance 最少活跃调用数,相同或约束的随机
ConsistentHash LoadBalance 一致性Hash,相同参数的请求总是发送到同一提供者

11.当一个服务接口有多种实现时怎么做?

可以使用group属性来分组,服务提供方和消费方都指定同一个group即可。


12.Dubbo服务之间的调用是阻塞的吗?

默认是同步等待结果阻塞的,支持异步调用。

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


13.说说 Dubbo 服务暴露的过程

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










更多精彩

推荐阅读
author-avatar
mobiledu2502900917
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有