Protocol Buffers - 簡介



在我們深入瞭解 Protocol Buffer 之前,讓我們先簡單回顧一下序列化,這是 Protocol Buffer 所做的事情。

什麼是序列化和反序列化?

序列化是將物件(任何語言的物件)轉換為位元組並將其儲存在永續性記憶體系統中的過程。這個記憶體系統可以是磁碟上的檔案、訊息佇列或資料庫。物件序列化主要目的是我們可以重用資料並在相同或不同的機器上重新建立物件。在反序列化中,我們將儲存的位元組轉換回物件。

為什麼我們需要序列化和反序列化?

雖然還有其他一些用例,但最基本和最重要的用例是它提供了一種方法,可以透過網路將物件資料傳輸到不同的服務/機器等,然後重新建立物件以供進一步使用。透過 API、資料庫或訊息佇列傳輸物件資料需要將物件轉換為位元組,以便可以透過網路傳送。這就是序列化變得重要的原因。

在微服務架構中,應用程式被分解成小的服務,這些服務透過訊息佇列和 API 相互通訊。所有這些通訊都發生在網路上,這需要頻繁地將物件轉換為位元組,然後轉換回物件。因此,序列化和反序列化在分散式環境中變得非常關鍵。

為什麼選擇 Google Protocol Buffers?

Google Protocol Buffers 執行將物件序列化和反序列化為位元組的過程,這些位元組可以透過網路傳輸。但也有一些其他庫和機制可以傳輸資料。

那麼,是什麼讓 Google Protocol Buffers 如此特別呢?以下是它的一些重要特性:

  • 語言無關 - 多種語言都具有 Protocol Buffers 庫,其中一些著名的語言包括 Java、Python、Go 等。因此,Java 物件可以由 Java 程式序列化為位元組,並可以反序列化為 Python 物件。

  • 高效的資料壓縮 - 在微服務環境中,由於網路上發生多次通訊,因此確保傳送的資料儘可能簡潔至關重要。我們需要避免任何多餘的資訊,以確保資料快速傳輸。Google Protocol Buffers 將此作為重點關注領域之一。

  • 高效的序列化和反序列化 - 在微服務環境中,由於網路上發生多次通訊,因此序列化和反序列化的速度至關重要。Google Protocol Buffers 確保序列化和反序列化資料的速度儘可能快。

  • 易於使用 - Protocol Buffers 庫自動生成序列化程式碼(我們將在接下來的章節中看到),具有版本控制方案,以確保資料建立者和資料使用者可以擁有序列化定義的不同版本等。

Protocol Buffers 與其他方案比較 (XML/JSON/Java 序列化)

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

特性 Protocol Buffers JSON XML
語言無關性
序列化資料大小 三者中最少 小於 XML 三者中最大
人類可讀性 否,因為它使用單獨的編碼方案 是,因為它使用基於文字的格式 是,因為它使用基於文字的格式
序列化速度 三者中最快的 比 XML 快 三者中最慢的
資料型別支援 比其他兩個更豐富。支援複雜的資料型別,如 Any、oneof 等。 支援基本資料型別 支援基本資料型別
支援演化架構
廣告

© . All rights reserved.