阅读说明
为了更好的阅读体验,将一些特殊符号约定特作说明:
类型 | 说明 |
---|---|
// ...... |
常用于代码片段,表示此处有省略部分代码。 使用此标记的出发点是,防止大批量复制非关键代码,影响阅读效率 |
整个分析流程基于 Dubbo 官方源码 3.0 分支,使用示例项目为 dubbo-demo/dubbo-demo-triple,采用源码编译的方式运行。
由于 Dubbo 3.0 使用到了 IDL 语言(例如 Protobuf)来生成接口类和 POJO 定义,所以在运行之前需要先在根目录手动执行 mvn compile
, 以便生成相应的定义文件。
RPC 演进
记得刚开始接触编程那会,主流还是单体应用,服务 A 想要调用服务 B,直接就是函数间的调用。
后来应用慢慢变大,一些单体应用开始按照功能进行拆分,例如拆分成了订单和用户,通过 HTTP 接口进行交互,此时会在应用 A 配置文件里,提前放置应用 B 的访问地址。
再后来,应用越来越大,越拆越多,FunctionA
想要知道 FunctionB
在哪里需要繁杂的配置,交叉的网络给运维和伸缩拓展带来巨大挑战,于是乎架构师们引入了“服务注册中心”,作为应用间的引路人。
阶段三也是目前主流服务治理框架,例如 Dubbo 的原始模型结构。当然,真到了工业实践层面,会有大量细节需要处理,差不得毫厘。
Dubbo 核心流程
这是网上流传最广 Dubbo 架构图,出自官网,从 Dubbo 2.0 到 3.0,这个基础架构一直是稳定不变的。
想要深入了解 Dubbo,第一步得先了解他最核心的流程:服务暴露-服务调用 流程(即下图的上半三角)
我们以模块为粒度,对服务暴露-调用流程做初步细化,便看到如下架构,接下来我们将顺藤摸瓜,一步步解构 Dubbo 3.0。
- 其中:启动流程管理 =
DubboBootstrap
单例类,拓展管理 =ExtensionLoader
单例类,配置管理 =ApplicationModel
单例类
参考资料
- Dubbo 源码 |(https://github.com/apache/dubbo)