就HTTP性能而言,Iris Go与.NET Core Kestrel - Go语言中文社区

就HTTP性能而言,Iris Go与.NET Core Kestrel


Iris GolangKestrel .NET Core (C#)之间的公平基准。

你好!

本文是“使用HTTP性能进行Go vs .Net Core”系列的第二篇,如果您还没有阅读 ,则应该 阅读第一篇

准备自己最喜欢的一杯咖啡或茶!

关于反馈

在本节中,我将尝试为您提供上一篇文章反应的一部分(不好的一面)的一般概念,但是您可能根本不在乎或者您没有心情,因此您可能 想要可以 跳过 ,直接进入了“ 标杆 ”一节。

上一篇文章中,我们比较了Iris Web框架Iris Web框架MVC功能的性能。 NET Core通过测试一个简单的应用程序(避免使用诸如“您可以使用更快的json编码器”之类的参数)之类的东西。

这篇文章得到了相当惊人的反应。 大多数评论都非常好,有礼貌地同意或不同意。 有些人的评论有些消极,但也有人期望和欢迎。

我总是尽力负责,因此我会回答您大多数与本文有关的问题,以避免重复。 如果在您的评论下方没有看到我的回复,然后搜索相关问题,我相信您会在那等我。

一些.NET开发人员通过Twitter与我联系,告诉我这不是真正的.NET Core,因为我使用MVC而不是Kestrel,这是否意味着C#开发人员应避免.NET Core的MVC功能? 我听不懂 从基准标题和代码本身可以清楚地看出,我们正在对Iris和.NET Core的MVC版本进行比较,Iris也具有“较低级别”,但我们没有使用它。

注意:IrisMVC是外部Twitter帐户,而不是Iris Web框架的帐户。

我知道我的文章将对.NET世界产生影响。 我最近收到很多粗鲁的评论,有趣的是,那些发表最不可接受的评论的人正在为大公司工作,我的意思是,他们处于某个可以理解人类接触的特定年龄,但实际上他们从未学过人类交流的基础,礼貌。

我真的不认为这是对的,我的意思是发表他们的(已经公开的)评论是正确的决定,但是我们都应该尽快谴责它们。

他坚持甚至不读这篇文章。
那家伙真的以为我从某人那里得到了报酬吗? 可悲的是,我的个人银行账户上只有0.67美元!
斯科特对那个家伙的答复。 除了每个Scott的演讲都超出最佳水平这一事实之外,这也是一个有风范的好人。

另一方面,我真的没有任何问题, 仇恨言论过去而且永远不会触动我,因为我内心没有那个东西-设计使:p   。 我不会接受这些攻击,因为人身攻击也不会吓到我,但这并不意味着我应该默许他们

例如,那个家伙 声称他在微软工作,但我不相信拥有“高学历”的人可以写这样的东西:

即使代码在生产模式下运行,他也不在乎,他只是想发表评论。 还有一个人实际上并没有阅读本文,也没有阅读其中的代码。
可以这么说,他显然是在无缘无故地煽动仇恨。

不,他们并没有止步于此 ,您会对该评论所宣传的民主意识感到惊讶!

例如,那个人报告了dev.to分享我的文章。 对作者不利的dev.to,不要再分享我的文章,他不允许这些事情! “调查之后”,天哪……

乙 eside的小姐参数和诽谤的意见,第一个人,事实上阿里Malekpour张贴了他的说法很好,所以我认为它严重的是,他居然给了我这个想法:写基准为“低级别”的网络侧 Go和.NET Core这两个世界中的一个,所以我们在这里 :)

标杆管理

这次,我们将比较名为Kestrel的“低级” .NET Core服务器实现和Iris的“低级”处理程序的速度,我们将测试两个简单的应用程序, 一个与我们先前的应用程序几乎相同,但是使用处理程序编写的代码, 第二个测试将包含一个路由,该路由根据键(字符串)设置和获取会话值(字符串),并将该会话值返回给客户端。

硬件

  • 处理器:Intel(R)Core(TM)i7–4710HQ CPU @ 2.50GHz 2.50GHz
  • 内存:8.00 GB

软件

首次申请

以动态注册路由路径为目标,以125不同的“线程”生成1000000 requests ,并以简单的“value”文本进行响应。

.NET Core(Kestrel)

源代码

启动.NET Core Kestrel Web服务器

$ cd netcore
$ dotnet run -c Release
Hosting environment: Production
Content root path: C:mygopathsrcgithub.comkatarasiris_benchmarksnetcore
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

定位并运行HTTP基准测试工具

$ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5 
Bombarding http://localhost:5000/api/values/5 with 1000000 requests using 125 connections
1000000 / 1000000 [======================================================================================] 100.00% 10s
Done!
Statistics Avg Stdev Max
Reqs/sec 97884.57 8699.94 110509
Latency 1.28ms 682.63us 61.04ms
HTTP codes:
1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0
Throughput: 17.73MB/s

虹膜

源代码

启动Iris Go Web服务器

$ cd iris
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.

定位并运行HTTP基准测试工具

$ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5 
Bombarding http://localhost:5000/api/values/5 with 1000000 requests using 125 connections
1000000 / 1000000 [=======================================================] 100.00% 8s
Done!
Statistics Avg Stdev Max
Reqs/sec 117917.79 4437.04 125614
Latency 1.06ms 278.12us 19.03ms
HTTP codes:
1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0
Throughput: 21.93MB/s

摘要

  • 完成1000000 requests时间-越小越好。
  • 请求/秒-越大越好。
  • 延迟-越小越好
  • 吞吐量-越大越好。
  • LOC(代码行)—越小越好。

.NET核心使用线63码10秒服务每秒97884.57请求与写入17.73MB(隼)应用程序/ S1.28ms中平均延迟和61.04ms最大

虹膜应用程序写入使用线14码8秒服务每秒117917.79请求与21.93MB / S1.06ms中平均延迟和19.03ms最大

第二次申请(会议)

产生5000000 requests并以静态请求路径为目标,具有125 different “threads” ,并基于名称“key” ,值作为字符串”value"设置和获取会话,并将该会话”value"写入(或返回,您选择)该响应值。

带有会话的.NET Core(Kestrel)

源代码

启动.NET Core Kestrel Web服务器

$ cd netcore-sessions
$ dotnet run -c Release
Hosting environment: Production
Content root path: C:mygopathsrcgithub.comkatarasiris_benchmarksnetcore-sessions
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

定位并运行HTTP基准测试工具

$ bombardier -c 125 -n 5000000 http://localhost:5000/setget 
Bombarding http://localhost:5000/setget with 5000000 requests using 125 connections
5000000 / 5000000 [====================================================================================] 100.00% 2m40s
Done!
Statistics Avg Stdev Max
Reqs/sec 31844.77 13856.19 253746
Latency 4.02ms 15.57ms 0.96s
HTTP codes:
1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0
Throughput: 14.51MB/s

带有会话的虹膜

源代码

启动Iris Go Web服务器

$ cd iris-sessions
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.

定位并运行HTTP基准测试工具

$ bombardier -c 125 -n 5000000 http://localhost:5000/setget 
Bombarding http://localhost:5000/setget with 5000000 requests using 125 connections
5000000 / 5000000 [====================================================================================] 100.00% 1m15s
Done!
Statistics Avg Stdev Max
Reqs/sec 66749.70 32110.67 110445
Latency 1.88ms 9.13ms 1.94s
HTTP codes:
1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0
Throughput: 20.65MB/s

摘要

  • 完成5000000 requests时间-越小越好。
  • 请求/秒-越大越好。
  • 延迟-越小越好
  • 吞吐量-越大越好。

.NET核心与会话应用程序运行2分钟40秒 ,供应每秒31844.77请求与14.51MB / 4.02msš潜伏期平均和0.96s最大值。

Iris with Sessions应用程序运行了1分钟15秒每秒处理66749.70个请求,其平均延迟为1.88ms,最大延迟为1.94s ,平均速度为20.65MB / s

结语

我们确实必须承认,与MVC相比,Kestrel的运行速度非常快, 祝贺 开源项目的贡献者 以及 Microsoft 对此的支持。

与上一篇文章一样,该文章也有从我的计算机上截取的屏幕快照 ,并且您在此处看到的相同代码段也存在于gist和github存储库中 ,单击以导航到链接。

我希望看到更多的测试人员,所以请下载源代码并从您的计算机上运行基准测试, 并与我们其他人分享结果。

如果您想联系我进行讨论,我随时乐于接受新的机会和新的朋友,在我的Twitter个人资料中,您将找到我的所有联系信息!

感谢您给予阅读本文的个人时间,就像您上一篇文章一样,将其传播到外界。

在我的下一篇文章中将会看到您,并且……一如既往,玩得开心!

我不止一次单击拍手按钮时,我喜欢视觉效果,是吗? 很简单:只需单击拍手按钮。 如果感觉强烈,请单击更多(或按住不放 )。

From: https://hackernoon.com/iris-go-vs-net-core-kestrel-in-terms-of-http-performance-806195dc93d5

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dfsgwe1231/article/details/106022701
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 05:02:23
  • 阅读 ( 1695 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢