Dubbo:我有阿里爸爸的保驾护航,再不了解我就out啦!

栏目: 后端 · 发布时间: 5年前

内容简介:还没关注?快动动手指!

还没关注?

快动动手指!

聊技术、论职场!

为IT人打造一个“有温度”的 狸猫技术窝

一、Dubbo 整体架构

Dubbo:我有阿里爸爸的保驾护航,再不了解我就out啦!

dubbo官方的这个图很复杂,但是一开始没有必要深入细节,下面我们简单讲解主要模块。

其中 Service 和 Config 层为 API ,对应服务提供方来说是使用ServiceConfig来代表一个要发布的服务配置对象。

对应服务消费方来说ReferenceConfig代表了一个要消费的服务的配置对象。可以直接初始化配置类,也可以通过 spring 解析配置生成配置类。

其它各层均为 SPI ,SPI意味着下面各层都是组件化可以被替换的,这也是dubbo比较好的一点,主要功能组件都可以插件化替换。

dubbo增强了JDK中的SPI功能,在dubbo中其它各层都是使用扩展点进行提供服务的。

dubbo增强的SPI增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点,并且不会一次性实例化扩展点的所有实现类

这避免了有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源的情况,增强的SPI是在具体用某一个实现类时候才进行实例化。

后续会具体讲解增强的SPI的实现原理。

proxy 服务代理层 :扩展接口为 ProxyFactory,dubbo实现的SPI主要JavassistProxyFactory(默认使用)和JdkProxyFactory,用来对服务提供方和服务消费方的服务进行代理。

registry 注册中心层 :封装服务地址的注册与发现,扩展接口为 Registry , RegistryService

Dubbo提供的扩展接口实现为ZookeeperRegistry,RedisRegistry,MulticastRegistry,DubboRegistry。

扩展接口RegistryFactory,dubbo提供的扩展接口实现DubboRegistryFactory,DubboRegistryFactory,RedisRegistryFactory,ZookeeperRegistryFactory。

cluster 路由层 :封装多个提供者的路由及负载均衡,并桥接注册中心,扩展接口为 Cluster , Directory , Router ,LoadBalance。

monitor 监控层 :RPC 调用次数和调用时间监控,扩展接口为 MonitorFactory , Monitor , MonitorService。

protocol 远程调用层 :封将 RPC 调用,扩展接口为 Protocol , Invoker , Exporter。

exchange 信息交换层 :封装请求响应模式,同步转异步,扩展接口为 Exchanger , ExchangeChannel ,ExchangeClient , ExchangeServer

transport 网络传输层 :抽象 mina 和 netty 为统一接口扩展接口为 Channel , Transporter , Client , Server , Codec

serialize 数据序列化层

:可复用的一些工具,扩展接口为 Serialization ,

ObjectInput , ObjectOutput , ThreadPool

关于dubbo扩展点一个简单的例子:
以扩展 Dubbo 的协议为例,在协议的实现 jar 包内放置文本文件: METAINF/dubbo/com.alibaba.dubbo.rpc.Protocol ,内容为:

myprotocol=com.alibaba.user.MyProtocol

MyProtocol内容如下:

package com.alibaba.user;
import com.alibaba.dubbo.rpc.Protocol;
public class MyProtocol implemenets Protocol {
// ...
}

配置模块中的配置
Dubbo 配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。

比如:


 
   
    
  <dubbo:protocol name="myprotocol" />
  
    

二、远程调用细节

3.1 服务提供者暴露一个服务的详细过程

Dubbo:我有阿里爸爸的保驾护航,再不了解我就out啦!

首先 ServiceConfig 类拿到对外提供服务的实际类 ref(如:UserServiceImpl)

然后通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化。

接下来就是 Invoker 转换到 Exporter 的过程。Dubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程,上图中的红色部分。

Dubbo 协议的 Invoker 转为 Exporter 发生在 DubboProtocol 类的

export 方法

它主要是打开创建一个Netty Server 侦听服务,并接收客户端发来的各种请求,通讯细节由 Dubbo 自己实现,然后注册服务到服务注册中心。

3.2 服务消费者消费一个服务的详细过程

Dubbo:我有阿里爸爸的保驾护航,再不了解我就out啦!

  • 首先 ReferenceConfig 类的 init 方法调用 Protocol 的 refer 方法生

    成 Invoker 实例(如上图中的红色部分),这是服务消费的关键。

  • 接下来把Invoker 转换为客户端需要的接口(如:UserServiceBo)。

  • dubbo协议的invoker转换为客户端需要的接口是发生在DubboProtocol的refer方法

  • 他主要是创建一个netty client 链接服务提供者,通讯细节由 Dubbo 自己实现。

三、总结

本文简单的介绍了dubbo整体架构,后续具体介绍dubbo增强的spi的实现,服务提供方如何发布服务。

比如何时如何创建netty Server来监听服务消费者的链接,何时如何注册服务到服务治理中心;dubbo的filter链如何构建;服务消费方如何消费服务,何时创建netty client….

END

本文作者:ifeve

本文来源:

http://ifeve.com/dubbo-framework/

本文 转载自 并发编程网 – ifeve.com

长按下图二维码,即刻关注【 狸猫技术窝

阿里、京东、美团、字节跳动

顶尖技术专家 坐镇

为IT人打造一个 “有温度” 的技术窝!

Dubbo:我有阿里爸爸的保驾护航,再不了解我就out啦!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

21天学通C语言

21天学通C语言

(美国)琼斯(Bradley L.Jones) (美国)埃特肯(Peter Aitken) / 信达工作室 / 人民邮电出版社 / 2012-8 / 69.00元

《21天学通C语言(第6版•修订版)》是初学者学习C语言的经典教程。本版按最新的标准(ISO∕IEC:9899-1999),以循序渐进的方式介绍了C语言编程方面知识,并提供了丰富的实例和大量的练习。通过学习实例,并将所学的知识用于完成练习,读者将逐步了解、熟悉并精通C语言。《21天学通C语言(第6版•修订版)》包括四周的课程。第一周的课程介绍了C语言程序的基本元素,包括变量、常量、语句、表达式、函......一起来看看 《21天学通C语言》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换