跟我一起源碼閱讀之gRPC開篇

前言:很多程序員都知道冲甘,通過學(xué)習(xí)優(yōu)秀的開源框架可以很大程度上解鎖更多編碼姿勢和花樣湾蔓。但是沒有目的,沒有方法的去閱讀開源項目壹甥,很容易就被龐大繁雜的代碼給迷暈了救巷!那么該如何以正確的姿勢去閱讀開源項目呢?請各位看官品鑒此文句柠,跟我一起庖丁解牛浦译,來閱讀gRPC框架吧!

閱讀此文你將收獲

  • 了解什么是RPC
  • 了解該如何以正確的姿勢閱讀源碼
  • 以gRPC為例來試驗該如何閱讀源碼

大綱

  1. 什么是RPC
  2. 為什么要閱讀源碼
  3. 如何閱讀源碼
  4. 從gRPC開始的源碼閱讀

一溯职、什么是RPC

第一次反思什么是RPC這個問題的時候精盅,還是在夜讀群里,有個哥們問怎么進行RPC調(diào)用缸榄,我說用gRPC渤弛,有個百度的老哥反問祝拯,如果沒有g(shù)RPC怎么辦甚带?

我是誰?我在哪兒佳头?

那么我們來看看什么是RPC呢鹰贵?Remote Procedure Call(遠程過程調(diào)用),說人話就是讓你調(diào)用遠程方法和調(diào)用本地(一個工程內(nèi))方法一樣康嘉!

如何做到呢碉输?

  1. 是不是擼碼的時候調(diào)用個遠程方法和本地調(diào)用方法一樣?
  2. 既然是遠程方法亭珍,那么調(diào)用的時候那些網(wǎng)絡(luò)細(xì)節(jié),與通信協(xié)議是否應(yīng)該屏蔽好肄梨,讓我們專注于業(yè)務(wù)開發(fā)阻荒?

這就是RPC!

其實RPC在我們?nèi)粘I钪蟹浅3R娭谙郏琈Q的客戶端向broker消費消息的通信過程是RPC侨赡,Redis客戶端向Redis請求操作的通信過程也是RPC。RPC就是整個系統(tǒng)架構(gòu)中的血管粱侣,網(wǎng)絡(luò)羊壹!

二、為什么要閱讀源碼

2.1 我的系統(tǒng)出問題了而我卻不知道系列

在業(yè)務(wù)開發(fā)中齐婴,我們常常會選擇各種開源軟件作為項目架構(gòu)的組成部分油猫,例如用于緩存的Redis,用于消息隊列的kafka或者Rocket MQ等等柠偶。

但很多開發(fā)同學(xué)長期停留在使用階段眨攘,用到了主慰,遇到了就去百度或者谷歌一下。這樣的操作方式鲫售,一旦遇上了“疑難雜癥”從哪里找一位老中醫(yī)來給系統(tǒng)診脈呢共螺?


專治疑難雜癥!

所以請以正確的姿勢情竹,正確的態(tài)度來面對你所使用的開源項目藐不!那就是掌握其原理和實現(xiàn)細(xì)節(jié),知其然亦知其所以然秦效!當(dāng)你的系統(tǒng)出現(xiàn)問題的時候雏蛮,根據(jù)其一些表征現(xiàn)象,大概就能定位到問題阱州,然后解決掉他挑秉!

2.2 我們團隊沒有大牛,所以我菜的正常系列

最近新冠肺炎疫情鬧了一個笑話苔货,一哥們出門犀概,保安攔住他不讓他出去,說你不戴口罩不準(zhǔn)出去夜惭,那哥們說我出去就是為了買口罩姻灶!( ̄▽ ̄)"

很多時候像我一樣的普通程序員也面臨這樣的這樣的問題,沒有高手幫忙code review诈茧,代碼姿勢提升不上來产喉。沒有技術(shù)大牛領(lǐng)頭研究一些技術(shù),自己像無頭蒼蠅一樣?xùn)|搞搞西搞搞敢会,最后收效甚微曾沈!

如果你存在這些問題,那么就請你閱讀源碼鸥昏!

你很棒塞俱,為你加油!

2.3 為什么閱讀源碼能讓你進步

因為通過正確的姿勢閱讀優(yōu)秀的開源項目互广,你會從這個項目里收獲正確寫代碼的姿勢敛腌,例如在路由方面的設(shè)計,gin和beego有什么不同惫皱?gin的context是怎么用的像樊?那么中間件呢?iris和gin還有beego有什么區(qū)別旅敷?這些問題一旦你弄明白后你在框架設(shè)計路由和中間件的意識就已經(jīng)直追行業(yè)大佬水平了生棍!

還有某些讓人頭疼的“學(xué)院派”知識,例如網(wǎng)絡(luò)媳谁,協(xié)議等等涂滴。通常沒經(jīng)歷過高并發(fā)項目的同學(xué)會認(rèn)為這些沒啥用友酱,因為平時用不上,隨便怎么玩機器資源也不會被耗盡柔纵。但是如果你的項目流量一旦過大缔杉,各種問題都會暴露,這些問題是有跡可循的搁料,但是如果你不甚了解這些基礎(chǔ)知識或详,就算把問題的一堆線索暴露在你面前,你也只能干瞪眼~

藍瘦郭计,香菇

可別跟我說貴司用戶量小霸琴,學(xué)不學(xué)都一樣,反正用不上昭伸,我想套用一句裝逼的話:

業(yè)務(wù)開發(fā)工程師梧乘,你真的愿意做一輩子 CRUD boy 嗎?

三庐杨、如何閱讀源碼

不少人閱讀源碼的時候首先把項目給down下來选调,用IDE打開,然后找到main函數(shù)辑莫,從main函數(shù)開始一行行往下讀学歧,半天不到就不知道自己看到哪里去了罩引,好像是這么回事各吨,但又好像不是這樣。感覺自己看懂了點袁铐,可是懂了的這些有是干啥的揭蜒?

此之謂閱讀源碼從入main到放棄

學(xué)習(xí)開源代碼該如何入手(魚圖).png

正確的源碼閱讀姿勢為:

  • 閱讀文檔了解項目:

    1. 軟件整體結(jié)構(gòu)
    2. 了解其功能特性
    3. 涉及關(guān)鍵技術(shù)
    4. 實現(xiàn)原理
    5. 周邊生態(tài)
  • 有一定的認(rèn)知和感受

    1. 這個項目是干什么的?
    2. 能解決哪些問題剔桨?
    3. 適合在哪些場景使用屉更?
    4. 適合在哪些場景使用?
    5. 如何使用洒缀?
  • 帶著問題讀源碼

  • 執(zhí)行目標(biāo)

    1. 畫出主要流程的流程圖
    2. 畫出主要流程的時序圖

以問題為模塊的閱讀源碼方式瑰谜,花費少,收益高树绩,閱讀一部分就有一部分的收獲萨脑,有一部分的提高

四、從gRPC開始的源碼閱讀

再從第一節(jié)了解了RPC是什么之后饺饭,我們將以gRPC為目標(biāo)來實踐第三節(jié)源碼閱讀的方法論渤早!

A high-performance, open source universal RPC framework
--- gRPC官網(wǎng)

通過官方文檔我們可以了解到gRPC的使用說明和方法,下圖是一個典型的RPC調(diào)用圖瘫俊,內(nèi)容不多鹊杖,但是隱藏的信息可不少悴灵!

gRPC調(diào)用示例.png

從上圖和文檔中我們可以了解到,用gRPC來進行遠程服務(wù)調(diào)用就僅僅需要gRPC Stub(Client)用Proto Request向遠方的gRPC Server發(fā)起服務(wù)調(diào)用骂蓖,然后遠方的gRPC Server通過Proto Response(s)將調(diào)用結(jié)果返回給gRPC Stub积瞒。

實際上真的這么簡單就能進行遠程服務(wù)調(diào)用了嗎?

當(dāng)然不是登下,之所以這么簡單的原因是gRPC這個RPC框架幫我們封裝好了一切赡鲜,讓我們真正的像調(diào)用本地方法一樣調(diào)用遠程服務(wù)!

這些被屏蔽的細(xì)節(jié)庐船,是我們后續(xù)系列文章將要探索和學(xué)習(xí)的內(nèi)容银酬。此前,我們不妨先分析分析筐钟,梳理一下揩瞪,gRPC究竟做了啥?

gRPC調(diào)用圖.png

一個gRPC從開始發(fā)起請求到返回總共要經(jīng)歷過序列化篓冲,編解碼李破,以及網(wǎng)絡(luò)傳輸這些內(nèi)容。這些東西在我們使用gRPC框架做遠程服務(wù)調(diào)用的時候完全感知不到壹将!

至于gRPC的stub之間的連接管理嗤攻,健康檢查,負(fù)載均衡诽俯,異常重試妇菱,優(yōu)雅啟停機,熔斷限流等等更是我們可以從gRPC源碼中所能夠獲得的知識暴区!

gRPC知識樹

上圖是我畫的gRPC源碼閱讀的知識樹闯团,我希望在接下來的gRPC源碼閱讀系列文章中,能夠和大家一起將其補全仙粱,成為自己的技能樹房交!

尾聲與說明

這幾千個文字遠遠不足以表達我內(nèi)心想說的話,像冰山一樣伐割,浮在水面上的永遠只有一小部分候味。在接下來的文章中,我會盡我所能隔心,將源碼閱讀以一種輕松愉快的方式表達出來白群。

說明:

第三節(jié)源碼閱讀的方法論來自李玥老師極客時間專欄《消息隊列高手課-09 | 學(xué)習(xí)開源代碼該如何入手?》

源碼學(xué)習(xí)的思維導(dǎo)圖在這里 https://github.com/first-giver/MindMapping.git

期待下期與各位讀者再見济炎!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末川抡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崖堤,老刑警劉巖侍咱,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晌该,死亡現(xiàn)場離奇詭異隙疚,居然都是意外死亡,警方通過查閱死者的電腦和手機鸣戴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門胯甩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昧廷,“玉大人,你說我怎么就攤上這事偎箫∧炯恚” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵淹办,是天一觀的道長眉枕。 經(jīng)常有香客問我,道長怜森,這世上最難降的妖魔是什么速挑? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮副硅,結(jié)果婚禮上姥宝,老公的妹妹穿的比我還像新娘。我一直安慰自己恐疲,他們只是感情好腊满,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著流纹,像睡著了一般糜烹。 火紅的嫁衣襯著肌膚如雪违诗。 梳的紋絲不亂的頭發(fā)上漱凝,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音诸迟,去河邊找鬼茸炒。 笑死,一個胖子當(dāng)著我的面吹牛阵苇,可吹牛的內(nèi)容都是我干的壁公。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼绅项,長吁一口氣:“原來是場噩夢啊……” “哼紊册!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤囊陡,失蹤者是張志新(化名)和其女友劉穎芳绩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞反,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡妥色,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遏片。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘹害。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吮便,靈堂內(nèi)的尸體忽然破棺而出笔呀,到底是詐尸還是另有隱情,我是刑警寧澤髓需,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布凿可,位于F島的核電站,受9級特大地震影響授账,放射性物質(zhì)發(fā)生泄漏枯跑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一白热、第九天 我趴在偏房一處隱蔽的房頂上張望敛助。 院中可真熱鬧,春花似錦屋确、人聲如沸纳击。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焕数。三九已至,卻和暖如春刨啸,著一層夾襖步出監(jiān)牢的瞬間堡赔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工设联, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留善已,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓离例,卻偏偏與公主長得像换团,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宫蛆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容