来源: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.服务注册与发现的流程图?
8.Dubbo核心的配置有哪些?
配置 | 配置说明 | 解释 |
---|---|---|
服务配置 | 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 | |
引用配置 | 用于创建一个远程服务代理,一个引用可以指向多个注册中心 | |
协议配置 | 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 | |
应用配置 | 用于配置当前应用信息,不管该应用是提供者还是消费者 | |
模块配置 | 用于配置当前模块信息,可选 | |
注册中心配置 | 用于配置连接注册中心相关信息 | |
监控中心配置 | 用于配置连接监控中心相关信息,可选 | |
提供方配置 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 | |
消费方配置 | 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 | |
方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 | |
参数配置 | 用于指定方法参数配置 |
不同粒度配置的覆盖关系
以 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:
方法级优先,接口级次之,全局配置再次之。
如果级别一样,则消费方优先,提供方次之。
其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。
(建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置)。
理论上 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方法,从而实现了服务发布。
更多精彩?
在公众号对话框输入以下关键词 查看更多优质内容! 大数据 | Java | 1024 | 电子书 | 速查表 Python进阶 | 面试 | 手册 | 成神 | 思想 | 小程序 命令行 | 人工智能 | 软件测试 | Web前端 | Python
扫码关注我们
获取更多学习资料
视频 | 面试 | 技术 | 电子书
程序员编程:javaje
小编微信:BW22266688
我知道你“在看”
![e104029d5904fa13f5938cb11c9625ab.gif](https://img-blog.csdnimg.cn/img_convert/e104029d5904fa13f5938cb11c9625ab.gif)