gRPC - 簡介



在深入瞭解 gRPC 之前,讓我們簡要了解一下遠端過程呼叫 (RPC),這是 gRPC 的工作原理。

什麼是遠端過程呼叫?

遠端過程呼叫看起來像是普通的/本地函式呼叫,但不同之處在於遠端函式呼叫的執行通常發生在不同的機器上。但是,對於編寫程式碼的開發者來說,函式呼叫和遠端呼叫之間的區別很小。這些呼叫通常遵循客戶端-伺服器模型,其中執行呼叫的機器充當伺服器。

為什麼我們需要遠端過程呼叫?

遠端過程呼叫提供了一種在另一臺機器上執行程式碼的方法。在大型複雜的產品中,單臺機器無法承載產品正常執行所需的所有程式碼,因此遠端過程呼叫至關重要。

在微服務架構中,應用程式被分解成小的服務,這些服務透過訊息佇列和 API 相互通訊。所有這些通訊都透過網路進行,不同的機器/節點根據它們承載的服務提供不同的功能。因此,在分散式環境中工作時,建立遠端過程呼叫就成為一個關鍵方面。

為什麼選擇 gRPC?

Google 遠端過程呼叫 (gRPC) 提供了一個執行遠端過程呼叫的框架。但是,還有一些其他的庫和機制可以在遠端機器上執行程式碼。那麼,是什麼讓 gRPC 與眾不同呢?讓我們來看看。

  • 語言無關性 - gRPC 在內部使用 Google Protocol Buffer。因此,可以使用多種語言,例如 Java、Python、Go、Dart 等。Java 客戶端可以進行過程呼叫,而使用 Python 的伺服器可以做出響應,從而有效地實現語言無關性。

  • 高效的資料壓縮 - 在微服務環境中,由於多個通訊透過網路進行,因此我們傳送的資料越簡潔越好。我們需要避免任何冗餘資料,以確保資料的快速傳輸。由於 gRPC 在內部使用 Google Protocol Buffer,因此它具有此優勢。

  • 高效的序列化和反序列化 - 在微服務環境中,由於多個通訊透過網路進行,因此我們儘可能快速地序列化和反序列化資料至關重要。由於 gRPC 在內部使用 Google Protocol Buffer,因此它確保了資料的快速序列化和反序列化。

  • 簡單易用 - gRPC 已經擁有一個庫和外掛,可以自動生成過程程式碼(我們將在接下來的章節中看到)。對於簡單的用例,它可以像本地函式呼叫一樣使用。

gRPC 與使用 JSON 的 REST 的比較

讓我們看看其他透過網路傳輸資料的方式與 Protobuf 相比如何。

特性 gRPC 使用 JSON/XML 的 HTTP
語言無關性
HTTP 版本 HTTP/2 HTTP 1.1
指定域模式 .proto 檔案(Google Protocol Buffer)
序列化資料大小 最小 高(XML 更高)
人類可讀 否,因為它使用單獨的編碼模式 是,因為它使用基於文字的格式
序列化速度 最快 較慢(XML 最慢)
資料型別支援 更豐富。支援複雜資料型別,如 Any、oneof 等。 支援基本資料型別
支援演進模式
廣告