相信开发人员对 Dubbo 都不会陌生,工作中对服务间的调用也常常使用 Dubbo 进行 RPC 调用。在开发中一般都是对方提供一个 API 接口,我方引入依赖,加上注解,然后就可以进行通信了。
本着知其所以然的目的,翻查资料,阅读源码,一起深入了解一下 Dubbo 的原理。
Apache Dubbo 是一款高性能、轻量级的开源服务框架。Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能 RPC 调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
这六大核心能力分别是:
通过官方回答可以提炼出以下要点:代理
、负载均衡
、注册发现
、扩展
、流量调度
等等。
这些也是后面需要深入了解的方向,比如:
下面通过官网资料,进一步了解 Dubbo 的架构设计。
这是一个通用部署架构,在 Dubbo 3.0[1] 中对架构进行了调整优化。除了注册中心,还有配置中心和元数据中心,具体内容可以参考官方说明。
在 Dubbo 2.7[2] 中,提供了一份框架设计图:
Dubbo 2.7 整体设计
对 Dubbo 3.0 而言,这块变动应该不大。
ServiceConfig
, ReferenceConfig
为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类ServiceProxy
为中心,扩展接口为 ProxyFactory
RegistryFactory
, Registry
, RegistryService
Invoker
为中心,扩展接口为 Cluster
, Directory
, Router
, LoadBalance
Statistics
为中心,扩展接口为 MonitorFactory
, Monitor
, MonitorService
Invocation
, Result
为中心,扩展接口为 Protocol
, Invoker
, Exporter
Request
, Response
为中心,扩展接口为 Exchanger
, ExchangeChannel
, ExchangeClient
, ExchangeServer
Message
为中心,扩展接口为 Channel
, Transporter
, Client
, Server
, Codec
Serialization
, ObjectInput
, ObjectOutput
, ThreadPool
本文主要通过官方资料,了解到 Dubbo 的概念、部署架构、整体设计以及调用链。了解这些基本概念后,可以进一步结合工作、源码做更深入的研究。
[1]
Dubbo 3.0 部署架构: https://dubbo.apache.org/zh/docs/concepts/registry-configcenter-metadata/
[2]
Dubbo 2.7 官方文档: https://dubbo.apache.org/zh/docsv2.7/dev/design/
- <End /> -