我是如何在短時間內快速掌握Dubbo的原理和源碼的(純乾貨)?

寫在前面

上週,在【Dubbo系列專題】中更新了兩篇文章《冰河開始對Dubbo下手了!》和《俯瞰Dubbo全局,閱讀源碼前必須掌握這些!!》,收到了不少小夥伴的微信私聊消息,大部分都是在詢問如何快速的掌握Dubbo的原理和源碼。針對這個問題,我也在思考如何以更簡單、易懂的方式讓小夥伴們更好的掌握Dubbo的原理和源碼。今天,我就爲小夥伴們分享下我是如何快速掌握Dubbo的原理和源碼的。git

文章已收錄到:github

https://github.com/sunshinelyz/technology-binghe編程

https://gitee.com/binghe001/technology-binghe微信

閱讀源碼的前提

閱讀某一項技術框架,或者說開源項目的源碼前,你必須瞭解這個框架是幹啥用的,說白了,就是你至少了解這個框架該怎麼用,在什麼場景下用,使用的過程當中會遇到哪些坑,如何解決。而學習一個框架,最簡單有效的方式就是它的官方文檔。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的原理和源碼,前先後後只用了不到兩個月。記住,閱讀源碼前,必定要明確爲什麼讀源碼,帶着問題讀源碼,對於源碼中所涉及的其餘技術或框架,必定要有所瞭解。閱讀源碼的過程當中,要遵循:先總體再局部,先宏觀再微觀,先粗略再細節的原則。最重要的一點是:在閱讀源碼的過程當中和閱讀源碼後都要動手實踐。

好了,今天就到這兒吧,我是冰河,你們有啥問題能夠在下方留言,也能夠加我微信,一塊兒交流技術,一塊兒進階,一塊兒牛逼~~

相關文章
相關標籤/搜索