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

我们来看下.NET Core 3.1下REST和gRPC的性能表现怎么样?从 https://github.com/geffzhang/RESTvsGRPC 下载代码。在测试机器上安装.NET Core 3.1。

  • REST API:

 cd RESTvsGRPC\RestAPIdotnet run -p RestAPI.csproj -c Release
  • gRPC API:

 cd RESTvsGRPC\GrpcAPIdotnet run -p GrpcAPI.csproj -c Release
  • 基准项目:

 cd RESTvsGRPC\RESTvsGRPCdotnet run -p RESTvsGRPC.csproj -c Release
等待完成测试后,我们将会得到类似下面的结果,具体的结果依赖于你的测试机器配置,我使用Win10 的Surface Book 2上面完成的下面的测试结果:
当接口返回的数据量比较小时候,REST 的性能要比gRPC要好,当数据量变大之后gRPC的性能优势就比较明显了。.NET Core 3的 json 进行了大量的优化, 在处理消息有效负载中的小数据时会产生巨大的差异,但是实际上,对于大数据有效负载,差异就不复存在了。总体来说 gRPC在这一领域仍然是赢家。我并不是说哪个比另一个更好。我要说的是,我们需要在您的业务案例中使用哪种协议的适当策略。我们通常在与外部世界的外部通信(例如外部服务集成,与前端的通信)中使用REST通信,内部服务之间通信采用gRPC。
参考文献:
  • https://medium.com/@EmperorRXF/evaluating-performance-of-rest-vs-grpc-1b8bdf0b22da

  • https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel

  • https://gooroo.io/GoorooTHINK/Article/16623/One-Weird-Trick-To-Improve-Web-Performance/21564#.Vx9o5UdkldB

  • https://devblogs.microsoft.com/aspnet/asp-net-core-2-2-0-preview1-http-2-in-kestrel/

  • https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/

  • https://dev.to/thangchung/performance-benchmark-grpc-vs-rest-in-net-core-3-preview-8-45ak

  • https://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html

.NET Core 3.1 的REST 和gRPC 性能测试相关推荐

  1. [ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?

    昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是 ...

  2. 【半译】两个gRPC的C#库:grpc-dotnet vs Grpc.Core

    grpc-dotnet 是在2019年随着 .NET Core 3.0 一起发布的一个gPRC官方库.在ASP.NET Core 的 gRPC项目模板里面就使用了这个库. .NET Core 3.0之 ...

  3. gRPC in ASP.NET Core 3.x -- Protocol Buffer, Go语言的例子(上)

    前两篇文章半年前写的: gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1), gRPC in ASP.NET Core 3.0 -- Protocol Buf ...

  4. ASP.NET Core 3.0 gRPC 身份认证和授权

    一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...

  5. .NET Core Love gRPC

    这篇内容主要来自Microsoft .NET团队程序经理Sourabh Shirhatti的博客文章:https://grpc.io/blog/grpc-on-dotnetcore/, .NET Co ...

  6. asp.net core 3.0 gRPC框架小试

    什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...

  7. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  8. .NET Core 使用 grpc 实现微服务

    GRPC 是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以一个.NET Core Console项目演示如何使用GRP ...

  9. 使用ASP.NET Core开始使用gRPC客户端和服务器

    目录 介绍 GRPC Protobuf文件 背景 先决条件 使用代码 第1步--创建gRPC服务应用程序 gRPC项目结构 构建并运行应用程序 第2步:创建客户端控制台.NET核心应用程序 添加必需的 ...

最新文章

  1. 罗辑思维 - 当代的学习方法
  2. Python说文解字_杂谈06
  3. 能在任意一种框架中复用的组件,太牛了!
  4. x210-II WinCE启动10s,还可继续优化
  5. SharePoint自动化系列——通过PowerShell创建SharePoint Lists
  6. 第二次冲刺-站立会议06
  7. NYOJ 305 表达式求值 (字符串处理)
  8. 企业真实面试题总结(二)
  9. 6月热点:BML全新升级WebIDE编程环境,度目智能视频分析盒G1上新
  10. Web前端 ---入门教学
  11. thinkphp集成editormd一系列实战
  12. 天正计算机命令大全,新手必看-史上最全CAD快捷键大全
  13. java 农历公历转换_JAVA版农历和阳历相互转换源码
  14. NTFS - 系统解析
  15. 苹果硬改手机底层udid无限新机技术
  16. 数字图像处理总结(四)
  17. das dsadsa
  18. Mac 此账户尚未用于app store_精品良心Mac应用下载网站
  19. java 汇率换算_已知外汇牌价折算汇率
  20. #Visio#教会你怎么安装和使用 Visio 哦 ~ ~

热门文章

  1. gRPC编码初探(java)
  2. 利用html5看雪花飘落的效果
  3. android wifi
  4. airdroid黑屏_如何使用AirDroid从PC控制Android设备
  5. 修改docker的默认存储位置及镜像存储位置
  6. Python高级特性——迭代(Iteration)
  7. 设置utf8编码问题
  8. eclipse默认编码为GBK,修改为UTF8的方法
  9. UILabel自适应高度和自动换行
  10. Xamarin效果第五篇之ScrollView动态滚动效果