第1篇 dubbo源码整体俯瞰图
本专栏的事先声明
- 本专栏中有部分内容参考自《深度剖析Apache Dubbo核心技术内幕》一书,读者有需要请购买正版 书籍。
- 本专栏剖析的dubbo源码基于目前最新的2.7.8版本,并且主要剖析其中的核心代码,有兴趣的读者可以在了解主体代码的情况下自行阅读其他源码。
- 本专栏会提供全部写过的包含注释的源码。
- 本专栏后期可能会改为付费专栏,希望读者知悉。
单刀直入-上全景图
上面这张图片是从官网复制过来的,看起来密密麻麻,大家先混个眼熟,后面会一层层像剥洋葱一样,层层解析。这里先大概说明一下各个层的作用,静不下来的客官可以直接看下一篇了。
Service和Config层
Service 和 Config 层为 API 接口 层 ,是为了让 Dubbo 使用方方便地发布服务和引用服务:对于服务提供方来说需要实现服务接口,然后使用 ServiceConfig API 来发布该服务:对于服务消费方来说需要使用 ReferenceConfig 对服务接口进行代理 。
Proxy层
Proxy 服务代理层:该层主要是对服务消费端使用的接口进行代理,把本地调用透明地转换为远程调用;另外对服务提供方的服务实现类进行代理。简单来说,就是使用动态代理替换原本的接口实现。
Registry层
Registry 服务注册中心层:服务提供者启动时会把服务注册到服务注册中消费者启动时会去服务注册中心获取服务提供者的地址列表, Registry 层主要功能是封装服务地址的注册与发现逻辑。
Cluster层
Cluster 路由层:封装多个服务提供者的路由规则、负载均衡、 集群容错的实现,并桥接服务注册中心。
Monitor层
Monitor 监控层:用来统计 RPC 调用次数和调用耗时时间。
Protocol层
Protocol 远程调用层:封装 RPC 调用逻辑,扩展接口为 Protocol。
Exchange层
Exchange 信息交换层 :封装请求响应模式,同步转异步等。
Transport层
Transport 网络传输层: Mina 和 Netty 抽象为统一接口。默认使用netty4。
Serialize层
Serialize 数据序列化层 : 对网络传输的数据进行序列化和反序列化。可以学习一下里面的拆包粘包的处理。
阅读源码的一些技巧
最后啰嗦一下一些技巧,第一个就是千万不要有强迫症,虽然大部分程序员都是有点完美主义者,但是因为框架的源码不是你写的,所以你肯定没法一下子就明悟了这些代码的逻辑,因此只能先略过大部分代码,先梳理整体架构,然后再慢慢深入了解。
第二个就是大胆猜想小心求证,感觉像在破案一样,就是你在略过大部分的时候,可以猜测一下这些在干什么,后续带着问题深入了解的时候,就会有恍然大悟的感觉,像get到大神的小心机一样。
(这块是中华石杉老师教的,大家有兴趣可以去了解下)
源码的话,大家可以自己去官网下载:dubbo源码
第一篇先简单这样。
本文地址:https://blog.csdn.net/wjm1991/article/details/107594496