Dubbo学习笔记

1,041 阅读5分钟

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,相同的参数的请求总是发送到同一提供者