使用gRPC和protobuf建立高效能的API

banq發表於2016-10-25
API是現代應用的主要技術。API能夠增強web客戶端與移動客戶端和後端的互動通訊,無需顧及他們的技術和平臺的不同。當你構建基於web的api時,你通常選擇rest風格的api。使用JSON作為應用程式之間交換資料的標準。

現在我們構建雲時代的雲原生應用時,微服務能夠有非常好的擴充套件性能。我們需要在各種微服務之間有一種高效能的通訊機制。那麼,基於JSON的api能否提供高效能和高擴充套件性將會是一個問題。JSON是應用之間快速交換資料的格式嗎?rest風格的架構有能力建立複雜的api嗎?我們能夠很容易地使用Restful架構建立雙向的流API?http2提供了比他以前版本更多的功能,這樣我們需要平衡這些新技術來構建下一代的api,這就需要使用gRPC和protocol buffers。

介紹Protocol Buffers
也稱protobuf,是谷歌的語言中立、平臺中立的可擴充套件的序列化結構資料。Protocol buffers更小,更快,更簡單,相比XML和JSON提供了更高效能。

利用protobuf,,你可以定義你的結構化資料,然後生成你選擇程式語言的原始碼,使用稱為protoc的編譯器編譯,編寫和讀取你的結構化資料。當前protocol buffers是proto3,支援C++, Go, Java, Python, Ruby, 和 C#

為了從protocol buffers定義檔案生成程式碼,按以下步驟:
1.從https://github.com/google/protobuf.下載protoc編譯器,將本地protoc庫包檔案加入PATH環境,這樣能呼叫protoc編譯器。

2.安裝protoc語言外掛,Go語言使用:
go get -u github.com/golang/protobuf/protoc-gen-go

gRPC介紹
gRPC是一個高效能開源遠端過程呼叫RPC框架,可以執行在客戶端或伺服器端等各個地方,只要想建立通訊。gRPC框架是由Google開發,他們在各種雲產品中使用它已經很長一段時間。

gRPC遵循HTTP/2語義,它允許您建立帶有同步和非同步的通訊模型的服務。它支援傳統的請求/響應模型和雙向流。它能夠建設全雙工流,讓您在各種超強場景下使用:客戶端和伺服器應用程式可以非同步傳送資料流。帶有GRPC移動客戶端了會給你很多效能優點和易於消費的API。

預設gRPC使用 Protocol Buffers作為其介面定義語言IDL,也作為其底層的訊息交換格式。不像JSON和XML,Protocol Buffers
不僅是訊息交換格式,它也用於描述服務介面(服務端點)。因此,它既可用於服務介面也可用於高效的訊息結構。

在gRPC中,你能使用payload訊息定義服務和它的方法,像一個客戶端應用程式和一個RPC系統之間的典型的通訊,客戶端應用程式可以直接呼叫在遠端伺服器上方法,好像是在呼叫客戶端應用程式的本地物件一樣。

參考下文學習使用gRPC和Protocol Buffers基於Go語言建立一個API案例:

Building High Performance APIs In Go Using gRPC An

該API案例原始碼:github

[該貼被admin於2016-10-25 13:40修改過]

相關文章