什么是 Google Protocol Buffer?

Google Protocol Buffer( 簡稱 Protobuf) 是 Google 公司內(nèi)部的混合語言數(shù)據(jù)標準,目前已經(jīng)正在使用的有超過 48,162 種報文格式定義和超過 12,183 個 .proto 文件。他們用于 RPC 系統(tǒng)和持續(xù)數(shù)據(jù)存儲系統(tǒng)。

Protocol Buffers 是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化,或者說序列化。它很適合做數(shù)據(jù)存儲或 RPC 數(shù)據(jù)交換格式??捎糜谕ㄓ崊f(xié)議、數(shù)據(jù)存儲等領域的語言無關(guān)、平臺無關(guān)、可擴展的序列化結(jié)構(gòu)數(shù)據(jù)格式。目前提供了 多種語言的API,包括C++、 C# 、GO、 JAVA、 PYTHON

如果你并不了解Protobuf能做什么,建議結(jié)合google搜索關(guān)鍵字,看一下入門級別的文章,或者看一下官方文檔中的Developer Guide,或者中文的開發(fā)指南 .官方的文檔中有各種語言相關(guān)的示例,可以結(jié)合代碼看一下實際的用法。

很多人說為什么不用json(或者xml), 答案很簡單,Protobuf更小,更簡潔,而且序列化和反序列化更快!

谷歌最新開源的gRpc框架就是默認使用Protobuf作為數(shù)據(jù)傳輸格式和服務描述文件。對于gRpc 就不做詳細介紹了,有興趣的可以看一下官網(wǎng)。

言歸正傳,在實際使用Protobuf過程中,我發(fā)現(xiàn)Protobuf不但可以編寫描述消息(Message)的內(nèi)容,同時可以表述其他方法(類似Rpc中的方法),主要是gRpc中看到的。同時在Protobuf 代碼生成工具的包中,有一個這樣的目錄,一致以來都沒搞明白是做什么用的,如下圖:

在目錄中存在大量已經(jīng)定義好的proto文件,其實這些文件是Protobuf的描述文件,類似元數(shù)據(jù)。用本身的語法描述本身,同時通過這些文件生成對應的語言的元數(shù)據(jù)類等代碼,比如在C#版本的Google.Protobuf中就能看到上述描述文件生成的類,如下圖所示