.Net Core gRPC 是怎麼樣的?

cxu0262發表於2020-05-21

深入研究Microsoft平臺(如.Net)的主要版本附帶的協議和服務總是很有趣。 .Net Core 3.0的釋出沒有什麼不同,增加了對相對較新的但同樣重要的協議gRPC的本地支援。

gRPC最初是作為Google協議緩衝區序列化技術的擴充套件而開發的,它採用了熟悉的遠端過程呼叫概念,並將其帶入了現代分散式系統開發。 它是用於將微服務彼此連結以及將客戶端應用程式連結至後端的強大工具。 現在,由Cloud Native Computing Foundation支援的 gRPC是開源的,可以在大多數熟悉的語言和平臺上實現。

內部gRPC

gRPC的核心是基於協議緩衝區的服務描述。 遠端過程呼叫始終需要一種方法來定義客戶端所針對的服務介面:期望作為請求的內容,以及作為響應傳送的內容。 這些介面定義是gRPC的核心 。 它們構成了我們圍繞雲服務構建的基於API的分散式計算世界的基礎。

遠端過程呼叫具有自己的設計模式,而gRPC支援四種最常見的服務描述。 首先是熟悉的單一過程呼叫,其中單個請求接收單個響應。 然後有兩種受控的流式RPC選項:一種是伺服器傳送資料流以響應請求,另一種是客戶端傳送資料流而伺服器傳送響應。 最後,在雙向流傳輸中,客戶端和伺服器都傳送獨立的資料流,其中可能包含多個請求和響應。

gRPC將使用協議緩衝區介面定義自動建立RPC連線每一端所需的客戶端和伺服器程式碼。 您將需要在伺服器上實現方法並在客戶端上實現呼叫,以實現gRPC API。 gRPC並不限制您進行同步或非同步RPC呼叫; 您可以選擇同時使用兩者。 實際上,您可能更希望使用非同步呼叫,因為它們更適合使用公共Internet的現代應用程式。

按合同設計是API開發的關鍵概念。 您從API定義(此處為協議緩衝區介面定義)開始,定義要構建的服務及其支援的訊息。 協議緩衝原型檔案的語法非常簡單:一行定義了服務,其呼叫和返回。 檔案的其餘部分定義了服務使用的訊息。

將gRPC新增到.Net Core

NuRPC提供了gRPC的.Net Core版本grpc-dotnet ,可與.Net Core 3.0 SDK的發行版本一起使用。 儘管已經存在第三方.Net gRPC實現,但此版本使gRPC成為一流的.Net公民,並且是在應用程式中構建API的重要工具。 grpc-dotnet用C#編寫, 很容易新增到您的程式碼中 ,可以使用命令列工具來構建服務或在熟悉的Visual Studio中工作。 .Net Core 3.0的釋出為Visual Studio新增了對協議緩衝區的支援,因此您可以在與程式碼相同的環境中建立和編輯介面定義。 將定義另存為protobuf檔案後,相同的工具將生成客戶端和伺服器程式碼。

如果要向.Net Framework應用程式新增gRPC支援,則還有一個替代的C#gRPC軟體包,其中提供了許多相同的API。 微軟表示,該軟體包將繼續可用,因為grpc-dotnet僅適用於.Net Core。

使gRPC支援成為可能的.Net Core 3.0中的關鍵更改是其對HTTP / 2的直接支援。 gRPC旨在利用HTTP / 2功能,預設的.Net Core HTTP伺服器不支援該功能。 這樣可以更輕鬆地將gRPC支援包括在ASP.Net Core中,以使用它託管您的微服務。 在客戶端,客戶端程式包建立在.Net現有的HttpClient API的基礎上,使其成為越來越多的可使用.Net的HTTP和HTTP / 2支援的程式包的一部分。

gRPC-dotnet入門

微軟正在GitHub上開發其gRPC平臺 ,並且可以在此處找到許多所需的文件。 一旦安裝了.Net Core 3.0 SDK,入門就非常容易。 首先在Visual Studio中建立一個gRPC Service專案。 這將為您的介面定義以及該服務的程式碼建立一個原型檔案。 在生成程式碼之前,您需要從NuGet下載並安裝gRPC客戶端軟體包,Google Proto Buffers和Grpc.tools軟體包。 現在,您可以在為客戶端和伺服器編寫程式碼之前,建立原型檔案並生成gRPC服務和客戶 。 如果您需要隨時更改介面定義,請編輯原型檔案並儲存,然後Visual Studio會為您生成程式碼。

如果您過去使用過Windows Communication Foundation(WCF),則應該找到gRPC一個不錯的選擇。 它比WCF更適合跨資料中心邊界的應用程式,因為它是針對HTTP / 2連線而設計的,不但簡化了應用程式體系結構,而且簡化了防火牆策略。 除了使用複雜的防火牆規則,您還可以在類似Azure Front Door的環境中使用Web應用程式防火牆,並使用其負載平衡器來實現可伸縮性。

.Net中gRPC支援的真正好處不是讓您的程式碼與其他服務更容易互操作,而是從程式碼中刪除處理的各個層次。 您無需管理序列化為JSON或XML或管理REST呼叫。 一旦在協議緩衝區中定義了介面,其他所有事務都會為您處理。 您所需要做的就是構建伺服器方法和客戶端呼叫,並且gRPC會為您填補兩個端點之間的空白,無論它們是在同一網段還是在世界的相反端。

像最好的遠端過程一樣,gRPC是一種將客戶端和伺服器橋接的方式,將它們視為單個應用程式。 在微服務中使用gRPC可簡化整個應用程式架構,使您有機會在方法級別分離服務。 每次更改protobuf檔案時,Visual Studio都會自動生成新的gRPC介面,因此無需重新構建整個應用程式就可以新增新服務。

From: https://www.infoworld.com/article/3442216/grpc-in-net-core.html

相關文章