本课程的事先声明
- 本课程剖析的Dubbo源码基于目前最新的2.7.8版本,并且主要剖析其中的核心代码,有兴趣的读者可以在了解主体代码的情况下自行阅读其他源码。
- 本课程会提供全部写过的包含注释的源码。
本课程的作用
- 在面试前,发现自己的技术深度不够,亮点不足,想快速了解源码,以便增加自己在面试中的筹码。
- 在入职新公司时,想对一门技术有比较深入的了解,而不是简单用于CRUD,从而能快速掌握新技术。
- 最后就是那些想自己尝试阅读源码,但是又看不进繁琐的大块书,本课程提供的完整核心源码剖析,能够让你踏入自己阅读源码之路,起码不会从入门到放弃。
单刀直入-上全景图
上面这张图片是从官网复制过来的,看起来密密麻麻,大家先混个眼熟,后面会一层层像剥洋葱一样,层层解析各个组件的作用,最后读完本课程后再回过头来看这张图,就会感觉了如指掌。这里先大概说明一下各个层的作用。
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://github.com/apache/dubbo