gRPC入門學習之旅(一)
gRPC是一個高效能、通用的開源遠端過程呼叫(RPC)框架,基於底層HTTP/2協議標準
和協議層Protobuf序列化協議
開發,支援眾多的開發語言,由Google開源。
gRPC也是基於以下理念:定義一個服務,指定其能夠被遠端呼叫的方法(包含引數和返回型別)。在服務端實現這個介面,並執行一個 gRPC伺服器來處理客戶端呼叫。在客戶端擁有一個存根能夠像服務端一樣的方法。
gRPC 客戶端和服務端可以在多種環境中執行和互動。你可以用Java建立一個 gRPC 服務端,用 Go、Python、C# 來建立客戶端。
特點:
- 跨語言;
- 基於HTTP/2之上的二進位制協議;
- Protobuf序列化機制,比JSON體積小,網路傳輸快;
- 一個連線上可以多路複用,併發處理多個請求和響應;
- 多種語言的類庫實現;
- 服務定義檔案和自動程式碼生成(.proto 檔案和 Protobuf 編譯工具);
- 適合高效能輕量的微服務,一般對外的介面用Restful API,內部服務的呼叫用gRPC。gRPC是一個分散式服務框架,和以前的WebService,WCF類似;
- gRPC還提供了很多擴充套件點,用於對框架進行功能定製和擴充套件,例如,透過開放負載均衡介面可以無縫的與第三方元件進行整合對接(Zookeeper、域名解析服務、SLB 服務等)。
gRPC 使用 HTTP/2 作為傳輸協議。 雖然與 HTTP 1.1 也能相容,但 HTTP/2 具有許多高階功能:
用於資料傳輸的二進位制組幀協議 - 與 HTTP 1.1 不同,HTTP 1.1 是基於文字的。
對透過同一連線傳送多個並行請求的多路複用支援 - HTTP 1.1 將處理限制為一次處理一個請求/響應訊息。
雙向全雙工通訊,用於同時傳送客戶端請求和伺服器響應。
內建流式處理,支援對大型資料集進行非同步流式處理的請求和響應。
減少網路使用率的標頭壓縮。
gRPC 是輕量型且高效能的。 其處理速度可以比 JSON 序列化快 8 倍,訊息小 60% 到 80%。 在 Microsoft Windows Communication Foundation (WCF) 中,gRPC 的效能超過經過高度最佳化的 NetTCP 繫結的速度和效率。 與偏向於 Microsoft 堆疊的 NetTCP 不同,gRPC 是跨平臺的。
接下來,我們透過一個Demo,來學習一下,如何在Visual Studio 2022中實現gRPC功能。
2、建立gRPC服務端
2.1、建立gRPC服務端專案
1. 開啟Visual Studio 2022,在開始介面中選擇“建立新專案”。如下圖。
2.或者在選單上點選檔案—>新建—>專案—>彈出“建立新專案”的介面。如下圖。
3. Visual Studio 2022彈出的“建立新專案”的對話方塊中做如下選擇。如下圖。
- 在最左邊的下拉框中,選擇 “C# ,如下圖中1處
- 在中間的下拉框中,選擇 “所有平臺”,如下圖2處。
- 在最右邊的下拉框中,選擇“Web”,如下圖3處。
- 在下圖中4處,選擇“ASP.NET Core gRPC服務”gRPC專案模板,點選“下一步”按鈕。
4.在彈出的“配置新專案”的對話方塊中,如下圖,在“專案名稱”輸入框中,輸入“Demo.GrpcService”。然後使用滑鼠點選“下一步”按鈕。
5. 在彈出的“其他資訊”的對話方塊,如下圖。在“框架”下拉框中,選擇“NET 7.0(標準期限支援)”。其他值選擇預設值即可。然後使用滑鼠點選“建立”按鈕。
6.預設專案檔案結構,如下圖所示:
2.2、專案檔案說明
- appsettings.json
我們開啟appsettings.json檔案,其中有一個Protocols
屬性,代表基於Http2進行通訊。
- Protos
在建立的專案中,我們會看到有一個名稱為Protos
的資料夾,該資料夾用於存放proto協議檔案,其中的greet.proto是專案預設給我們建立的一個示例檔案,它會根據協議自動生成需要的類檔案。該協議檔案中的具體說明如下圖所示:
- Services
在建立的專案中,我們會看到有一個名稱Services
的資料夾,該資料夾用於存放具體的業務實現類(即:服務類),其中的GreeterService.cs是專案預設給我們建立的一個示例檔案,具體說明如下圖所示:
上述圖中的Greeter.GreeterBase來自greet.proto檔案生成的類檔案,具體位置如下圖所示:
- 註冊服務
在Visual Studio 2022的“解決方案資源管理器”中找到Program.cs檔案,使用滑鼠雙擊開啟Program.cs
檔案,在這個檔案中需要新增gRPC服務,同時需要將所有的業務服務進行註冊,如下圖所示: