前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一句话介绍Dubbo架构原理

一句话介绍Dubbo架构原理

作者头像
MickyInvQ
发布2020-09-27 15:20:41
4550
发布2020-09-27 15:20:41
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

框架图

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

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

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

什么是SPI ,java.util.serviceloader

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

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

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<Class<?>,ExtensionLoader<?>>EXTENSION_LOADERS作缓存) 2、增加了spi的默认值 3、增加了通过key的形式获取拓展点。(因为使用了ConcurrentMap,直接通过key获取Value) 4、增加了Ioc和AOP功能

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

dubbo 的线程模型

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 框架图
  • dubbo 的整体设计原则 - 微内核 +插件
  • 什么是SPI ,java.util.serviceloader
  • dubbo 为什么不用JDK自带的spi
    • JDK的SPI的缺点
      • Dubbo的改进
      • dubbo 的线程模型
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档