程序员

持续输出面试题系列之Dubbo篇

2020-08-09  本文已影响0人  我可能是个假开发

开篇介绍

大家好,我是Java最全面试题库的提裤姐,今天这篇是JavaEE面试题系列的第九篇,主要总结了Dubbo相关的问题;在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。

Dubbo是什么?

Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册自动发现等高效服务治理方案。

Dubbo 的整体架构设计有哪些分层?

Dubbo有哪些协议?

Dubbo配置有哪些?

Dubbo 的连接方式有哪些?

Dubbo 的客户端和服务端有三种连接方式,分别是:

说说Dubbo暴露过程?

1、ServiceConfig 类拿到对外提供服务的实际类 ref(如:HelloWorldImpl)
2、通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个 AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化
3、接下来就是 Invoker 转换到 Exporter 的过程:

Dubbo有哪些均衡负载的方法?

1、随机模式。按权重设置随机概率。在一个截面上碰撞的概率较高,但调用越大分布越均匀
2、轮询模式。按公约后的权重设置轮询比例。但存在响应慢的服务提供者会累积请求
3、最少活跃调用数。响应快的提供者接受越多请求,响应慢的接受越少请求
4、一致hash。根据服务提供者ip设置hash环,携带相同的参数总是发送的同一个服务提供者,若服务挂了,则会基于虚拟节点平摊到其他提供者上

Dubbo有哪些集群容错方案?

1、Failover Cluster:失败重试 当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试
2、Failfast Cluster:快速失败 当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常这种模式用于非幂等性的写操作。
3、Failsafe Cluster:失败安全 当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作。
4、Failback Cluster:失败自动恢复 当服务消费端用服务出现异常后,在后台记录失败的请求,并按照一定的策略后期再进行重试。这种模式通常用于消息通知操作。
5、Forking Cluster:并行调用 当消费方调用一个接口方法后,Dubbo Client会并行调用多个服务提供者的服务,只要一个成功即返回。这种模式通常用于实时性要求较高的读操作,但需要浪费更多服务资源
6、Broadcast Cluster:广播调用 当消费者调用一个接口方法后,Dubbo Client会逐个调用所有服务提供者,任意一台调用异常则这次调用就标志失败。这种模式通常用于通知所有提供者更新缓存或日志等本地资源信息。

jdk SPI和dubbo SPI的区别?

jdk SPI SPI :
全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。SPI是一种动态替换发现的机制, 比如有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。我们经常遇到的就是java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,mysql和postgresql都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。
在jdk6里面引进的一个新的特性ServiceLoader,从官方的文档来说,它主要是用来装载一系列的service provider。而且ServiceLoader可以通过service provider的配置文件来装载指定的service provider。当服务的提供者,提供了服务接口的一种实现之后,我们只需要在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入

dubbo SPI:
Dubbo对JDK SPI进行了扩展,对服务提供者配置文件中的内容进行了改造,由原来的提供者类的全限定名列表改成了KV形式的列表,这也导致了Dubbo中无法直接使用JDK ServiceLoader,所以,与之对应的,在Dubbo中有ExtensionLoader,ExtensionLoader是扩展点载入器,用于载入Dubbo中的各种可配置组件

Dubbo服务注册与发现的流程?

Dubbo中 zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?

可以通信;
启动 dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;
注册中心对等集群,任意一台宕机后,将会切换到另一台注册中心;全部宕机后,服务的提供者和消费者仍能通过本地缓存通讯。服务提供者无状态,任一台宕机后,不影响使用;服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复;挂掉是不要紧的,但前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的。

上一篇下一篇

猜你喜欢

热点阅读