Dubbo架构原理

框架图

Dubbo架构原理_第1张图片

Dubbo架构原理_第2张图片

dubbo 的整体设计原则 - 微内核 +插件

什么是微内核?
微内核即最小化内核,内核只负责插件的组装,不带任何功能逻辑,所有功能都由可替换的插件实现。
比如:
Spring,OSGI,JMX,ServiceLoader等都是常见的微核容器,它们负责基于统一规则的组装,但不带功能逻辑。

什么是SPI ,java.util.serviceloader

SPI
全称为(ServiceProviderInterface),
是JDK内置的一种服务提供发现机制,jdk通过ServiceLoader类实现spi机制的服务查找功能。
它是一种动态替换发现的机制,举个例子来说,有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。
ServiceLoader会遍历所有jar查找META-INF/services/接口全限定名xxx中的文件。

Dubbo架构原理_第3张图片

dubbo 为什么不用JDK自带的spi

JDK的SPI的缺点

1、一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时会导致这个应用初始化耗时,没有延迟加载功能。
2、如果扩展点加载失败,那么会连扩展点的名称都无法获取到。比如:
JDK标准的ScriptEngine,通过getName()获取脚本类型的名称,但如果RubyScriptEngine因为所依赖的jruby.jar不存在,导致
RubyScriptEngine类加载失败,这个失败原因被吃掉了,和ruby对应不起来,当用户执行ruby脚本时,会报不支持ruby,而不是真正失败的原因。
3、JDK的spi要用for循环,然后if判断才能获取到指定的spi对象,所以spi实现数量多的时候性能将成为问题

Dubbo的改进

dubbo的SPI改进提高了性能,增加了功能:

1、拓展点增加了缓存,提高了性能。(使用ConcurrentMap,ExtensionLoader>EXTENSION_LOADERS作缓存)
2、增加了spi的默认值
3、增加了通过key的形式获取拓展点。(因为使用了ConcurrentMap,直接通过key获取Value)
4、增加了Ioc和AOP功能

Dubbo架构原理_第4张图片
Dubbo架构原理_第5张图片
Dubbo架构原理_第6张图片

dubbo 的线程模型

Dubbo架构原理_第7张图片
Dubbo的线程模型在dubbo的服务端,在传输完成接收到客户端的请求之后,是通过Dispatcher分发请求到线程池处理之后,
返回结果给客户端,当然,也可以直接由Dispatcher处理并返回结果

你可能感兴趣的:(dubbo)