文档章节

dubbo框架原理介绍

robin-yao
 robin-yao
发布于 2015/08/08 14:01
字数 599
阅读 4586
收藏 111

    RPC服务框架设计无非涉及四个大方面:

            IO模型:NIO , BIO 

            序列化方式:Java原生,FastJson,Hessian,Jackson等等

            线程模型:单线程处理每个socket连接  , 采用reactor 模式  

            代理对象的生成:JDK 动态代理,Javassist等字节码增强工具。

   

    dubbo 核心机制

            Bean加载机制(指代业务代码类):采用Spring Schema 机制 对具体的业务类来进行配置  http://my.oschina.net/robinyao/blog/478050

            插件扩展机制:采用类似JDK SPI思想来对框架具体实现机制来进行配置,不依赖sping。

    dubbo 代理

            JDK动态代理,或Javassist字节码技术生产代理,把本地方法调用转为远程调用,即通过DubboInvoker 来触发方法调用。

            代理工厂会提供一个生成ProxyInvoker方法(AbstractProxyInvoker),来供上层触发调用。

    dubbo 远程调用

            dubbo远程调用协议包括默认的dubbo协议,HessianProtocol,HttpProtocol,InjvmProtocol,MemcachedProtocol等等。   

            这里以dubbo协议来说明。

            DubboProtocol协议采用netty协议来进行网络传输。

                   客户端:  把请求内容封装在RpcInvocatioin中, 通过调用Invoker(DubboInvoker)上的invoke方法,

            然后由ExchangeClient调用具体的NettyTransporter发起网络调用。NettyTransporter具体封装Netty通讯,包括服务提供端监听服务,客户端发起请求。

                   服务提供端:在服务启动的时候,服务器端会把具体的服务通过ProxyFactory生产Invoker(AbstractProxyInvoker)供exporter调用,该invoker 直接可以在proxy(指代服务提供端本地proxy)对象上对服务的具体实现调用。每个服务url对应一个exporter,通过该exporter 可以得到invoker

    

    dubbo 调用数据流

   

其中Invocation 封装了调用的方法名 参数 参数类型等基本信息。

Invoker是发起调用的实体,Invoker(DubboInvoker)实现类会封装ExchangeClient发起远程调用(包含异步,同步,oneWay方式)。ExchangeClient实现对channel,心跳等封装。远程调用通讯方式包含netty,mina,grizzly,zookeeper,p2p 实现方式。

在服务提供端  ExchangeServer,ExchangeHandler 负责对所有连接的Channel管理:心跳,添加,移除 channel,及采用哪种具体protocol进行具体接收发送消息。

ExchangeClient,ExchangeServer,ExchangeHandler 这一层是对下边具体的通讯层包装。


未完待续。。。。(dubbo 负载 ,集群,监控)

        http://my.oschina.net/robinyao/blog/489487

© 著作权归作者所有

共有 人打赏支持
robin-yao
粉丝 164
博文 54
码字总数 61436
作品 0
杭州
私信 提问
加载中

评论(3)

robin-yao
robin-yao

引用来自“王爵”的评论

楼主图什么工具画的?
从dubbo官网上的一个ppt 直接截图下来的
王爵nice
王爵nice
楼主图什么工具画的?
hotsmile
hotsmile
继续!!!
shuaiqiyu/happylifeplat-tcc

happylifeplat-tcc 碧桂园旺生活平台解决分布式事务方案之tcc开源框架。基于java语言来开发(JDK1.8),支持dubbo,springcloud等rpc框架进行分布式事务。 因为文件名太长,大家在拉取代码的...

shuaiqiyu
2017/12/21
0
0
1991wangliang/tx-lcn

LCN分布式事务框架v4.0 "LCN并不生产事务,LCN只是本地事务的搬运工" 官方网址 www.txlcn.org 框架特点 支持各种基于spring的db框架 兼容SpringCloud、Dubbo、motan 使用简单,低依赖,代码完...

1991wangliang
2017/09/22
0
0
架构设计:系统间通信(45)——阶段性问题记录

到此为止 《架构设计:系统间通信》专题就暂时告一段落了。这边文章笔者用于暂时记录这个专题中还需要补充的内容,并在后续的整理中足一补上: 退避算法和退避规则,以及其应用场景 系统间通...

yinwenjie
2016/08/11
0
0
LCN 分布式事务 - tx-lcn

LCN分布式事务 "LCN并不生产事务,LCN只是本地事务的搬运工" 框架介绍 LCN分布式事务框架是一款事务协调性的框架,框架本身并不创建事务,只是对本地事务做协调控制。因此该框架与其他第三方...

oswl
2017/09/22
302
3
探索分布式服务框架Dubbo9:Dubbo整体架构与实现原理

Dubbo剖析-整体架构分析 一、前言 工欲善其事,必先利其器,前面通过几篇文章简单的介绍了如何使用Dubbo搭建一个简单的分布式系统,在接下来的的一段时间就来研究Dubbo原理设计,本文作为原理...

你的猫大哥
2018/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

生产者消费者问题(PV操作)

一、明确定义 要理解生产消费者问题,首先应弄清PV操作的含义:PV操作是由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减...

shzwork
20分钟前
0
0
重新认识网络通信协议

OSI网络分层 应用层 http, smtp,pop3这些都属于应用层协议 为用户的应用程序提供服务 表示层 确保一个系统的应用层发送的信息被另一个系统的应用层接收到 会话层 通过传输层建立数据传输的通...

最胖的瘦子
31分钟前
0
0
【转】分布式数据流的轻量级异步快照

本篇翻译自论文:Lightweight Asynchronous Snapshots for Distributed Dataflows,Flink的容错快照模型即来源于该论文。原文地址:https://arxiv.org/pdf/1506.08603.pdf 分布式数据流的轻量...

yiduwangkai
33分钟前
0
0
java使用反射机制设置私有成员变量的值

写一个方法:public void setProperty(Objectobj, String propertyName, Object value){}, 此方法可将obj对象中名为propertyName的属性的值设置为value。(这里不知道obj对象的propertyNam...

群星纪元
39分钟前
0
0
用 Tapestry 的方式在页面模板中加入注释

<span jwcid="$remove$">这里是注释</span>

LeoXu
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部