.NET Core 3.1 的REST 和gRPC 性能測試


看到越南小哥 的github 上的Evaluating Performance of REST vs. gRPC , 使用的是.NET Core 3.0 , 今天我把它升級到.NET Core 3.1 同樣做了一個測試,文章的結果和他的博客文章是一樣的:https://dev.to/thangchung/performance-benchmark-grpc-vs-rest-in-net-core-3-preview-8-45ak

在8年前我寫過一篇文章:WCF和ASP.NET Web API在應用上的選擇。 現在是2020年了,WCF換成了gRPC, ASP.NET Web API換成了ASP.NET Core Web API, 對外提供標准化的REST服務,內部通信采用gRPC的也是新時代的.NET應用程序的一個好選擇,類似於Kubernetes 架構將有效負載格式用於傳輸協議的方式。

image

我們來看下.NET Core 3.1下REST和gRPC的性能表現怎么樣? 從 https://github.com/geffzhang/RESTvsGRPC 下載代碼。在測試機器上安裝.NET Core 3.1。

  • REST API:
 cd RESTvsGRPC\RestAPI
 dotnet run -p RestAPI.csproj -c Release
  • gRPC API:
 cd RESTvsGRPC\GrpcAPI
 dotnet run -p GrpcAPI.csproj -c Release
  • 基准項目:
 cd RESTvsGRPC\RESTvsGRPC
 dotnet run -p RESTvsGRPC.csproj -c Release

等待完成測試后,我們將會得到類似下面的結果,具體的結果依賴於你的測試機器配置,我使用Win10 的Surface Book 2上面完成的下面的測試結果:
image
當接口返回的數據量比較小時候,REST 的性能要比gRPC要好,當數據量變大之后gRPC的性能優勢就比較明顯了。 .NET Core 3的 json 進行了大量的優化, 在處理消息有效負載中的小數據時會產生巨大的差異,但是實際上,對於大數據有效負載,差異就不復存在了。總體來說 gRPC在這一領域仍然是贏家。我並不是說哪個比另一個更好。我要說的是,我們需要在您的業務案例中使用哪種協議的適當策略。我們通常在與外部世界的外部通信(例如外部服務集成,與前端的通信)中使用REST通信,內部服務之間通信采用gRPC。

參考文獻:


免責聲明!

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



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