揭秘gRPC:釋放閃電般的通信能力
在我們深入討論gRPC的細節(jié)之前,澄清遠程通信領域各種術語之間的關系非常重要,這有時可能令人困惑。
RPC — 遠程過程調(diào)用
根據(jù)維基百科的定義,“在分布式計算中,遠程過程調(diào)用(RPC)是指計算機程序?qū)е略诓煌刂房臻g中執(zhí)行過程(子程序),通常在共享網(wǎng)絡上的另一臺計算機上,就好像它是一個正常的(本地)過程調(diào)用,程序員沒有明確編寫遠程交互的詳細信息。”
簡而言之,這是一種讓一個計算機程序請求另一個程序執(zhí)行某項任務的方式,即使它們位于不同的計算機上也可以。這有點像在您的程序中調(diào)用一個函數(shù),盡管它是在不同的機器上執(zhí)行的。這是一種過程調(diào)用,就好像它在同一臺機器上一樣,但實際上不在同一臺機器上,RPC庫/框架負責抽象化所有這些復雜性。
RPC流程
RPC框架負責屏蔽底層的傳輸方法(TCP或UDP)、序列化方法(XML/JSON/二進制)和通信細節(jié)。服務調(diào)用者可以像調(diào)用本地接口一樣調(diào)用遠程服務提供者,而不必關心底層通信。這涉及到調(diào)用的細節(jié)和過程。
REST
REST代表表述性狀態(tài)傳輸,是一種用于設計網(wǎng)絡應用程序的成熟架構風格。RESTful API使用HTTP請求執(zhí)行CRUD(創(chuàng)建、讀取、更新、刪除)操作,通常表示為URL。REST API以其簡單性和使用GET、POST、PUT和DELETE等標準HTTP方法而聞名。
HTTP
HTTP(超文本傳輸協(xié)議)是互聯(lián)網(wǎng)上的數(shù)據(jù)通信基礎。它定義了消息的格式和傳輸方式,以及Web服務器和瀏覽器如何響應各種命令。HTTP隨著時間的推移發(fā)生了演變,不同版本提供了各種功能和改進:
- HTTP/1.0:HTTP的第一個版本非常簡單,缺少許多現(xiàn)代功能。在HTTP/1.0中,每個請求都需要一個新的TCP連接,導致效率低下。
- HTTP/1.1:通過引入保持活動連接的機制,HTTP/1.1改進了HTTP/1.0,允許多個請求和響應在單個TCP連接上發(fā)送,從而減少了延遲。然而,它仍然存在一些限制,比如“頭部阻塞”問題,其中一個慢速請求可以阻止同一連接中的后續(xù)請求,導致“瀑布”效應。
- HTTP/2:HTTP/2引入了二進制幀機制,允許多路復用、請求優(yōu)先級和頭部壓縮。這些增強顯著提高了網(wǎng)絡通信的效率和速度。它通過允許在單個連接內(nèi)有多個并發(fā)流來消除“頭部阻塞”問題。
- HTTP/3:最新版本HTTP/3通過使用QUIC傳輸協(xié)議進一步提高性能。它側(cè)重于減少延遲,特別是在存在高丟包率或不可靠網(wǎng)絡的情況下。HTTP/3設計得比其前身更具彈性和高效性。
所以現(xiàn)在我們了解了這些術語。讓我們開始吧!
什么是gRPC?
gRPC(這里的“g”代表什么?)是一種進程間通信技術,允許您連接、調(diào)用、操作和調(diào)試分布式異構應用程序,就像進行本地函數(shù)調(diào)用一樣簡單。
當您開發(fā)gRPC應用程序時,首先要做的是定義一個服務接口。服務接口定義包含有關如何消費服務的信息,允許消費者調(diào)用哪些遠程方法,調(diào)用這些方法時要使用什么方法參數(shù)和消息格式,等等。我們在服務定義中指定的語言稱為接口定義語言(IDL)。
gRPC使用協(xié)議緩沖區(qū)作為定義服務接口的IDL。協(xié)議緩沖區(qū)是一種與語言無關、平臺中立、可擴展的機制,用于序列化結構化數(shù)據(jù)。
gRPC架構
是什么讓gRPC擁有閃電般的性能?以下是內(nèi)部情況:
HTTP/2: 2015年,HTTP/2取代了HTTP/1.1,提供了多路復用功能,允許多個請求和響應共享單個連接,提高了效率。
- 請求/響應多路復用: 由于HTTP/2的二進制幀,gRPC可以在單個連接內(nèi)處理多個請求和響應,徹底改變了通信效率。
- 頭部壓縮: HTTP/2的HPack策略壓縮頭部,減小了有效負載大小。再加上gRPC的高效編碼,這使性能非常出色。
Protobuf:秘密武器
gRPC效率游戲中的關鍵因素之一是協(xié)議緩沖區(qū),簡稱Protobuf。Protobuf定義數(shù)據(jù)結構和函數(shù)合同。客戶端和服務器都需要使用相同的Protobuf語言,這是它們?nèi)绾蜗嗷ダ斫獾姆绞健f(xié)議緩沖區(qū)(ProtoBuf)在gRPC框架內(nèi)發(fā)揮三個主要作用:定義數(shù)據(jù)結構、指定服務接口,并通過序列化和反序列化增強傳輸效率。
gRPC的優(yōu)勢有哪些
除了有一個非常可愛的吉祥物外。采用gRPC的原因在于其獨特的優(yōu)勢:
- 進程間通信的效率: 與JSON或XML不同,gRPC使用基于協(xié)議緩沖區(qū)的二進制協(xié)議進行通信,提高了速度。它建立在HTTP/2之上,使其成為最高效的進程間通信技術之一。
- 明確定義的服務接口和模式: gRPC鼓勵優(yōu)先進行合同定義,優(yōu)先考慮服務接口定義,而不是深入研究實現(xiàn)細節(jié)。這種簡單性、一致性、可靠性和可擴展性定義了應用程序開發(fā)體驗。
- 強類型和多語言支持: gRPC使用協(xié)議緩沖區(qū)來定義服務,清晰地指定了應用程序之間通信的數(shù)據(jù)類型。這有助于提高穩(wěn)定性,并減少運行時和互操作性錯誤。此外,gRPC可以與各種編程語言無縫集成,為開發(fā)人員提供了選擇其首選語言的靈活性。
- 雙向流和內(nèi)置功能: gRPC本地支持客戶端和服務器端的流式處理,簡化了流式服務和客戶端的開發(fā)。它還內(nèi)置了對關鍵功能的支持,如身份驗證、加密、彈性(包括截止日期和超時)、元數(shù)據(jù)交換、壓縮、負載均衡和服務發(fā)現(xiàn)。
- 云原生集成和成熟性: 作為Cloud Native Computing Foundation(CNCF)的一部分,gRPC與現(xiàn)代框架和技術無縫集成,成為通信的首選選擇。CNCF中的項目,如Envoy,支持gRPC,并且許多監(jiān)控工具,包括Prometheus,與gRPC應用程序有效地配合使用。此外,gRPC在Google進行了廣泛測試,并被廣泛采用。