第三十三節:.Net Core下的gRPC詳細介紹


一. 簡介

1.什么是RPC

 RPC指遠程調用(即要像調用本地方法一樣調用遠程方法). eg: 兩台機器,A 機器上的程序要調用 B 機器上某程序提供的函數或方法,由於不在一個內存空間,不能直接調用,需要通過網絡來表達調用的語義和傳達調用的數據。

 常見的有:Thrift、gRPC

2.什么是gRPC

 gRPC 是一種與語言無關的高性能遠程過程調用 (RPC) 框架。

 GitHub地址:https://github.com/grpc

3.gRPC的優點

 (1).現代高性能輕量級 RPC 框架。

 (2).協定優先 API 開發,默認使用協議緩沖區,允許與語言無關的實現。

 (3).可用於多種語言的工具,以生成強類型服務器和客戶端。

 (4).支持客戶端、服務器和雙向流式處理調用。

 (5).使用 Protobuf 二進制序列化減少對網絡的使用。

4.gRPC的適用范圍

 (1).效率至關重要的輕量級微服務。

 (2).需要多種語言用於開發的 Polyglot 系統。

 (3).需要處理流式處理請求或響應的點對點實時服務。

注:Azure 應用服務或 IIS 當前不支持 ASP.NET Core gRPC。 Http.Sys 的 HTTP/2 實現不支持 gRPC 依賴的 HTTP 響應尾隨標頭。

 

二. 詳解

 1. gRPC和WebApi對比

 

 

2. gRPC的優勢

(1). 性能

 gRPC 消息使用 Protobuf(一種高效的二進制消息格式)進行序列化。 Protobuf 在服務器和客戶端上可以非常快速地序列化。 Protobuf 序列化產生的有效負載較小,這在移動應用等帶寬有限的方案中很重要。

 gRPC 專為 HTTP/2(HTTP 的主要版本)而設計,與 HTTP 1.x 相比,HTTP/2 具有巨大性能優勢:

  A. 二進制組幀和壓縮。 HTTP/2 協議在發送和接收方面均緊湊且高效。

  B. 在單個 TCP 連接上多路復用多個 HTTP/2 調用。 多路復用可消除隊頭阻塞

 HTTP/2 不是 gRPC 獨占的。 許多請求類型(包括使用 JSON 的 HTTP API)都可以使用 HTTP/2,並受益於其性能改進。

(2). 代碼生成

 所有 gRPC 框架都為代碼生成提供一流支持。 .proto 文件是 gRPC 開發的核心文件,它定義 gRPC 服務和消息的協定。 通過此文件,gRPC 框架編碼生成服務基類、消息和完整的客戶端。

 通過在服務器和客戶端之間共享 .proto 文件,可以端到端生成消息和客戶端代碼。 客戶端的代碼生成消除了客戶端和服務器上的消息重復,並為你創建強類型客戶端。 無需編寫客戶端可在具有許多服務的應用程序中節省大量開發時間。

(3). 嚴格規范

 具有 JSON 的 HTTP API 沒有正式規范。 開發人員為 URL、HTTP 謂詞和響應代碼的最佳格式爭論不休。

   gRPC 規范對 gRPC 服務必須遵循的格式進行了規定。 gRPC 消除了爭論並為開發人員節省了時間,因為 gRPC 在各個平台和實現中都是一致的。

(4). 流式處理

 HTTP/2 為長期實時通信流提供基礎。 gRPC 為通過 HTTP/2 進行流式傳輸提供一流支持。gRPC 服務支持所有流式傳輸組合:

  A. 一元(無流式傳輸)

  B. 服務器到客戶端流式傳輸

  C. 客戶端到服務器流式傳輸

  D. 雙向流式傳輸

(5). 截止時間、超時和取消

 gRPC 允許客戶端指定其願意等待 RPC 完成的時間期限。 截止時間會發送到服務器,如果超過截止時間,服務器可以決定要執行的操作。 例如,服務器可能會在超時后取消正在進行的 gRPC/HTTP/數據庫請求。

 通過 gRPC 子調用傳播截止時間和取消有助於強制執行資源使用限制。

3. gRPC的劣勢

 當前無法通過瀏覽器直接調用 gRPC 服務。 gRPC 大量使用 HTTP/2 功能,且沒有瀏覽器在 Web 請求中提供支持 gRPC 客戶端所需的控制級別。 例如,瀏覽器不允許調用方要求使用 HTTP/2,也不提供對 HTTP/2 基礎框架的訪問。

 gRPC-Web是 gRPC 團隊的另一項技術,可在瀏覽器中提供有限的 gRPC 支持。 gRPC-Web 由兩部分組成:支持所有現代瀏覽器的 JavaScript 客戶端,以及服務器上的 gRPC-Web 代理。 gRPC-Web 客戶端調用代理,代理將根據 gRPC 請求轉發到 gRPC 服務器。

 gRPC-Web 並不支持所有 gRPC 功能。 不支持客戶端和雙向流式傳輸,並且對服務器流式傳輸的支持有限。

4. gRPC適用場景

 (1). 微服務:gRPC 設計用於低延遲和高吞吐量通信。 gRPC 對於效率至關重要的輕量級微服務非常有用。

 (2). 點對點實時通信:gRPC 對雙向流式傳輸提供出色的支持。 gRPC 服務可以實時推送消息而無需輪詢。

 (3). 多語言環境:gRPC 工具支持所有常用的開發語言,因此,gRPC 是多語言環境的理想選擇。

 (4). 網絡受限環境:gRPC 消息使用 Protobuf(一種輕量級消息格式)進行序列化。 gRPC 消息始終小於等效的 JSON 消息。

5. gRPC備用方案

 在以下方案中,建議使用其他框架取代 gRPC:

 (1). 瀏覽器可訪問的 API:gRPC 在瀏覽器中未受到完全支持。 gRPC-Web 可以提供瀏覽器支持,但它具有局限性並引入了服務器代理。

 (2). 廣播實時通信:gRPC 支持通過流式傳輸進行實時通信,但不存在將消息廣播到注冊連接的概念。 例如,在聊天室方案中,應將新的聊天消息發送到聊天室中的所有客戶端,這要求每個 gRPC 調用將新的聊天消息單獨流式傳輸到客戶端。 SignalR 是適用於此方案的框架。 SignalR 具有持久性連接的概念,並內置對廣播消息的支持。

 (3). 進程間通信:進程必須托管 HTTP/2 服務器才能接受傳入的 gRPC 調用。 對於 Windows,進程間通信管道是一種快速、輕便的通信方法。

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM