Dubbo是常用的开源服务治理型RPC框架,在之前osgi框架下不同bundle之间的方法调用时用到过。其工作原理和框架设计值得开源技术爱好者学习和研究。

一、Dubbo的工作原理

调用关系说明
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

二、Dubbo的框架分层

图例说明:

  • 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。
  • 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。
  • 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。
  • 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。

各层说明

  • config 配置层:对外配置接口,以 ServiceConfigReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  • proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory
  • registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactoryRegistryRegistryService
  • cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 ClusterDirectoryRouterLoadBalance
  • monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactoryMonitorMonitorService
  • protocol 远程调用层:封装 RPC 调用,以 InvocationResult 为中心,扩展接口为 ProtocolInvokerExporter
  • exchange 信息交换层:封装请求响应模式,同步转异步,以 RequestResponse 为中心,扩展接口为 ExchangerExchangeChannelExchangeClientExchangeServer
  • transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 ChannelTransporterClientServerCodec
  • serialize 数据序列化层:可复用的一些工具,扩展接口为 SerializationObjectInputObjectOutputThreadPool

尝试试用可参考Dubbo安装配置手册

三、其它RPC框架

motan是和Dubbo类似的服务治理型RPC框架,是新浪2016年开源的RPC框架,总体设计和Dubbo类似,相当于Dubbo的精简版,去掉了一些不常用的协议、注册中心、通讯组件等的支持。

虽然Dubbo本身不支持多语言,但它可以很方便的集成其它多语言型RPC框架,如thrift等。

Dubbo原理与框架设计相关推荐

  1. 【网址收藏】dubbo特新概念及特性、环境搭建、dubbo-monitor安装、rpc原理以及dubbo原理:框架设计、启动解析加载配置信息、服务暴露、服务引用及调用

    https://blog.csdn.net/qq_41157588/article/details/106737191

  2. Dubbo框架设计原理

    框架设计 参考文档 http://dubbo.apache.org/zh-cn/docs/dev/design.html 整体分为三层 Business 业务逻辑层,只有一层Service 面向接口编 ...

  3. Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?

    Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 ...

  4. 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架

    优知学院 2019-01-22 18:43:51 之前持续分享的几十期阿里Java面试题中,几乎每次必问Dubbo,比如:"如何从0到1设计一个Dubbo的RPC框架",其实主要考 ...

  5. 官方文档: Dubbo 框架设计、模块说明、依赖关系

    以下内容全文转自 apache 官方 dubbo文档:http://dubbo.apache.org/en-us/docs/dev/design.html 框架设计 图片描述: 浅蓝色背景的左侧区域显 ...

  6. Dubbo 框架设计与源码解读(配置解析优先级、线程分配、负载均衡、容错方案)

    整体框架设计 图例说明: 图中左边淡蓝背景的为服务消费⽅使⽤的接⼝,右边淡绿⾊背景的为服务提供⽅使⽤的接⼝,位于中轴线上的为双⽅都⽤到的接⼝. 图中从下⾄上分为⼗层,各层均为单向依赖,右边的⿊⾊箭头代 ...

  7. 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现

    来自: http://www.cnblogs.com/zuoxiaolong/p/niubi-job-3.html 引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中 ...

  8. Dubbo原理何源码解析之服务暴露

    2019独角兽企业重金招聘Python工程师标准>>> 一.框架设计 在官方<Dubbo 用户指南>架构部分,给出了服务调用的整体架构和流程: 另外,在官方<Dub ...

  9. 前沪江高级架构师学习笔记分享:分布式框架设计与实现

    1.分布式服务框架设计 分布式服务框架一般可以分为以下几个部分, (1)RPC基础层: 包括底层通信框架,如NIO框架.通信协议,序列化和反序列化协议, 以及在这几部分上的封装,屏蔽底层通信细节和序列 ...

最新文章

  1. 移动端丨-webkit-overflow-scrolling:touch属性导致页面卡住
  2. winsock2之最简单的win socket编程
  3. 【转】C++面试题(四)——智能指针的原理和实现
  4. 安卓 激活应用组件 intent
  5. RHEL7.2上基于eSpeak实现TTS
  6. 知识图谱(三)——知识体系构建和知识融合
  7. lookup无序查找_学习LOOKUP 函数实现无序查询
  8. ai怎么画路线_使用AI画一个离心管
  9. mysql前179天_做up主179天的经历
  10. python 在linux下通过top,和dh命令获得cpu,内存,以及硬盘信息
  11. hadoop启动mysql服务_Hadoop MySQL 服务自启动配置
  12. 转:『代码』JS封装 Ajax级联下拉列表
  13. C语言-数组-读入学生信息统计各分数段人数并打印
  14. 【Mockplus教程】如何修改手机外壳?
  15. Go入门案列1:实现一个家庭收支记账系统
  16. 面试时,被问到职业规划如何作答?
  17. 机柜风扇 的组成及如何正确安装 机柜散热风扇
  18. java的反射机制~~!
  19. IP基础知识 —— “一篇盖全”
  20. 一.图像处理系统MATLAB实现(GUI界面)

热门文章

  1. qmenu只在鼠标单击时消失_两种方法解决win10电脑无法使用无线鼠标问题
  2. 双栈共享存储空间(C++代码实现)
  3. iptables 基础
  4. Introspector内省和反射的区别.
  5. 学习jvm,关于MAT an internal error occurred during:Parsing heap dump from问题
  6. VA Code编写html(1)
  7. Android_Layout (一)
  8. 怎样基于谷歌地图的Server缓存公布Image Service服务
  9. 微信(QQ)截图时,无法保留鼠标右键菜单选项内容
  10. 安卓APP_ Fragment(1)—— Fragment概念、基础用法、动态变换、管理栈