10

.NET Core 3.1 的REST 和gRPC 性能测试

 4 years ago
source link: http://www.cnblogs.com/shanyou/p/12679093.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

看到越南小哥 的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 架构将有效负载格式用于传输协议的方式。

rI3URrN.png!web

我们来看下.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上面完成的下面的测试结果:
<a href="https://img2020.cnblogs.com/blog/510/202004/510-20200411130838617-1696064662.png"><img width="573" height="502" title="image" style="display: inline; background-image: none;" alt="image" src="https://img2020.cnblogs.com/blog/510/202004/510-20200411130839127-362593873.png" border="0" /></a>
当接口返回的数据量比较小时候,REST 的性能要比gRPC要好,当数据量变大之后gRPC的性能优势就比较明显了。 .NET Core 3的 json 进行了大量的优化, 在处理消息有效负载中的小数据时会产生巨大的差异,但是实际上,对于大数据有效负载,差异就不复存在了。总体来说 gRPC在这一领域仍然是赢家。我并不是说哪个比另一个更好。我要说的是,我们需要在您的业务案例中使用哪种协议的适当策略。我们通常在与外部世界的外部通信(例如外部服务集成,与前端的通信)中使用REST通信,内部服务之间通信采用gRPC。

参考文献:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK