Java分布式服务框架Dubbo介绍

目录
  • 1、什么是Dubbo?
  • 2、Dubbo核心组件是?
  • 3、Dubbo的工作原理是?
  • 4、介绍一下Dubbo框架分层?
  • 5、Dubbo支持哪些协议?
    • 1.dubbo默认协议:
    • 2.rmi协议:
    • 3.hessian协议:
    • 4.http协议:
    • 5.webservice协议:
    • 6.thrift协议:
    • 7.redis协议:
    • 8.memcached协议:
  • 6、Dubbo核心配置有哪些?
  • 7、Dubbo有哪几种集群容错方案、哪几种负载均衡策略?
  • 8、Dubbo用到哪些设计模式,简要介绍?
  • 9、Dubbo有哪些注册中心?
  • 10、Dubbo内置了哪几种服务容器?
  • 11、Dubbo有哪几种配置方式?

Dubbo作为国内最出名的分布式服务框架,是Java程序员必备必会的框架之一,更是中高级测试面试过程中经常会问的技术,无论你是否用过,你都必须熟悉。以下总结一些 Dubbo常见的的面试题,希望对大家能有所帮助。

1、什么是Dubbo?

Dubbo是阿里巴巴公司开源的一个高性能分布式服务框架。其核心部分包含:

  • 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

2、Dubbo核心组件是?

  • 生产者(Provider):暴露服务的提供方,可以通过jar或者容器的方式启动服务;
  • 消费者(Consumer):调用远程服务的服务消费方;
  • 注册中心(Registry):服务注册中心和发现中心;
  • 监控中心(Monitor):统计服务和调用次数,调用时间监控中心;
  • 服务容器(Container):服务运行的容器,负责启动、加载,运行服务;

流程:首先生产者将服务注册到注册中心(zk),使用zk持久节点进行存储,消费订阅zk节点,一旦有节点变更,zk通过事件通知传递给消费者,消费可以调用生产者服务。服务与服务之间进行调用,都会在监控中心中,存储一个记录。

3、Dubbo的工作原理是?

  • 服务启动的时候,Provider和Consumer根据配置信息,连接到注册中心Register,分别向注册中心注册和订阅服务;
  • register根据服务订阅关系,返回Provider信息到Consumer,同时Consumer会把Provider信息缓存到本地。如果信息有变更,Consumer会收到来自Register的推送;
  • Consumer生成代理对象,同时根据负载均衡策略,选择一台Provider,同时定时向Monitor记录接口的调用次数和时间信息,拿到代理对象之后,Consumer通过代理对象发起接口调用;
  • Provider收到请求后对数据进行反序列化,然后通过代理调用具体的接口实现;

4、介绍一下Dubbo框架分层?

从大的范围来说,Dubbo分为3层:Business业务逻辑层由我们自己来提供接口和实现还有一些配置信息,RPC层就是真正的RPC调用的核心层,封装整个RPC的调用过程、负载均衡、集群容错、代理,Remoting层则是对网络传输协议和数据转换的封装。

划分到更细的层面,就是10层模式,整个分层依赖由上至下,除开business业务逻辑之外,其他的几层都是SPI机制。10层模式如下:

  • 服务接口层(Service):与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
  • 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过Spring解析配置生成配置类。
  • 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
  • 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
  • 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
  • 监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
  • 远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
  • 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
  • 网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
  • 数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。

5、Dubbo支持哪些协议?

1.dubbo默认协议:

  • 单一 TCP 长连接,Hessian 二进制序列化和 NIO 异步通讯;
  • 适合于小数据包大并发的服务调用和服务消费者数远大于服务提供者数的情况;
  • 不适合传送大数据包的服务;

2.rmi协议:

  • 采用 JDK 标准的 java.rmi.* 实现,阻塞式短连接和 JDK 标准序列化方式;
  • 如果服务接口继承了 java.rmi.Remote 接口,可以和原生 RMI 互操作;
  • 因反序列化漏洞,需升级 commons-collections3 到 3.2.2版本或 commons-collections4 到 4.1 版本;
  • 对传输数据包不限,消费者和传输者个数相当;

3.hessian协议:

  • 底层 Http 通讯,Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现;
  • 可与原生 Hessian 服务互操作;
  • 通讯效率高于 WebService 和 Java 自带的序列化;
  • 参数及返回值需实现 Serializable 接口,自定义实现 List、Map、Number、Date、Calendar 等接口;
  • 适用于传输数据包较大,提供者比消费者个数多,提供者压力较大;

4.http协议:

  • 基于 http 表单的远程调用协议,短连接,json 序列化;
  • 对传输数据包不限,不支持传文件;
  • 适用于同时给应用程序和浏览器 JS 使用的服务;

5.webservice协议:

  • 基于Apache CXF 的frontend-simple和transports-http 实现,短连接,SOAP文本序列化;
  • 可与原生WebService服务互操作;
  • 适用于系统集成、跨语言调用;

6.thrift协议:

  • 对 thrift 原生协议的扩展添加了额外的头信息;
  • 使用较少,不支持传 null 值;

7.redis协议:

  • redis在TCP端口6379上监听到来的连接,客户端连接到来时,Redis服务器为此创建一个TCP连接 ;
  • redis接收由不同参数组成的命令。一旦收到命令,将会立刻被处理,并回复给客户端;

8.memcached协议:

  • 客户端使用TCP链接与服务器通讯,一个运行中的memcached服务器监视一些端口,客户端连接这些端口,发送命令到服务器,读取回应,最后关闭连接;
  • memcached协议中发送的数据分为文本行和自由数据两种;

6、Dubbo核心配置有哪些?

核心配置有:

配置 说明
dubbo:service/  服务配置
dubbo:reference/ 引用配置
dubbo:argument/ 参数配置
dubbo:protocol/ 协议配置
dubbo:registry/ 注册中心配置
dubbo:application/ 应用配置
dubbo:provider/ 提供方配置
dubbo:consumer/ 消费方配置
dubbo:method/ 方法配置
dubbo:module/ 模块配置
dubbo:monitor/ 监控中心配置

7、Dubbo有哪几种集群容错方案、哪几种负载均衡策略?

在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。具体的集群容错方案有:

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

Dubbo内置了4种负载均衡策略:

负载均衡策略 说明
RandomLoadBalance 随机负载均衡,按权重设置随机概率(默认)
RoundRobinLoadBalance 轮询负载均衡,按公约后的权重设置轮询比率
LeastActiveLoadBalance 最少活跃调用数,相同活跃数的随机
ConsistentHashLoadBalance 一致性Hash负载均衡,相同参数的请求总是发到同一个提供者

8、Dubbo用到哪些设计模式,简要介绍?

  • 工厂模式:Provider在export服务时,会调用ServiceConfig的export方法,实现类的获取采用了JDK SPI的机制,想要扩展实现,只需要在classpath下增加文件即可,代码零侵入;
  • 装饰器模式:Dubbo在启动和调用阶段都大量使用了装饰器模式,如ClassLoaderFilter在主功能上添加功能,更改当前线程的ClassLoader是典型的装饰器模式;
  • 观察者模式:Dubbo的Provider启动时,需要与注册中心交互,先注册自己的服务,再订阅自己的服务,订阅时,采用了观察者模式;
  • 动态代理模式:Dubbo扩展JDK SPI的类ExtensionLoader的Adaptive实现是典型的动态代理实现,Dubbo需要灵活地控制实现类,即在调用阶段动态地根据参数决定调用哪个实现类,所以采用先生成代理类的方法,做到灵活的调用。

9、Dubbo有哪些注册中心?

  • Multicast 注册中心:Multicast 注册中心不需要任何中心节点,只要广播地址,就能进行服务注册和发现,基于网络中组播传输实现。
  • Zookeeper 注册中心:基于分布式协调系统 Zookeeper 实现,采用 Zookeeper 的 watch 机制实现数据变更。
  • Redis 注册中心:基于 Redis 实现,采用 key/map 存储,key 存储服务名和类型,map 中 key 存储服务 url,value 服务过期时间。基于 Redis 的发布/订阅模式通知数据变更。
  • Simple 注册中心:Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。

10、Dubbo内置了哪几种服务容器?

  • Spring Container;
  • Jetty Container;
  • Log4j Container;

11、Dubbo有哪几种配置方式?

  • XML 配置文件方式;
  • properties 配置文件方式;
  • annotation 配置方式;
  • API 配置方式;

到此这篇关于Java分布式服务框架Dubbo的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java开发分布式服务框架Dubbo服务引用过程详解

    目录 大致流程 服务引用策略 服务引用的三种方式 服务引入流程解析 总结 大致流程 Provider将服务暴露出来并且注册到注册中心,而Consumer通过注册中心获取Provider的信息,之后将自己封装成一个调用类去与Provider进行交互. 首先需要将所有调用转化为Dubbo中我们熟悉的Invoker,再通过代理类去远程获取服务. 大致流程如下: 服务引用策略 服务的引用和服务的暴露原理相似,都是Spring自定义标签机制解析生成对应的Bean,在之前服务暴露使用到的Provider S

  • java开发分布式服务框架Dubbo原理机制详解

    目录 前言 Dubbo框架有以下部件 Consumer Provider Registry Monitor Container 架构 高可用性 框架设计 服务暴露过程 服务消费过程 前言 在介绍Dubbo之前先了解一下基本概念: Dubbo是一个RPC框架,RPC,即Remote Procedure Call(远程过程调用),相对的就是本地过程调用,在分布式架构之前的单体应用架构和垂直应用架构运用的都是本地过程调用.它允许程序调用另外一个地址空间(通常是网络共享的另外一台机器)的过程或函数,并且

  • java开发分布式服务框架Dubbo暴露服务过程详解

    目录 Dubbo服务暴露机制 前言 服务暴露流程 源码解析 本地暴露 远程暴露 Dubbo服务暴露机制 前言 在进行服务暴露机制的分析之前,必须谈谈什么是URL,在Dubbo服务暴露过程中URL是无处不在的,贯穿了整个过程. 一般情况下,URL指的是统一资源定位符,标准格式如下: protocol://host:port/path?key1=value1&key2=value2 Dubbo就是用这种URL的方式来作为约定的参数类型,服务之间也是用URL来进行交互. Dubbo用URL作为配置总线

  • Java Dubbo框架知识点梳理

    1.Dubbo是什么 Dubbo 是一个分布式.高性能.透明化的 RPC 服务框架,提供服务自动注册.自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成. RPC 指的是远程调用协议,也就是说两个服务器交互数据. 2.Dubbo的由来 互联网的快速发展,Web应用程序的规模不断扩大,一般会经历如下四个发展阶段. 单一应用架构:当网站流量很小时,只需一个应用,将所有功能都部署在一起即可. 垂直应用架构:当访问量逐渐增大,单一应用按照有业务线拆成多个应用,以提升效率.此时,用于加速前端

  • java开发分布式服务框架Dubbo调用过程

    目录 大致流程 调用请求的具体信息 协议 Dubbo协议 序列化器 调用流程图 调用流程源码分析--客户端 模板方法模式 路由和负载均衡 调用的三种方式 调用流程源码分析--服务端 总结 大致流程 客户端根据远程服务的地址,客户端发送请求至服务端,服务端解析信息并找到对应的实现类,进行方法调用,之后将调用结果原路返回,客户端解析响应之后再返回. 调用请求的具体信息 客户端发送给服务端的请求中应该包含哪些具体信息呢? 首先肯定要说明调用的是服务端的哪个接口.方法名.方法参数类型.以及版本号等,将上

  • Java分布式服务框架Dubbo介绍

    目录 1.什么是Dubbo? 2.Dubbo核心组件是? 3.Dubbo的工作原理是? 4.介绍一下Dubbo框架分层? 5.Dubbo支持哪些协议? 1.dubbo默认协议: 2.rmi协议: 3.hessian协议: 4.http协议: 5.webservice协议: 6.thrift协议: 7.redis协议: 8.memcached协议: 6.Dubbo核心配置有哪些? 7.Dubbo有哪几种集群容错方案.哪几种负载均衡策略? 8.Dubbo用到哪些设计模式,简要介绍? 9.Dubbo有

  • Java shiro安全框架使用介绍

    目录 1.shiro安全框架 1.1 什么是权限管理 1.2 什么是身份认证 1.3 什么是授权 1.4 认证授权框架有哪些 2.使用shiro完成认证工作 2.1 shiro中认证的关键对象 2.2 认证流程 2.3 项目代码 2.3.1 依赖 2.3.2 创建ini文件 2.3.3 测试代码 2.4 认证的原理 3.授权 3.1 修改ini文件 3.2 修改代码 1.shiro安全框架 Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证.授权.加密和session会话

  • Dubbo+zookeeper搭配分布式服务的过程详解

    目录 分布式架构: Dubbo 是什么 Dubbo: 思想: 依赖: 分布式架构: 1.当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,前端应用能更快速的响应多变的市场需求. 2.此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键. Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo: 作为分布式架构比较后的框架,同时也是比较容易入手的框架,适合作为分布式的入手框架,下

  • Java 实现分布式服务的调用链跟踪

    目录 为什么要实现调用链跟踪? 如何实现? 第一步,看图.看场景,用户浏览器的一次请求行为所走的路径是什么样的 第二步,实现.不想看代码可直接拉最后看结果和原理 测试一下结果: 为什么要实现调用链跟踪? 随着业务的发展,所有的系统最终都会走向服务化体系,微服务的目的一是提高系统的稳定性,二是提高持续交付的效率,为什么能提高这两项不是今天讨论的内容. 当然这也不是绝对的,如果业务还在MVP验证,团队规模小个人觉得完全没必要微服务化.单体应用是比较好的选择.作者是有经历过从单体应用到1000+应用的

  • 国内分布式框架Dubbo使用详解

    目录 介绍 Dubbo的原理 基本使用 介绍 Dubbo 是一款高性能.轻量级的 Java RPC 框架,由阿里巴巴开源并贡献至 Apache 基金会.它能够提供服务的注册与发现.负载均衡.服务治理等功能,简化了分布式系统的开发过程.下面我们将详细介绍 Dubbo 的原理和使用方法,并附上相关的 Java 代码示例. Dubbo的原理 Dubbo 的核心是一个基于 Java 序列化的远程过程调用(RPC)框架,它的工作流程可以分为如下几个步骤: 服务提供者向注册中心注册自己提供的服务. 服务消费

  • 分布式服务Dubbo+Zookeeper安全认证实例

    前言 由于之前的服务都是在内网,Zookeeper集群配置都是走的内网IP,外网不开放相关端口.最近由于业务升级,购置了阿里云的服务,需要对外开放Zookeeper服务. 问题 Zookeeper+dubbo,如何设置安全认证?不想让其他服务连接Zookeeper,因为这个Zookeeper服务器在外网. 查询官方文档: Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使

随机推荐