dubbo框架原理介绍

    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 调用数据流

   dubbo框架原理介绍_第1张图片

其中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

你可能感兴趣的:(java,rpc,DUBBO,SOA)