源码版本是 2.7.8
Dubbo 是一款高性能、轻量级基于 Java 开发的 RPC 开源框架,是阿里 SOA 服务化治理方案的核心框架。
什么是 RPC ?
PC英文全名为Remote Procedure Call,也叫远程过程调用,其实就是一个计算机通信协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。计算机通信协议有很多种,对于开发来说,很多熟悉的是HTTP协议,我这里就做个简单的比较,HTTP协议是属于应用层的,而RPC跨越了传输层和应用层。HTTP本身的三次握手协议,每发送一次请求,都会有一次建立连接的过程,就会带来一定的延迟,并且HTTP本身的报文庞大,而RPC可以按需连接,调用结束后就断掉,也可以是长链接,多个远程过程调用共享同一个链接,可以看出来RPC的效率要高于HTTP,但是相对于开发简单快速的HTTP服务,RPC服务就会显得复杂一些。
Dubbo 框架设计
先介绍下Dubbo框架的各个模块
dubbo-registry 注册中心模块
基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。
Dubbo 的注册中心实现了多种方式,有 Zookeepr、Redis、Multicast、nacos等。
dubbo-registry-api 抽象了注册中心的注册和发现,实现了一些公关的方法,让子类只关注部分关键方法。而剩下的模块,则是针对具体的注册中心具体的实现方法。
dubbo-cluster 集群模块
官方解释:将多个服务提供方伪装为一个提供方,包括:负载均衡, 容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。
dubbo-common 公共逻辑模块
官方解释:包括 Util 类和通用模型。
这个模块封装了dubbo框架的一些共用方法,以及一些贯穿整个项目的统一格式模型,比如 URL。
dubbo-config 配置模块
是 Dubbo 对外的 API,用户通过 Config 使用Dubbo,隐藏 Dubbo 所有细节。
dubbo-container 容器模块
官方解释:官方解释:是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。
dubbo-remoting 远程通讯模块
官方解释:相当于 Dubbo 协议的实现,如果 RPC 用 RMI协议则不需要使用此包。
Dubbo 的远程通信模块,其中的子模块依赖各种开源组件实现远程通信。在 dubbo-remoting-api 中定义该模块的抽象概念,在其他子模块中依赖别的开源组件进行实现,比如,依赖 netty4 实现远程通信。
dubbo-rpc 远程调用模块
官方解释:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。
Dubbo 中对远程调用协议进行抽象的模块,其中包括各种协议,依赖于dubbo-remoting 模块的远程调用功能。dubbo-rpc-api 子模块是核心抽象,其他子模块是针对具体协议的实现,例如,dubbo-rpc-dubbo 子模块是对 Dubbo 协议的实现,依赖了 dubbo-remoting-netty4 等 dubbo-remoting 子模块。 dubbo-rpc 模块的实现中只包含一对一的调用,不关心集群的相关内容。
dubbo-monitor 监控模块
官方解释:统计服务调用次数,调用时间的,调用链跟踪的服务。
dubbo-metadata
Dubbo 的元数据模块。dubbo-metadata 模块的实现套路也是有一个 api 子模块进行抽象,然后其他子模块进行具体实现。
dubbo-serialization
序列化层。如果数据要通过网络进行传送,则需要先做序列化,变成二进制流,在网络接收方,需要将二进制流重新转化成原始数据。序列化负责管理整个框架网络传输时的序列化和反序列化工作。
Reference
- Apache Dubbo
- 《深入理解 Apace Dubbo 与实践》