1、Dubbo是什么
Dubbo 是阿里巴巴开源的基于java的高性能的RPC分布式服务框架,致力于提高性能和透明化的RPC远程服务调用方案,现在已经成为Apachec项目,主要包括以下三个方面:
- 远程通信
- 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-相应”模式的信息交换
- 集群容错
- 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
- 自动发现
- 基于注册中心目录服务,使服务消费者能动态查找服务提供方,使地址透明,使服务提供方可以平滑增加或者减少机器。
2、为什么要用Dubbo
- 已经经过很多项目的线上考验
- 内部使用了Netty、ZK保证高性能高可用性
- 使用dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活可扩展,是=使前端应用能更快的响应多变的市场需求
3、Dubbo能做什么?
- 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需要简单配置没有任何API侵入。
- 软负载均衡以及容错机制,可以在内网替代F5等硬件负载均衡器,降低成本,减少单点。
- 服务自动注册与发现,不需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑的添加或者删除服务提供者。
4、Dubbo默认使用的是什么通信框架,还有别的选择吗?服务调用时阻塞的吗?
默认使用的是netty框架,还有mina,默认是阻塞的,可以异步调用,没有返回值的可以这么做。
5、Dubbo注册中心使用的是什么?还有别的选择吗?
- 推荐使用Zookkeeper注册中心,还有Multicast注册中心,Redis注册中心,Simple注册中心 这三个不推荐。
- ZK的节点是通过像树一样的结构来进行维护的,并且每一个节点通过路径来标示化访问。
- 除此之外,每一个节点还拥有自身信一些信息,包括:数据、数据长度、创建时间、修改时间等等。
6、默认使用什么序列化框架,你知道的还有哪些
默认使用的是Hessian序列化,还有Duddo、FastJson,java自带序列化。 Hessian是一个采用二进制格式传输的服务框架,相对于传统soap web service,更清量,更快速。
7、Dubbo的核心配置
- dubbo:service/ 服务配置
- dubbo:reference/ 引用配置
- dubbo:protocol/ 协议配置
- dubbo:registry/ 注册中心配置
- dubbo:application/ 应用配置
- dubbo:provider/ 提供方配置
- dubbo:consumer/ 消费方配置
- dubbo:method/ 方法配置
- dubbo:module/ 模块配置
- dubbo:monitor/监控中心配置
- dubbo:argument/参数配置
- 各个配置之间的关系

8、Dubbo里有哪几种节点角色
- Provider:暴露服务的服务提供方
- Consumer:调用远程服务的服务消费方
- Registry:服务注册与发现中心
- Monitor:统计服务的调用次数和调用时间的监控中心
- Container: 服务运行的容器(dubbo容器只是一个简单的main方法,并加载一个简单的Spring容器,用于暴露服务)
- Spring Container
- Jetty Container
- Log4j Container
9、Dubbo的服务注册与发现流程图

- 服务容器负责启动、加载、运行服务提供者
- 服务提供者在启动时,向注册中心注册自己提供的服务
- 服务消费者在启动时,向注册中心订阅自己所需要的服务
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长链接推送变更数据给消费者
- 服务消费者,从服务提供者地址列表中,基于软负载均衡算法,选择一台提供者进行调用,如果调用失败了,在选择另一台调用。
- 服务消费者和提供者,在内存中累积调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
10、在provider上可以配置的consumer端的属性有哪些
- timeout:方法调用超时时间
- Retries:失败重试次数,默认重试2次
- loadbalance:负载均衡算法,默认随机
- actives:消费者端,最大并发调用限制
11、Dubbo有哪几种集群容错方案,默认是哪种?
- FailOver Cluster 失败自动切换,自动重试其他服务器(默认)
- FailFast Cluster 快速失败,立即报错,只发起一次调用
- FailSafe Cluster 失败安全,出现异常时,直接忽略
- FailBack Cluster 失败自动恢复,记录失败请求,定时重发
- Forking Cluster 并行调用多个服务器,只要一个成功即返回
- Broadcast Cluster 广播逐个调用所有提供者,任意一个报错则报错
12、dubbo有哪几种负载均衡策略,默认时哪种?
- Random LoadBalance 随机、按权重设计随机概率(默认)
- RoundRobin LoadBalance 轮询,按公约后的权重设置轮训比率
- LeastActive LoadBalance 最少活跃调用数,相同活跃数的随机
- ConsistentHash LoadBalance 一致性hash,相同的参数的请求总是发送到同一提供者