Dubbo的三层含义

老叟最近把Dubbo官网上的资料通读了一遍,以及部分的Dubbo源码,对Dubbo了一点心得体会,于是记录在案。

Dubbo是阿里贡献给Apache的顶级项目(地位),是基于Java开发的高性能RPC框架(定位),在国内有众多的使用者(影响力)。

在老叟看到,Dubbo可以从三个层面来理解,分别是Dubbo通信协议,Dubbo RPC框架,Dubbo生态。

Dubbo通信协议

Dubbo是一个RPC框架,解决的是两个JVM进程之间的调用问题。Dubbo自研了在TCP传输协议的基础之上的应用层协议,取名Dubbo协议。说白了,就是一套怎么把复杂的数据结构转为字节流进行发送,然后怎么把接受到的字节流组装成复杂的数据结构。专业术语就是序列化和反序列化。在解决怎么序列化和反序列化之前,先要解决字节流有多少的问题,业界常用三种方式:

  • 固定长度:即发送和接收方都知道一个消息的字节流固定在什么长度。这个方式不适合用在RPC场景中,因为根本没有办法固定消息的长度,太长了,造成带宽浪费,太短了,无法发送完整的消息。
  • 特殊结束符:以某个特殊的字节作为消息的结束。
  • header + payload:有一个固定长度的消息头,消息头里有某个字节表示消息体(payload)的长度。Dubbo就是采用这个方式。插个题外话,Java的字节码文件也是采用这种方式。

 

上图就是Dubbo协议的全部,前面的15个字节,就是协议头部分,按照顺序,每个字节,甚至每一位都代表了具体了含义。最开始的两个字节,是魔数,表示这是Dubbo协议的哪个版本(Java字节码文件的前四个字节也是魔数cafebabe用来表示这是一个Java字节码文件,其他文件类型比如mp4,也是有魔数的)。

第12个字节开始的后续4个字节(4个字节转为无符号int类型,可以达到43亿左右,即消息体长度可以达到43亿个字节左右),用来表示消息的长度。比如第2个字节中的第一位表示这个消息是Request还是Response。

从第16字节就是可变长的payload部分。

所以,如果在异构架构中,要接入Dubbo,就要根据Dubbo协议来实现对应的消息序列化和反序列化(这是最基础的的工作)。在多语言方面,Dubbo做了很多的努力,像++Node.js/Python/PHP/Go/Erlang++(2020.7.12记)都已经提供了支持。

 

Dubbo RPC框架

 

仅有Dubbo协议还不够,因为作为一个RPC框架,解决了通信,只是达到了能用的地步,要做到好用,还需要提供一些列的API,扩展点,选择性等。那么包含了这些东西的,就是Dubbo框架,采用的是典型的分层架构,从下往上分别是(官方划分更为细致一些):

  1. 网络传输层:支持多个网络传输层实现,mina,netty,netty4等
  2. 核心层:核心层实现了众多功能,开箱即用。比如注册发现,调用,监控,路由,集群,负载均衡等等。
  3. Business层:开发者息息相关的一层,提供了三种方式使得开发者快速简单的开发业务:xml配置,注解,API。

Dubbo框架使用了微内核+插件的设计理念,平等对待第三方插件。开发者可以通过增强的SPI来扩展Dubbo框架,实际上,Dubbo本省很多的功能也是通过增强版SPI的方式来实现插拔的,在源码中可以看到在目录resource/META-INF.dubbo.internal下很多的扩展文件,这是增强版SPI的基本用法。

在阅读Dubbo源码之前,老叟觉得应该按照以下步骤来:

  1. 将Dubbo的架构了解大概
  2. 了解增强版SPI机制:org.apache.dubbo.common.extension.ExtensionLoader#getExtension
  3. 了解重要的实体域:org.apache.dubbo.common.URL,org.apache.dubbo.rpc.RpcInvocation
  4. 了解重要的服务域:org.apache.dubbo.rpc.protocol.dubbo.DubboInvoker
  5. 了解重要的会话域:org.apache.dubbo.rpc.RpcContext
  6. 了解服务服务导出过程:org.apache.dubbo.config.ServiceConfig#export
  7. 了解服务服务导入过程:org.apache.dubbo.config.ReferenceConfig#get
  8. 了解服务调用过程
  9. 了解Filter
  10. 其他

以上几点,老叟后续会发布相关文章。

 

Dubbo生态

有了Dubbo框架,作为模块开发者的我们已经可以够用了,但是如果我们把视野再放大一点,从整个项目着眼,还有很多事情需要考虑,比如监控,追踪,服务治理方面,配置中心,断路器,管理台,API网关,事务,授权等等,而这些仅仅依赖Dubbo框架还无法满足我们,所以,围绕Dubbo框架为中心,Dubbo生态提供了产品级的最佳实践。

 

这些生态周边,能够和Dubbo框架无缝连接,为项目的真正落地打下扎实基础。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值