大家好,我是冰河~~

最近收到很多小伙伴的微信私聊消息,大部分都是在询问怎样快速把握一个结构的原理和源码,比方:Spring、Dubbo、MyBatis等。针对这个问题,周末我简略总结了下,今日,就为小伙伴们共享下我是怎样利用不到一个月的业余时间(每天不到2小时)快速把握Dubbo的原理和源码的。

阅览源码的条件

阅览某一项技能结构,或许说开源项目的源码前,你有必要了解这个结构是干啥用的,说白了,便是你至少了解这个结构该怎样用,在什么场景下用,运用的进程中会遇到哪些坑,怎样处理。而学习一个结构,最简略有用的方法便是它的官方文档。Dubbo也不破例,我在学习Dubbo的时分,也是首先看的Dubbo的官方文档,根本没看其他的文章或许材料。为啥?因为Dubbo的官方文档是最权威的,是最可信的。

即使你在项目中没有运用过Dubbo结构,你也能够按照Dubbo的官方文档根据Dubbo写一个简略的示例程序,经过示例能够让自己快速的了解Dubbo。

为何要阅览源码

阅览源码前,你要清楚的知道自己为何要阅览源码,带着问题去看源码。想要看结构的源码,无外乎两种情况:一种便是在项目中遇到了无法经过文档或许其他技能材料处理的问题,想经过源码来找处理方案;另一种便是对结构的底层完成好奇,这么牛逼的技能是怎样完成的? 而我,根本归于后者。在我阅历的用户上亿的高并发电商系统中,部分中心子系统运用了Dubbo,经过性能调优,Dubbo的表现杰出。我就很好奇:Dubbo是怎样抗住这么高的并发的?它内部是怎样完成的?

其次,阅览源码前,你要为自己提几个问题,比方我在看Dubbo源码前,就清晰了很多问题,比方:Dubbo是怎样完成RPC服务的?服务提供者和调用者之间是怎样交互的?Dubbo是怎样封装网络调用使其看起来和调用本地方法相同?Dubbo又是怎样完成服务管理的?等等一系列的问题,我记住我其时看源码前,足足给自己提了上百个问题。带着问题看源码,能够让你事半功倍,不仅仅是Dubbo,关于其他的结构,也是如此。

还有便是,不要为了看源码而看源码,很多小伙伴看了不少结构的源码,可没过多久就忘记了,跟没看相同,还浪费了很多时间。这种便是典型的为了看源码而看源码,并没有去深究这个结构的完成原理和细节,遇到看不懂的,能够先越过,记录下,等把相关联的代码看懂后,再反过头来重新收拾没有看懂的源码。

结构运用了哪些技能

阅览源码前,还有一项重要的作业便是,要了解结构中运用了哪些技能。对所用的技能要有个大体的了解。比方:在Dubbo中运用了SPI、时间轮定时任务、服务注册与发现、Netty、序列化、自定义协议等等技能。所以,在阅览源码前,先要对这些技能有个大体的了解。

比方,在看Dubbo源码前,我就已经了解到Dubbo的网路交互底层运用的Netty,正好在我作业不久的时分,我又深化研究过Netty的源码,这就有助于我在看Dubbo源码时,能够更好的了解Dubbo的网络编程部分。

所以说,台上一分钟,台下十年功,在看Dubbo源码前,我也是做了充沛的预备。

阅览源码时注意什么

任何一项技能结构,或许说开源项目,必定是为了处理某些场景而生的,就比方Dubbo,信任小伙伴们都知道,Dubbo作为一个分布式服务管理结构,一个典型的运用场景便是分布式系统。

其次,一个优异的技能结构或开源项目背面必定蕴含着众多其他技能的原理与完成。咱们相同是以Dubbo为例,在Dubbo中,为了完成在分布式场景下,调用远程RPC服务就像调用本地服务相同,其至少需求完成如下功能:

  • 服务之间高性能的通讯。
  • 服务调用需求做到负载均衡、高可用、限流。
  • 服务管理。
  • 高可靠、容错。
  • 服务能够自动注册和发现。

而完成这些功能时,Dubbo借助了哪些优异的开源结构?这些开源结构Dubbo是怎样集成起来的?是硬编码方法集成?还是其他更好的方法?这些都是需求咱们在阅览源码的时分,去源码中找到答案。

阅览源码的方法

我把阅览源码的方法总结为:先全体再局部,先微观再微观,先粗略再细节。

什么意思呢?便是在看源码的是时分,先从全体上把握源码的规划原理和规划理念,先全体上大概了解源码是怎样完成的。比方在Dubbo中,网络编程是根据Netty完成的,你就能够先做个了解,知道这么回事。从全体上把握根本的结构源码后,再从细节中死磕具体的完成,比方,在Dubbo中是怎样运用Netty完成网络交互的?

记住,阅览源码时切忌在还没有搞懂全体的规划原理和全体源码规划前,就开始死扣源码的细节。否则,你会在源码里面迷失自己。

怎样验证自己把握了源码?

阅览源码光看源码还不行,还要自己去着手实践,正所谓“实践是把握收拾的唯一标准”。你不实践,怎样知道自己是不是把握了。

我把实践部分分为两个组成部分:在看源码的进程中着手实践;在看源码后着手实践。

在看源码的进程中着手实践便是说:在看源码的进程中,将自己不明白的地方记录下来,查阅官网文档或许其他材料,假如是由于自己的技能能力有欠缺,看不懂的,就要及时为自己充电来补充相关的知识点了。假如是遇到自己以为比较好的完成方法时,能够在结构的代码上以注释的方法符号自己的了解。比方,我在看Dubbo源码的时分,就标示了很多的注释。

在看源码后,一定要着手实操。看过Dubbo的全体源码后,假如你以为自己把握了Dubbo,就无妨自己着手完成一个RPC结构,看看自己完成的结构与Dubbo结构有哪些区别,为啥Dubbo结构是这样完成的。再反过头来带着问题看Dubbo的源码,你必定会了解的愈加深化。而我,在看完Dubbo结构的源码后,也是这样做的。

阅览源码的总结

最后,跟小伙伴们透露下:我从开始看Dubbo源码,到把握Dubbo的原理和源码,前前后后只用了不到一个月,并且都是用的业余时间(每天不到2小时)。记住,阅览源码前,一定要清晰为何读源码,带着问题读源码,关于源码中所涉及的其他技能或结构,一定要有所了解。阅览源码的进程中,要遵循:先全体再局部,先微观再微观,先粗略再细节的准则。最重要的一点是:在阅览源码的进程中和阅览源码后都要着手实践。

好了,今日就到这儿吧,我是冰河,咱们下期见~~