gRPC-go源碼剖析與實(shí)戰(zhàn) 技術(shù)專欄介紹

grpc-go專欄圖片.jpg

1、背景介紹

無論是分布式架構(gòu),還是微服務(wù)架構(gòu),服務(wù)之間如何高效、可靠性的通信是具有一定的挑戰(zhàn)性的;那么,解決方案之一就是使用RPC通信;
而由google開發(fā)的grpc-go是一個(gè)高性能、開源和通用的RPC框架,面向移動(dòng)和HTTP2設(shè)計(jì)。
在涉及到網(wǎng)絡(luò)通信的領(lǐng)域內(nèi),經(jīng)??梢钥吹絞rpc-go的身影;
目前,已經(jīng)在Kubernetes、Docker、Istio等優(yōu)秀開源框架中廣泛應(yīng)用;因此,有必要對grpc-go的核心原理進(jìn)行深入了解,以便能夠更好的為微服務(wù)架構(gòu),分布式架構(gòu)提供安全、高效、可靠的網(wǎng)絡(luò)通信服務(wù)。

2、專欄解讀:

本專欄非常詳細(xì)的介紹了grpc-go的源碼,編寫了近100篇文章來幫助大家了解每個(gè)功能的核心原理;

閱讀本專欄不僅可以了解到grpc-go的核心原理;如,如何建立rpc連接,rpc請求,滑動(dòng)窗口(流量控制)原理,如何自定義平衡器,解析器,重試機(jī)制,加密,認(rèn)證,如何讓grpc-go支持lz4算法等等;如何基于wireshark進(jìn)行抓包分析; 還可以從grpc-go源碼中學(xué)到很多技巧:如,grpc-go框架是如何使用事件機(jī)制的,如何使用上下文的?如何比較兩個(gè)數(shù)的大小?當(dāng)某個(gè)步驟失敗時(shí)如何對本步驟以及前面的步驟實(shí)現(xiàn)重試機(jī)制等等,對go語言的提高有很大的幫助;

本專欄最大的目的,希望您學(xué)完之后,該技術(shù)能夠成為您的技術(shù)亮點(diǎn);比如,在求職簡歷上可以表明熟讀grpc-go源碼,具備二次開發(fā)grpc-go源碼的能力;也是證明你go語言水平的一種能力;希望這一項(xiàng)技術(shù)能夠稱為您簡歷上的亮點(diǎn)之一。

3、專欄主要分為以下幾個(gè)模塊

3.1.模塊1:grpc客戶端是如何向grpc服務(wù)器端建立起rpc連接的

本模塊主要介紹rpc鏈接建立階段所涉及到的內(nèi)容;
主要涉及到的內(nèi)容:
??grpc客戶端跟grpc服務(wù)器端整個(gè)交互過程主要經(jīng)歷過那些階段;如何建立起的tcp鏈接?
如果rpc鏈接失敗后,grpc客戶端是否嘗試重試鏈接,每次連接的間隔時(shí)間是如何設(shè)置的;等等

3.2.模塊2:解析器原理以及實(shí)踐介紹

本模塊介紹解析器相關(guān)原理;
主要涉及到的內(nèi)容:
??解析器是用來做什么的?如何實(shí)現(xiàn)一個(gè)解析器,如何注冊一個(gè)解析器?對grpc框架內(nèi)置的解析器介紹?如何使用consul來自定義解析器;

3.3.模塊3:平衡器原理以及實(shí)踐介紹

本模塊介紹平衡器相關(guān)原理;
主要涉及到的內(nèi)容:
??平衡器主要實(shí)現(xiàn)什么功能?客戶端如何指定使用哪個(gè)平衡器呢?如何實(shí)現(xiàn)、注冊、創(chuàng)建平衡器?pickFirst平衡器介紹、round_robin平衡器介紹、grpc+LoadBalancer平衡器介紹、grpc+nginx平衡器介紹、grpc+consul自定義解析器介紹等等;

3.4.模塊4:grpc客戶端是如何向grpc服務(wù)器端發(fā)起rpc請求的以及處理流程

本模塊介紹的原理以及流程:是在rpc建立連接基礎(chǔ)之上的;也就是rpc連接建立后,客戶端如何調(diào)用本地方法,服務(wù)器端如何接收請求,執(zhí)行請求,反饋執(zhí)行結(jié)果給客戶端。
主要涉及到的內(nèi)容:
??在rpc請求階段,主要經(jīng)歷了哪些過程;在客戶端一側(cè),什么場景下,會觸發(fā)流的創(chuàng)建?客戶端是如何將請求服務(wù)的名稱,方法名稱等信息通知服務(wù)器端的?
以及如何將請求方法的參數(shù)值發(fā)送給服務(wù)器端的?客戶端一側(cè),接收服務(wù)器端反饋執(zhí)行結(jié)果的流程?grpc服務(wù)器端一側(cè),處理客戶端的整體流程?
grpc服務(wù)器端對客戶端的每次tcp請求,是單協(xié)程處理,還是多協(xié)程處理?等等;

3.5.模塊5:幀接收原理介紹

本模塊介紹幀接收器相關(guān)原理;每次客戶端跟服務(wù)器端建立rpc連接后,就會創(chuàng)建各自的幀接收器,專門用來接收對方發(fā)送的幀;
主要內(nèi)容涉及到:
??grpc客戶端幀接收器的原理介紹;grpc客戶端幀接收器是如何處理不同的幀的?grpc服務(wù)器端幀接收器的原理介紹;服務(wù)器端接收到客戶端的頭幀后,如何處理?等等

3.6.模塊6:幀發(fā)送器原理介紹

本模塊介紹幀發(fā)送器相關(guān)原理;每次客戶端跟服務(wù)器端建立rpc連接后,就會創(chuàng)建各自的幀發(fā)送器,專門用來將各種類型的幀發(fā)送給對方;客戶端跟服務(wù)器端的幀發(fā)送器原理是一樣的。
主要內(nèi)容涉及到:
??幀發(fā)送器的整體流程介紹;如何將幀數(shù)據(jù)再內(nèi)存里進(jìn)行存儲和讀取?在同一個(gè)進(jìn)程里如何使用通知的方式消費(fèi)數(shù)據(jù)幀?幀發(fā)送器處理幀時(shí)有什么特點(diǎn)?幀發(fā)送器的基本流程介紹?
為什么源碼作者將幀發(fā)送器的代碼如何設(shè)計(jì)?客戶端一側(cè),頭幀的整體處理流程介紹?等等

3.7.模塊7:滑動(dòng)窗口(流量控制)

本模塊主要介紹grpc服務(wù)器端在接收客戶端發(fā)送的數(shù)據(jù)幀時(shí),是如何動(dòng)態(tài)控制客戶端發(fā)送的數(shù)據(jù)幀大小的;也可以稱之為流量控制。
涉及到的內(nèi)容:
??滑動(dòng)窗口的整體流程介紹;幀發(fā)送器是如何將數(shù)據(jù)幀發(fā)送給服務(wù)器端的;在服務(wù)器端一側(cè),幀接收器是如何將接收到的數(shù)據(jù)幀存儲到本地的?
數(shù)據(jù)幀緩存到recvBuffer前的流控?從recvBuffer里讀取數(shù)據(jù)時(shí),如何調(diào)整流控指標(biāo)?服務(wù)器端在真正執(zhí)行客戶端的請求方法時(shí),是如何完整的讀取到請求參數(shù)值的?
如何計(jì)算本次發(fā)送的數(shù)據(jù)幀的大???服務(wù)器端發(fā)送的設(shè)置幀、窗口更新幀是如何影響客戶端的幀大小的?
基于wireshark對grpc進(jìn)行抓包分析:如何配置wireshark能夠抓取grpc包,多場景抓包測試用例分析;等等

3.8.模塊8:取消功能cancellation

本模塊對grpc框架中的取消功能cancellation進(jìn)行介紹;
涉及到的內(nèi)容:
??取消cancellation功能的基本原理介紹;取消功能實(shí)現(xiàn)什么效果?客戶端一側(cè),是如何處理取消功能的?服務(wù)器端一側(cè),是如何處理取消功能的?等等

3.9.模塊9:截止時(shí)間deadline

本模塊對grpc框架中的截止時(shí)間Deadline進(jìn)行介紹;
涉及到的內(nèi)容:
??截止時(shí)間deadline跟取消功能cancellation的區(qū)別?截止時(shí)間可以發(fā)生在哪些階段?客戶端一側(cè),如何配置啟動(dòng)截止時(shí)間?
客戶端一側(cè),當(dāng)截止時(shí)間發(fā)生在不同的階段,每個(gè)階段是如何處理的?
服務(wù)器端一側(cè),是如何處理截止時(shí)間的?等等

3.10.模塊10:健康檢測health

本模塊對grpc框架中的健康檢測HealthChecking進(jìn)行介紹;
涉及到的內(nèi)容:
??客戶端是如何判定服務(wù)器端的服務(wù)的健康狀態(tài)的?健康檢測原理的整體流程圖介紹;客戶端的鏈接狀態(tài)時(shí)如何更新為Ready狀態(tài)的?
客戶端如何判斷服務(wù)器端的服務(wù)能夠正常提供服務(wù)呢?服務(wù)器端健康檢測Watcher的核心思想?健康檢測運(yùn)行時(shí)場景的異常場景處理?等等

3.11.模塊11:攔截器interceptor

本模塊對grpc框架中的攔截器interceptor原理進(jìn)行介紹;
涉及到的內(nèi)容:
??攔截器的分類;客戶端如何使用攔截器;服務(wù)器端如何使用攔截器;服務(wù)器端何時(shí)觸發(fā)攔截器流程?客戶端何時(shí)觸發(fā)攔截器流程?
攔截器的調(diào)度策略,即攔截器的執(zhí)行過程?等等

3.12.模塊12:保持鏈接keepalive

本模塊對grpc框架中的保持鏈接keepalive原理進(jìn)行介紹;
涉及到的內(nèi)容:
??保持鏈接跟健康檢測的區(qū)別?服務(wù)器端keepalive的原理圖?服務(wù)器端何時(shí)觸發(fā)keepalive功能的啟動(dòng)?當(dāng)鏈接處于不同狀態(tài)時(shí),服務(wù)器端如何處理鏈接?
客戶端一側(cè)keepalive的原理圖?服務(wù)器端跟客戶端交互處理goAway幀的流程圖;等等

3.13.模塊13:多路復(fù)用multiplex

本模塊對grpc框架中多路復(fù)用multiplex原理進(jìn)行介紹;
涉及到的內(nèi)容:
??grpc采礦機(jī)是如何實(shí)現(xiàn)多路復(fù)用的;實(shí)現(xiàn)多路復(fù)用的基本思路?grpc框架中,服務(wù)器端是如何區(qū)分不同的服務(wù)請求的?一個(gè)服務(wù)器請求,可能存在多個(gè)http2數(shù)據(jù)幀,
服務(wù)器端是如何存儲不同服務(wù)請求的http2數(shù)據(jù)幀的?如何按順序存儲?如何按順序讀取數(shù)據(jù)幀呢?等等

3.14.模塊14:壓縮特性compression

本模塊對grpc框架中壓縮特性compression原理進(jìn)行介紹;
涉及到的內(nèi)容:
??grpc框架是如何支持不同的壓縮算法的?如何啟動(dòng)壓縮特性?如何注冊一個(gè)壓縮算法?客戶端一側(cè),壓縮處理數(shù)據(jù)的原理?服務(wù)器端一側(cè),壓縮處理數(shù)據(jù)的原理?
在客戶端一側(cè),發(fā)送數(shù)據(jù)階段,壓縮器壓縮數(shù)據(jù)的處理流程?在服務(wù)器端一側(cè),如何獲取客戶端采用的壓縮算法呢?如何解壓數(shù)據(jù)?如何讓grpc框架支持lz4壓縮算法呢?等等

3.15.模塊15:重試機(jī)制retry

本模塊對grpc框架中的重試機(jī)制retry原理進(jìn)行介紹;
涉及到的內(nèi)容:
??在grpc框架中什么場景下使用了重試機(jī)制?客戶端一側(cè),如何啟動(dòng)、禁止重試機(jī)制功能?如何定義、使用重試策略呢?grpc框架中,實(shí)現(xiàn)重試機(jī)制的主體思路?
重試機(jī)制withRetry實(shí)現(xiàn)方式的特點(diǎn)?客戶端是如何判斷是不是允許重試呢?如果某個(gè)階段失敗了,客戶端如何重試前幾步的操作呢?等等

3.16.模塊16:元數(shù)據(jù)metadata

本模塊對grpc框架中的元數(shù)據(jù)metadata原理進(jìn)行介紹;
涉及到的內(nèi)容:
??客戶端一側(cè),如何創(chuàng)建元數(shù)據(jù)?如何使用創(chuàng)建的元數(shù)據(jù)?如何將元數(shù)據(jù)信息存儲到上下文中的呢?服務(wù)器端一側(cè),是如何接收元數(shù)據(jù)的?如何讓服務(wù)端提供的服務(wù)中有能力使用元數(shù)據(jù);等等

3.17.模塊17:加密encryption

本模塊對grpc框架中加密encryption原理進(jìn)行介紹;
涉及到的內(nèi)容:
??grpc框架支持哪幾種加密?基于tls證書加密的測試用例介紹?基于ca的tls證書加密測試用例介紹?
鏈路建立階段時(shí)的tls加密原理介紹:客戶端一側(cè),加密原理介紹?服務(wù)器端加密原理介紹,介紹時(shí)配合wireshark抓包分析;如何配置wireshark能夠抓取tls包?整體握手過程原理介紹;
數(shù)據(jù)幀發(fā)送階段的tls加密介紹;如何使用在tls鏈路建立階段雙方協(xié)商好的數(shù)據(jù)作為加密數(shù)據(jù)的?使用協(xié)商好的加密數(shù)據(jù)開始對數(shù)據(jù)幀進(jìn)行加密?等等

3.18.模塊18:認(rèn)證authentication

本模塊對grpc框架中的認(rèn)證authentication原理進(jìn)行介紹;
涉及到的內(nèi)容:
??如何理解認(rèn)證?grpc+oauth2.Token認(rèn)證方式介紹:如何配置認(rèn)證?認(rèn)證功能屬于鏈路級別功能,還是屬于流級別功能?服務(wù)器端一側(cè)是如何獲取認(rèn)證信息的?如何來驗(yàn)證認(rèn)證信息的?grpc+自定義認(rèn)證方式介紹;grpc+Basic認(rèn)證方式介紹:basic認(rèn)證方式介紹;模擬Basic認(rèn)證測試用例介紹;grpc+jwt認(rèn)證方式介紹:jwt認(rèn)證介紹;jwt-grpc-go認(rèn)證測試用例介紹;客戶端向服務(wù)器端發(fā)起授權(quán)碼請求?如何具體校驗(yàn)jwt?如何生成jwt?等等

4、適宜人群

go語言研發(fā)工程師、go語言愛好者
微服務(wù)研發(fā)工程師
kubernetes開發(fā)工程師
docker開發(fā)工程師
中間件研發(fā)工程師
計(jì)算機(jī)相關(guān)專業(yè)的大學(xué)生、研究生
對grpc-go感興趣的愛好者

如果想了解更多,
可在 某度 搜索即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 介紹 gRPC 是一個(gè)高性能的開源 RPC 框架,最初由 Google 開發(fā)。 RPC 是什么?在客戶端應(yīng)用...
    無糖tj閱讀 658評論 0 1
  • 0. 背景 gRPC 是谷歌開源的輕量級 RPC 通信框架,在微服務(wù)架構(gòu)中經(jīng)常用到。 1. gRPC 簡介 gR...
    張?jiān)骑wVir閱讀 754評論 0 0
  • 上一篇中提及,想理解Peer節(jié)點(diǎn)完成的事情,就要分析這幾個(gè)server的工作原理。那gRPC遠(yuǎn)程調(diào)用成為一個(gè)繞不過...
    martin2350閱讀 1,813評論 0 1
  • 原文出處:gRPC gRPC分享 概述 gRPC 一開始由 google 開發(fā),是一款語言中立、平臺中立、開源的遠(yuǎn)...
    小波同學(xué)閱讀 7,689評論 0 18
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,758評論 2 7

友情鏈接更多精彩內(nèi)容