Dubbo原理与框架设计
Dubbo是常用的开源服务治理型RPC框架,在之前osgi框架下不同bundle之间的方法调用时用到过。其工作原理和框架设计值得开源技术爱好者学习和研究。
一、Dubbo的工作原理
调用关系说明
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
二、Dubbo的框架分层
图例说明:
- 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。
- 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。
- 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。
- 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。
各层说明
- config 配置层:对外配置接口,以
ServiceConfig
,ReferenceConfig
为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类 - proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以
ServiceProxy
为中心,扩展接口为ProxyFactory
- registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为
RegistryFactory
,Registry
,RegistryService
- cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以
Invoker
为中心,扩展接口为Cluster
,Directory
,Router
,LoadBalance
- monitor 监控层:RPC 调用次数和调用时间监控,以
Statistics
为中心,扩展接口为MonitorFactory
,Monitor
,MonitorService
- protocol 远程调用层:封装 RPC 调用,以
Invocation
,Result
为中心,扩展接口为Protocol
,Invoker
,Exporter
- exchange 信息交换层:封装请求响应模式,同步转异步,以
Request
,Response
为中心,扩展接口为Exchanger
,ExchangeChannel
,ExchangeClient
,ExchangeServer
- transport 网络传输层:抽象 mina 和 netty 为统一接口,以
Message
为中心,扩展接口为Channel
,Transporter
,Client
,Server
,Codec
- serialize 数据序列化层:可复用的一些工具,扩展接口为
Serialization
,ObjectInput
,ObjectOutput
,ThreadPool
尝试试用可参考Dubbo安装配置手册
三、其它RPC框架
motan是和Dubbo类似的服务治理型RPC框架,是新浪2016年开源的RPC框架,总体设计和Dubbo类似,相当于Dubbo的精简版,去掉了一些不常用的协议、注册中心、通讯组件等的支持。
虽然Dubbo本身不支持多语言,但它可以很方便的集成其它多语言型RPC框架,如thrift等。
Dubbo原理与框架设计相关推荐
- 【网址收藏】dubbo特新概念及特性、环境搭建、dubbo-monitor安装、rpc原理以及dubbo原理:框架设计、启动解析加载配置信息、服务暴露、服务引用及调用
https://blog.csdn.net/qq_41157588/article/details/106737191
- Dubbo框架设计原理
框架设计 参考文档 http://dubbo.apache.org/zh-cn/docs/dev/design.html 整体分为三层 Business 业务逻辑层,只有一层Service 面向接口编 ...
- Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?
Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 ...
- 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架
优知学院 2019-01-22 18:43:51 之前持续分享的几十期阿里Java面试题中,几乎每次必问Dubbo,比如:"如何从0到1设计一个Dubbo的RPC框架",其实主要考 ...
- 官方文档: Dubbo 框架设计、模块说明、依赖关系
以下内容全文转自 apache 官方 dubbo文档:http://dubbo.apache.org/en-us/docs/dev/design.html 框架设计 图片描述: 浅蓝色背景的左侧区域显 ...
- Dubbo 框架设计与源码解读(配置解析优先级、线程分配、负载均衡、容错方案)
整体框架设计 图例说明: 图中左边淡蓝背景的为服务消费⽅使⽤的接⼝,右边淡绿⾊背景的为服务提供⽅使⽤的接⼝,位于中轴线上的为双⽅都⽤到的接⼝. 图中从下⾄上分为⼗层,各层均为单向依赖,右边的⿊⾊箭头代 ...
- 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现
来自: http://www.cnblogs.com/zuoxiaolong/p/niubi-job-3.html 引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中 ...
- Dubbo原理何源码解析之服务暴露
2019独角兽企业重金招聘Python工程师标准>>> 一.框架设计 在官方<Dubbo 用户指南>架构部分,给出了服务调用的整体架构和流程: 另外,在官方<Dub ...
- 前沪江高级架构师学习笔记分享:分布式框架设计与实现
1.分布式服务框架设计 分布式服务框架一般可以分为以下几个部分, (1)RPC基础层: 包括底层通信框架,如NIO框架.通信协议,序列化和反序列化协议, 以及在这几部分上的封装,屏蔽底层通信细节和序列 ...
最新文章
- 移动端丨-webkit-overflow-scrolling:touch属性导致页面卡住
- winsock2之最简单的win socket编程
- 【转】C++面试题(四)——智能指针的原理和实现
- 安卓 激活应用组件 intent
- RHEL7.2上基于eSpeak实现TTS
- 知识图谱(三)——知识体系构建和知识融合
- lookup无序查找_学习LOOKUP 函数实现无序查询
- ai怎么画路线_使用AI画一个离心管
- mysql前179天_做up主179天的经历
- python 在linux下通过top,和dh命令获得cpu,内存,以及硬盘信息
- hadoop启动mysql服务_Hadoop MySQL 服务自启动配置
- 转:『代码』JS封装 Ajax级联下拉列表
- C语言-数组-读入学生信息统计各分数段人数并打印
- 【Mockplus教程】如何修改手机外壳?
- Go入门案列1:实现一个家庭收支记账系统
- 面试时,被问到职业规划如何作答?
- 机柜风扇 的组成及如何正确安装 机柜散热风扇
- java的反射机制~~!
- IP基础知识 —— “一篇盖全”
- 一.图像处理系统MATLAB实现(GUI界面)
热门文章
- qmenu只在鼠标单击时消失_两种方法解决win10电脑无法使用无线鼠标问题
- 双栈共享存储空间(C++代码实现)
- iptables 基础
- Introspector内省和反射的区别.
- 学习jvm,关于MAT an internal error occurred during:Parsing heap dump from问题
- VA Code编写html(1)
- Android_Layout (一)
- 怎样基于谷歌地图的Server缓存公布Image Service服务
- 微信(QQ)截图时,无法保留鼠标右键菜单选项内容
- 安卓APP_ Fragment(1)—— Fragment概念、基础用法、动态变换、管理栈