溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何在短期內(nèi)快速掌握Dubbo的原理和源碼

發(fā)布時(shí)間:2021-12-03 15:08:27 來(lái)源:億速云 閱讀:112 作者:柒染 欄目:云計(jì)算

今天就跟大家聊聊有關(guān)如何在短期內(nèi)快速掌握Dubbo的原理和源碼,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

閱讀源碼的前提

閱讀某一項(xiàng)技術(shù)框架,或者說(shuō)開(kāi)源項(xiàng)目的源碼前,你必須了解這個(gè)框架是干啥用的,說(shuō)白了,就是你至少了解這個(gè)框架該怎么用,在什么場(chǎng)景下用,使用的過(guò)程中會(huì)遇到哪些坑,如何解決。而學(xué)習(xí)一個(gè)框架,最簡(jiǎn)單有效的方式就是它的官方文檔。Dubbo也不例外,我在學(xué)習(xí)Dubbo的時(shí)候,也是首先看的Dubbo的官方文檔,基本沒(méi)看其他的文章或者資料。為啥?因?yàn)镈ubbo的官方文檔是最權(quán)威的,是最可信的。

即使你在項(xiàng)目中沒(méi)有使用過(guò)Dubbo框架,你也可以按照Dubbo的官方文檔基于Dubbo寫(xiě)一個(gè)簡(jiǎn)單的示例程序,通過(guò)示例能夠讓自己快速的了解Dubbo。

 

為何要閱讀源碼

閱讀源碼前,你要清楚的知道自己為何要閱讀源碼,帶著問(wèn)題去看源碼。想要看框架的源碼,無(wú)外乎兩種情況:一種就是在項(xiàng)目中遇到了無(wú)法通過(guò)文檔或者其他技術(shù)資料解決的問(wèn)題,想通過(guò)源碼來(lái)找解決方案;另一種就是對(duì)框架的底層實(shí)現(xiàn)好奇,這么牛逼的技術(shù)是如何實(shí)現(xiàn)的? 而我,基本屬于后者。在我經(jīng)歷的用戶(hù)上億的高并發(fā)電商系統(tǒng)中,部分核心子系統(tǒng)使用了Dubbo,經(jīng)過(guò)性能調(diào)優(yōu),Dubbo的表現(xiàn)良好。我就很好奇:Dubbo是如何抗住這么高的并發(fā)的?它內(nèi)部是如何實(shí)現(xiàn)的?

其次,閱讀源碼前,你要為自己提幾個(gè)問(wèn)題,比如我在看Dubbo源碼前,就明確了很多問(wèn)題,比如:Dubbo是如何實(shí)現(xiàn)RPC服務(wù)的?服務(wù)提供者和調(diào)用者之間是如何交互的?Dubbo是如何封裝網(wǎng)絡(luò)調(diào)用使其看起來(lái)和調(diào)用本地方法一樣?Dubbo又是如何實(shí)現(xiàn)服務(wù)治理的?等等一系列的問(wèn)題,我記得我當(dāng)時(shí)看源碼前,足足給自己提了上百個(gè)問(wèn)題。帶著問(wèn)題看源碼,能夠讓你事半功倍,不僅僅是Dubbo,對(duì)于其他的框架,也是如此。

還有就是,不要為了看源碼而看源碼,很多小伙伴看了不少框架的源碼,可沒(méi)過(guò)多久就忘記了,跟沒(méi)看一樣,還浪費(fèi)了很多時(shí)間。這種就是典型的為了看源碼而看源碼,并沒(méi)有去深究這個(gè)框架的實(shí)現(xiàn)原理和細(xì)節(jié),遇到看不懂的,可以先跳過(guò),記錄下,等把相關(guān)聯(lián)的代碼看懂后,再反過(guò)頭來(lái)重新梳理沒(méi)有看懂的源碼。

 

框架使用了哪些技術(shù)

閱讀源碼前,還有一項(xiàng)重要的工作就是,要了解框架中使用了哪些技術(shù)。對(duì)所用的技術(shù)要有個(gè)大體的了解。比如:在Dubbo中使用了SPI、時(shí)間輪定時(shí)任務(wù)、服務(wù)注冊(cè)與發(fā)現(xiàn)、Netty、序列化、自定義協(xié)議等等技術(shù)。所以,在閱讀源碼前,先要對(duì)這些技術(shù)有個(gè)大體的了解。

比如,在看Dubbo源碼前,我就已經(jīng)了解到Dubbo的網(wǎng)路交互底層使用的Netty,正好在我工作不久的時(shí)候,我又深入研究過(guò)Netty的源碼,這就有助于我在看Dubbo源碼時(shí),能夠更好的理解Dubbo的網(wǎng)絡(luò)編程部分。

所以說(shuō),臺(tái)上一分鐘,臺(tái)下十年功,在看Dubbo源碼前,我也是做了充分的準(zhǔn)備。

 

閱讀源碼時(shí)注意什么

任何一項(xiàng)技術(shù)框架,或者說(shuō)開(kāi)源項(xiàng)目,肯定是為了解決某些場(chǎng)景而生的,就比如Dubbo,相信小伙伴們都知道,Dubbo作為一個(gè)分布式服務(wù)治理框架,一個(gè)典型的使用場(chǎng)景就是分布式系統(tǒng)。

其次,一個(gè)優(yōu)秀的技術(shù)框架或開(kāi)源項(xiàng)目背后肯定蘊(yùn)含著眾多其他技術(shù)的原理與實(shí)現(xiàn)。我們同樣是以Dubbo為例,在Dubbo中,為了實(shí)現(xiàn)在分布式場(chǎng)景下,調(diào)用遠(yuǎn)程RPC服務(wù)就像調(diào)用本地服務(wù)一樣,其至少需要實(shí)現(xiàn)如下功能:

  • 服務(wù)之間功性能的通信。
  • 服務(wù)調(diào)用需要做到負(fù)載均衡、高可用、限流。
  • 服務(wù)治理。
  • 高可靠、容錯(cuò)。
  • 服務(wù)能夠自動(dòng)注冊(cè)和發(fā)現(xiàn)。

而實(shí)現(xiàn)這些功能時(shí),Dubbo借助了哪些優(yōu)秀的開(kāi)源框架?這些開(kāi)源框架Dubbo是如何集成起來(lái)的?是硬編碼方式集成?還是其他更好的方式?這些都是需要我們?cè)陂喿x源碼的時(shí)候,去源碼中找到答案。

 

閱讀源碼的方式

我把閱讀源碼的方式總結(jié)為:先整體再局部,先宏觀再微觀,先粗略再細(xì)節(jié)。

什么意思呢?就是在看源碼的是時(shí)候,先從整體上把握源碼的設(shè)計(jì)原理和設(shè)計(jì)理念,先整體上大概了解源碼是如何實(shí)現(xiàn)的。比如在Dubbo中,網(wǎng)絡(luò)編程是基于Netty實(shí)現(xiàn)的,你就可以先做個(gè)了解,知道這么回事。從整體上把握基本的框架源碼后,再?gòu)募?xì)節(jié)中死磕具體的實(shí)現(xiàn),比如,在Dubbo中是如何使用Netty實(shí)現(xiàn)網(wǎng)絡(luò)交互的?

記住,閱讀源碼時(shí)切忌在還沒(méi)有搞懂整體的設(shè)計(jì)原理和整體源碼設(shè)計(jì)前,就開(kāi)始死扣源碼的細(xì)節(jié)。否則,你會(huì)在源碼里面迷失自己。

如何驗(yàn)證自己掌握了源碼?

閱讀源碼光看源碼還不行,還要自己去動(dòng)手實(shí)踐,正所謂“實(shí)踐是掌握整理的唯一標(biāo)準(zhǔn)”。你不實(shí)踐,怎么知道自己是不是掌握了。

我把實(shí)踐部分分為兩個(gè)組成部分:在看源碼的過(guò)程中動(dòng)手實(shí)踐;在看源碼后動(dòng)手實(shí)踐。

在看源碼的過(guò)程中動(dòng)手實(shí)踐就是說(shuō):在看源碼的過(guò)程中,將自己不明白的地方記錄下來(lái),查閱官網(wǎng)文檔或者其他資料,如果是由于自己的技術(shù)能力有欠缺,看不懂的,就要及時(shí)為自己充電來(lái)補(bǔ)充相關(guān)的知識(shí)點(diǎn)了。如果是遇到自己認(rèn)為比較好的實(shí)現(xiàn)方式時(shí),可以在框架的代碼上以注釋的方式標(biāo)記自己的理解。比如,我在看Dubbo源碼的時(shí)候,就標(biāo)注了大量的注釋。

在看源碼后,一定要?jiǎng)邮謱?shí)操??催^(guò)Dubbo的整體源碼后,如果你認(rèn)為自己掌握了Dubbo,就不妨自己動(dòng)手實(shí)現(xiàn)一個(gè)RPC框架,看看自己實(shí)現(xiàn)的框架與Dubbo框架有哪些區(qū)別,為啥Dubbo框架是這樣實(shí)現(xiàn)的。再反過(guò)頭來(lái)帶著問(wèn)題看Dubbo的源碼,你肯定會(huì)理解的更加深入。而我,在看完Dubbo框架的源碼后,也是這樣做的。

看完上述內(nèi)容,你們對(duì)如何在短期內(nèi)快速掌握Dubbo的原理和源碼有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI