1. 程式人生 > 其它 >grpc協議

grpc協議

gRPC詳解

gRPC是什麼?

gRPC是什麼可以用官網的一句話來概括

A high-performance, open-source universal RPC framework

所謂RPC(remote procedure call 遠端過程呼叫)框架實際是提供了一套機制,使得應用程式之間可以進行通訊,而且也遵從server/client模型。使用的時候客戶端呼叫server端提供的介面就像是呼叫本地的函式一樣。如下圖所示就是一個典型的RPC結構圖。

gRPC有什麼好處以及在什麼場景下需要用gRPC

既然是server/client模型,那麼我們直接用restful api不是也可以滿足嗎,為什麼還需要RPC呢?下面我們就來看看RPC到底有哪些優勢

gRPC vs. Restful API

gRPC和restful API都提供了一套通訊機制,用於server/client模型通訊,而且它們都使用http作為底層的傳輸協議(嚴格地說, gRPC使用的http2.0,而restful api則不一定)。不過gRPC還是有些特有的優勢,如下:

  • gRPC可以通過protobuf來定義介面,從而可以有更加嚴格的介面約束條件。關於protobuf可以參見筆者之前的小文Google Protobuf簡明教程
  • 另外,通過protobuf可以將資料序列化為二進位制編碼,這會大幅減少需要傳輸的資料量,從而大幅提高效能。
  • gRPC可以方便地支援流式通訊(理論上通過http2.0就可以使用streaming模式, 但是通常web服務的restful api似乎很少這麼用,通常的流式資料應用如視訊流,一般都會使用專門的協議如HLS,RTMP等,這些就不是我們通常web服務了,而是有專門的伺服器應用。)

使用場景

  • 需要對介面進行嚴格約束的情況,比如我們提供了一個公共的服務,很多人,甚至公司外部的人也可以訪問這個服務,這時對於介面我們希望有更加嚴格的約束,我們不希望客戶端給我們傳遞任意的資料,尤其是考慮到安全性的因素,我們通常需要對介面進行更加嚴格的約束。這時gRPC就可以通過protobuf來提供嚴格的介面約束。
  • 對於效能有更高的要求時。有時我們的服務需要傳遞大量的資料,而又希望不影響我們的效能,這個時候也可以考慮gRPC服務,因為通過protobuf我們可以將資料壓縮編碼轉化為二進位制格式,通常傳遞的資料量要小得多,而且通過http2我們可以實現非同步的請求,從而大大提高了通訊效率。

但是,通常我們不會去單獨使用gRPC,而是將gRPC作為一個部件進行使用,這是因為在生產環境,我們面對大併發的情況下,需要使用分散式系統來去處理,而gRPC並沒有提供分散式系統相關的一些必要元件。而且,真正的線上服務還需要提供包括負載均衡,限流熔斷,監控報警,服務註冊和發現等等必要的元件。不過,這就不屬於本篇文章討論的主題了,我們還是先繼續看下如何使用gRPC。