gRPC 爲什麼這麼快?

RPC(Remote Procedural Call, 遠程過程調用)之所以被稱爲 remote,因爲在微服務架構下,RPC 可以實現遠程服務之間的通信。從服務調用者的角度來看,它就像一個本地函數調用。

下圖說明了 gRPC 的數據流。

和廣泛用於前後端通信的 REST 相比,gRPC 普遍用於服務間通信。並且,REST 不是一個協議,它只是一個基於 HTTP 協議的設計範式。gRPC 針對傳輸層和數據編解碼都進行了優化,使得它的效率更高。

雖然 RPC 調用在微服務中被廣泛採用,神書 DDIA (Designing Data-Intensive Applications) 中列舉了一些 RPC 的侷限性:

  1. 本地函數調用的結果是可預測的,而 RPC 需要經過網絡傳輸,數據在中途可能因爲各種原因丟失。

  2. RPC 調用有可能超時,編寫程序時需要考慮該情況。

  3. 重試一個失敗的 RPC 調用有可能造成數據重複,需要考慮冪等。

  4. 由於傳輸數據時需要序列化和反序列化,RPC 在傳輸複雜對象時會不太方便。

正是因爲這些原因,讓遠程調用看上去像是一個本地調用的編程思想值得商榷。開發者在使用 RPC 時需要有針對性地進行容錯處理。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/MVGT_J5qlnTKqx-ZDL062A