揭秘gRPC:釋放閃電般的通訊能力

2023.10.07

揭秘gRPC:釋放閃電般的通訊能力


在我們深入討論gRPC的細節之前,澄清遠端通訊領域各種術語之間的關係非常重要,這有時可能令人困惑。

RPC — 遠端過程調用

根據維基百科的定義,「在分散式運算中,遠端過程呼叫(RPC)是指電腦程式導致在不同位址空間中執行過程(子程式),通常在共享網路上的另一台電腦上,就好像它是一個正常的(本地)過程調用,程式設計師沒有明確編寫遠端交互的詳細資訊。”

簡而言之,這是一種讓一個電腦程式請求另一個程式執行某項任務的方式,即使它們位於不同的電腦上也可以。這有點像在您的程式中呼叫函數,儘管它是在不同的機器上執行的。這是一種過程調用,就好像它在同一台機器上一樣,但實際上不在同一台機器上,RPC庫/框架負責抽象化所有這些複雜性。

RPC流程

RPC框架負責屏蔽底層的傳輸方法(TCP或UDP)、序列化方法(XML/JSON/二進位)和通訊細節。服務呼叫者可以像呼叫本地介面一樣呼叫遠端服務提供者,而不必關心底層通訊。這涉及到調用的細節和過程。

REST

REST代表表述性狀態傳輸,是一種用於設計網路應用程式的成熟架構風格。RESTful API使用HTTP請求執行CRUD(建立、讀取、更新、刪除)操作,通常表示為URL。REST API以其簡單性和使用GET、POST、PUT和DELETE等標準HTTP方法而聞名。

HTTP

HTTP(超文本傳輸協定)是互聯網上的資料通訊基礎。它定義了訊息的格式和傳輸方式,以及網頁伺服器和瀏覽器如何回應各種命令。HTTP隨著時間的推移而發生了演變,不同版本提供了各種功能和改進:

  • HTTP/1.0:HTTP的第一個版本非常簡單,缺乏許多現代功能。在HTTP/1.0中,每個請求都需要一個新的TCP連接,導致效率低。
  • HTTP/1.1:透過引入保持活動連線的機制,HTTP/1.1改進了HTTP/1.0,允許多個請求和回應在單一TCP連線上發送,從而減少了延遲。然而,它仍然存在一些限制,例如“頭部阻塞”問題,其中一個慢速請求可以阻止同一連接中的後續請求,導致“瀑布”效應。
  • HTTP/2:HTTP/2引入了二進位訊框機制,允許多路復用、請求優先權和頭部壓縮。這些增強顯著提高了網路通訊的效率和速度。它透過允許在單一連接內有多個並發流來消除「頭部阻塞」問題。
  • HTTP/3:最新版本HTTP/3透過使用QUIC傳輸協定進一步提升效能。它側重於減少延遲,特別是在存在高丟包率或不可靠網路的情況下。HTTP/3設計得比其前身更具彈性和高效性。

所以現在我們了解了這些術語。讓我們開始吧!

什麼是gRPC?

gRPC(這裡的「g」代表什麼?)是一種進程間通訊技術,可讓您連接、呼叫、操作和調試分散式異質應用程序,就像進行本地函數呼叫一樣簡單。

當您開發gRPC應用程式時,首先要做的是定義一個服務介面。服務介面定義包含有關如何消費服務的信息,允許消費者呼叫哪些遠端方法,呼叫這些方法時要使用什麼方法參數和訊息格式,等等。我們在服務定義中指定的語言稱為介面定義語言(IDL)。

gRPC使用協定緩衝區作為定義服務介面的IDL。協定緩衝區是一種與語言無關、平台中立、可擴展的機制,用於序列化結構化資料。

gRPC架構

是什麼讓gRPC擁有閃電般的性能?以下是內部情況:

HTTP/2: 2015年,HTTP/2取代了HTTP/1.1,提供了多路復用功能,允許多個請求和回應共享單一連接,提高了效率。

  • 請求/回應多重化: 由於HTTP/2的二進位幀,gRPC可以在單一連線內處理多個請求和回應,徹底改變了通訊效率。
  • 頭部壓縮: HTTP/2的HPack策略壓縮頭部,減少了有效負載大小。再加上gRPC的高效編碼,這使性能非常出色。

Protobuf:秘密武器

gRPC效率遊戲中的關鍵因素之一是協定緩衝區,簡稱Protobuf。Protobuf定義資料結構和函數合約。客戶端和伺服器都需要使用相同的Protobuf語言,這是它們如何相互理解的方式。協定緩衝區(ProtoBuf)在gRPC框架內發揮三個主要作用:定義資料結構、指定服務接口,並透過序列化和反序列化增強傳輸效率。

gRPC的優點有哪些

除了有一個非常可愛的吉祥物外。採用gRPC的原因在於其獨特的優勢:

  • 進程間通訊的效率: 與JSON或XML不同,gRPC使用基於協定緩衝區的二進位協定進行通信,提高了速度。它建立在HTTP/2之上,使其成為最高效的進程間通訊技術之一。
  • 明確定義的服務介面和模式: gRPC鼓勵優先進行合約定義,優先考慮服務介面定義,而不是深入研究實作細節。這種簡單性、一致性、可靠性和可擴展性定義了應用程式開發體驗。
  • 強型別和多語言支援: gRPC使用協定緩衝區來定義服務,清楚地指定了應用程式之間通訊的資料類型。這有助於提高穩定性,並減少運行時和互通性錯誤。此外,gRPC可以與各種程式語言無縫集成,為開發人員提供了選擇其首選語言的靈活性。
  • 雙向流和內建功能: gRPC本地支援客戶端和伺服器端的串流處理,簡化了串流服務和用戶端的開發。它還內建了對關鍵功能的支持,如身份驗證、加密、彈性(包括截止日期和超時)、元資料交換、壓縮、負載平衡和服務發現。
  • 雲端原生整合與成熟性: 作為Cloud Native Computing Foundation(CNCF)的一部分,gRPC與現代框架和技術無縫集成,成為通訊的首選選擇。CNCF中的項目,如Envoy,支援gRPC,並且許多監控工具,包括Prometheus,與gRPC應用程式有效地配合使用。此外,gRPC在Google進行了廣泛測試,並被廣泛採用。