您现在的位置是:主页 > news > 湖南企业网站营销设计/百度问问首页

湖南企业网站营销设计/百度问问首页

admin2025/5/30 5:00:58news

简介湖南企业网站营销设计,百度问问首页,上海网站建设公司电,网站开发持续更新文章目录Dubbo能做什么?Dubbo的总体的调用过程Dubbo 支持哪些协议Dubbo中都用到哪些设计模式Dubbo内置了哪几种服务容器Dubbo 核心的配置有哪些Dubbo有哪几种集群容错方案,默认是哪种?Dubbo有哪几种负载均衡策略,默认是哪种Dubbo默…

湖南企业网站营销设计,百度问问首页,上海网站建设公司电,网站开发持续更新文章目录Dubbo能做什么?Dubbo的总体的调用过程Dubbo 支持哪些协议Dubbo中都用到哪些设计模式Dubbo内置了哪几种服务容器Dubbo 核心的配置有哪些Dubbo有哪几种集群容错方案,默认是哪种?Dubbo有哪几种负载均衡策略,默认是哪种Dubbo默…

文章目录

      • Dubbo能做什么?
      • Dubbo的总体的调用过程
      • Dubbo 支持哪些协议
      • Dubbo中都用到哪些设计模式
      • Dubbo内置了哪几种服务容器
      • Dubbo 核心的配置有哪些
      • Dubbo有哪几种集群容错方案,默认是哪种?
      • Dubbo有哪几种负载均衡策略,默认是哪种
      • Dubbo默认使用的是什么通信框架,还有别的选择吗
      • Dubbo的注册中心有哪些
      • 服务暴露的流程是怎么样的
      • 服务引用的流程是怎么样的
      • 说说Dubbo的分层
      • 服务提供者能实现失效踢出是什么原理
      • 为什么要通过代理对象通信
      • 怎么设计一个RPC框架
      • 聊聊Dubbo SPI机制
      • Dubbo的SPi和JAVA的SPI有什么区别

Dubbo能做什么?

在这里插入图片描述
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

  • 远程通讯:dubbo-remoting模块, 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo的总体的调用过程

在这里插入图片描述
在这里插入图片描述

Dubbo 支持哪些协议

在这里插入图片描述
在这里插入图片描述

Dubbo中都用到哪些设计模式

在这里插入图片描述

责任链模式:
责任链模式在Dubbo中发挥的作用举足轻重,就像是Dubbo框架的骨架。Dubbo的调用链组织是用责任链模式串连起来的。责任链中的每个节点实现Filter接口,然后由ProtocolFilterWrapper,将所有Filter串连起来。Dubbo的许多功能都是通过Filter扩展实现的,比如监控、日志、缓存、安全、telnet以及RPC本身都是。

观察者模式:
Dubbo中使用观察者模式最典型的例子是RegistryService。消费者在初始化的时候回调用subscribe方法,注册一个观察者,如果观察者引用的服务地址列表发生改变,就会通过NotifyListener通知消费者。此外,Dubbo的InvokerListener、ExporterListener 也实现了观察者模式,只要实现该接口,并注册,就可以接收到consumer端调用refer和provider端调用export的通知。

修饰器模式:
Dubbo中还大量用到了修饰器模式。比如ProtocolFilterWrapper类是对Protocol类的修饰。在export和refer方法中,配合责任链模式,把Filter组装成责任链,实现对Protocol功能的修饰。其他还有ProtocolListenerWrapper、 ListenerInvokerWrapper、InvokerWrapper等。

工厂方法模式:
CacheFactory的实现采用的是工厂方法模式。CacheFactory接口定义getCache方法,然后定义一个AbstractCacheFactory抽象类实现CacheFactory,并将实际创建cache的createCache方法分离出来,并设置为抽象方法。这样具体cache的创建工作就留给具体的子类去完成。

抽象工厂模式:
ProxyFactory及其子类是Dubbo中使用抽象工厂模式的典型例子。ProxyFactory提供两个方法,分别用来生产Proxy和Invoker(这两个方法签名看起来有些矛盾,因为getProxy方法需要传入一个Invoker对象,而getInvoker方法需要传入一个Proxy对象,看起来会形成循环依赖,但其实两个方式使用的场景不一样)。AbstractProxyFactory实现了ProxyFactory接口,作为具体实现类的抽象父类。然后定义了JdkProxyFactory和JavassistProxyFactory两个具体类,分别用来生产基于jdk代理机制和基于javassist代理机制的Proxy和Invoker。

适配器模式:
为了让用户根据自己的需求选择日志组件,Dubbo自定义了自己的Logger接口,并为常见的日志组件(包括jcl, jdk, log4j, slf4j)提供相应的适配器。并且利用简单工厂模式提供一个LoggerFactory,客户可以创建抽象的Dubbo自定义Logger,而无需关心实际使用的日志组件类型。在LoggerFactory初始化时,客户通过设置系统变量的方式选择自己所用的日志组件,这样提供了很大的灵活性。

代理模式:
Dubbo consumer使用Proxy类创建远程服务的本地代理,本地代理实现和远程服务一样的接口,并且屏蔽了网络通信的细节,使得用户在使用本地代理的时候,感觉和使用本地服务一样。

Dubbo内置了哪几种服务容器

Spring Container

Jetty Container

Log4j Container

Dubbo 核心的配置有哪些

在这里插入图片描述

Dubbo有哪几种集群容错方案,默认是哪种?

在这里插入图片描述

Dubbo有哪几种负载均衡策略,默认是哪种

在这里插入图片描述

Dubbo默认使用的是什么通信框架,还有别的选择吗

Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。

Dubbo的注册中心有哪些

在这里插入图片描述

服务暴露的流程是怎么样的

在这里插入图片描述
1.通过ServiceConfig解析标签,创建dubbo标签解析器来解析dubbo的标签,容器创建完成之后,触发ContextRefreshEvent事件回调开始暴露服务

2.通过proxyFactory.getInvoker方法,并利用javassist或DdkProxyFactory来进行动态代理,将服务暴露接口封装成invoker对象,里面包含了需要执行的方法的对象信息和具体的URL地址。

3.再通过DubboProtocol的实现把包装后的invoker转换成exporter,

4.然后启动服务器server,监听端口

5.最后RegistryProtocol保存URL地址和invoker的映射关系,同时注册到服务中心

在这里插入图片描述

服务引用的流程是怎么样的

1.首先客户端根据config文件信息从注册中心订阅服务,首次会全量缓存到本地,后续的更新会监听动态更新到本地。

2.之后DubboProtocol根据provider的地址和接口信息连接到服务端server,开启客户端client,然后创建invoker

3.之后通过invoker为服务接口生成代理对象,这个代理对象用于远程调用provider,至此完成了服务引用在这里插入图片描述

说说Dubbo的分层

在这里插入图片描述
business业务逻辑层由我们自己来提供接口和实现还有一些配置信息
RPC层就是真正的RPC调用的核心层,封装整个RPC的调用过程、负载均衡、集群容错、代理
remoting则是对网络传输协议和数据转换的封装。

Service和Config两层可以认为是API层,主要提供给API使用者,使用者只需要配置和完成业务代码就可以了。

后面所有的层级是SPI层,主 要提供给扩展者使用主要是用来做Dubbo的二次开发扩展功能。

再划分到更细的层面,就是图中的10层模式。

服务提供者能实现失效踢出是什么原理

服务失效踢出基于Zookeeper的临时节点原理。

Zookeeper中节点是有生命周期的,具体的生命周期取决于节点的类型,节点主要分为持久节点(Persistent)和临时节点(Ephemeral) 。

为什么要通过代理对象通信

在这里插入图片描述
其实主要就是为了将调用细节封装起来,将调用远程方法变得和调用本地方法一样简单,还可以做一些其他方面的增强,比如负载均衡,容错机制,过滤操作,调用数据的统计。

怎么设计一个RPC框架

在这里插入图片描述
1.首先我们得需要一个注册中心,去管理消费者和提供者的节点信息,这样才会有消费者和提供才可以去订阅服务,注册服务。

2.当有了注册中心后,可能会有很多个provider节点,那么我们肯定会有一个负载均衡模块来负责节点的调用,至于用户指定路由规则可以使一个额外的优化点。

3.具体的调用肯定会需要牵扯到通信协议,所以需要一个模块来对通信协议进行封装,网络传输还要考虑序列化。

4.当调用失败后怎么去处理?所以我们还需要一个容错模块,来负责失败情况的处理。

5.其实做完这些一个基础的模型就已经搭建好了,我们还可以有更多的优化点,比如一些请求数据的监控,配置信息的处理,日志信息的处理等等。

聊聊Dubbo SPI机制

SPI(Service Provider Interface),是一种服务发现机制,其实就是将结构的实现类写入配置当中,在服务加载的时候将配置文件独处,加载实现类,这样就可以在运行的时候,动态的帮助接口替换实现类。

Dubbo的SPI其实是对java的SPI进行了一种增强,可以按需加载实现类之外,增加了 IOC 和 AOP 的特性,还有自适应扩展机制。

SPI在dubbo应用很多,包括协议扩展、集群扩展、路由扩展、序列化扩展等等。

Dubbo对于文件目录的配置分为了三类。

  • 1.META-INF/services/ 目录:该目录下的 SPI 配置文件是为了用来兼容 Java SPI 。
  • 2.META-INF/dubbo/ 目录:该目录存放用户自定义的 SPI 配置文件。
  • 3.META-INF/dubbo/internal/ 目录:该目录存放 Dubbo 内部使用的 SPI 配置文件。

Dubbo的SPi和JAVA的SPI有什么区别

Java Spi

  • Java SPI 在查找扩展实现类的时候遍历 SPI 的配置文件并且将实现类全部实例化

Dubbo Spi

1,对 Dubbo 进行扩展,不需要改动 Dubbo 的源码
2,延迟加载,可以一次只加载自己想要加载的扩展实现。
3,增加了对扩展点 IOC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。
4,Dubbo 的扩展机制能很好的支持第三方 IoC 容器,默认支持 Spring Bean。