mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
PRF&PUB:20170818 Go vs .NET Core in terms of HTTP performance.md
@runningwater https://linux.cn/article-8935-1.html
This commit is contained in:
parent
69333643ab
commit
5ecb72816e
@ -1,4 +1,4 @@
|
||||
论 HTTP 性能,Go 与 .NET Core 谁争雌雄
|
||||
论 HTTP 性能,Go 与 .NET Core 一争雌雄
|
||||
============================================================
|
||||
|
||||
![](https://cdn-images-1.medium.com/max/1200/1*60T60jSMO5yxUqJQmLZa4A.png)
|
||||
@ -9,25 +9,25 @@
|
||||
|
||||
因为是新出的,我不想立马就比较两个不同的东西,所以我耐心等待,想等发布更稳定的版本后再进行。
|
||||
|
||||
本周一,微软[发布 .NET Core 2.0 版本][7],因此,我准备开始。您们认为呢?
|
||||
本周一(8 月 14 日),微软[发布 .NET Core 2.0 版本][7],因此,我准备开始。您们认为呢?
|
||||
|
||||
如前面所提的,我们会比较他们相同的东西,比如应用程序、预期响应及运行时的稳定性,所以我们不会把像对 `JSON` 或者 `XML` 的编码、解码这些烦多的事情加入比较游戏中来,仅仅只会使用简单的文本消息。为了公平起见,我们会分别使用 Go 和 .NET Core 的[ MVC 架构模式][8]。
|
||||
如前面所提的,我们会比较它们相同的东西,比如应用程序、预期响应及运行时的稳定性,所以我们不会把像对 JSON 或者 XML 的编码、解码这些烦多的事情加入比较游戏中来,仅仅只会使用简单的文本消息。为了公平起见,我们会分别使用 Go 和 .NET Core 的 [MVC 架构模式][8]。
|
||||
|
||||
### 先决条件
|
||||
### 参赛选手
|
||||
|
||||
[Go][9] (或者 Golang): 是一种[快速增长][10]的开源编程语言,旨在构建出简单、快捷和稳定可靠的应用软件。
|
||||
[Go][9] (或称 Golang): 是一种[快速增长][10]的开源编程语言,旨在构建出简单、快捷和稳定可靠的应用软件。
|
||||
|
||||
用于支持 Go 语言的 MVC web 框架并不多,还好我们找到了 Iris ,可胜任此工作。
|
||||
|
||||
[Iris][11]: 支持 Go 语言的快速、简单和高效的微型 Web 框架。它为您的下一代网站、API 或分布式应用程序奠定了精美的表现方式和易于使用的基础。
|
||||
[Iris][11]: 支持 Go 语言的快速、简单和高效的微型 Web 框架。它为您的下一代网站、API 或分布式应用程序奠定了精美的表现方式和易于使用的基础。
|
||||
|
||||
[C#][12]: 是一种通用的,面向对象的编程语言。其开发团队由 [Anders Hejlsberg][13] 领导。
|
||||
[C#][12]: 是一种通用的、面向对象的编程语言。其开发团队由 [Anders Hejlsberg][13] 领导。
|
||||
|
||||
[.NET Core][14]: 跨平台,可以在极少时间内开发出高性能的应用程序。
|
||||
[.NET Core][14]: 跨平台,可以在极少时间内开发出高性能的应用程序。
|
||||
|
||||
从 [https://golang.org/dl][15] 下载 Go ,从 [https://www.microsoft.com/net/core][16] 下载 .NET Core。
|
||||
可从 [https://golang.org/dl][15] 下载 Go ,从 [https://www.microsoft.com/net/core][16] 下载 .NET Core。
|
||||
|
||||
在下载和安装好这些软件后,还需要在 Go 端安装 Iris。安装很简单,仅仅只需要打开终端,然后执行如下语句:
|
||||
在下载和安装好这些软件后,还需要为 Go 安装 Iris。安装很简单,仅仅只需要打开终端,然后执行如下语句:
|
||||
|
||||
```
|
||||
go get -u github.com/kataras/iris
|
||||
@ -37,31 +37,27 @@ go get -u github.com/kataras/iris
|
||||
|
||||
#### 硬件
|
||||
|
||||
* 处理器: Intel(R) Core(TM) i7–4710HQ CPU @ 2.50GHz 2.50GHz
|
||||
|
||||
* 内存: 8.00 GB
|
||||
* 处理器: Intel(R) Core(TM) i7–4710HQ CPU @ 2.50GHz 2.50GHz
|
||||
* 内存: 8.00 GB
|
||||
|
||||
#### 软件
|
||||
|
||||
* 操作系统: 微软 Windows [10.0.15063 版本], 电源计划设置为“高性能”
|
||||
|
||||
* HTTP 基准工具: [https://github.com/codesenberg/bombardier][1], 使用最新的 1.1 版本。
|
||||
|
||||
* .NET Core: [https://www.microsoft.com/net/core][2], 使用最新的 2.0 版本。
|
||||
|
||||
* Iris: [https://github.com/kataras/iris][3], 使用基于 [Go 1.8.3][4] 构建的新新 8.3 版本。
|
||||
* 操作系统: 微软 Windows [10.0.15063 版本], 电源计划设置为“高性能”
|
||||
* HTTP 基准工具: [https://github.com/codesenberg/bombardier][1], 使用最新的 1.1 版本。
|
||||
* .NET Core: [https://www.microsoft.com/net/core][2], 使用最新的 2.0 版本。
|
||||
* Iris: [https://github.com/kataras/iris][3], 使用基于 [Go 1.8.3][4] 构建的最新 8.3 版本。
|
||||
|
||||
两个应用程序都通过请求路径 “api/values/{id}” 返回文本“值”。
|
||||
|
||||
.NET Core MVC
|
||||
|
||||
##### .NET Core MVC
|
||||
|
||||
![](https://cdn-images-1.medium.com/max/1600/1*v2VJL3-I3bLyuehntuqfng.png)
|
||||
|
||||
Logo 由 [Pablo Iglesias][5] 设计。
|
||||
|
||||
可以使用 `dotnet new webapi` 命令创建项目,其 `webapi` 模板会为您生成代码,代码包含 `GET` 请求方法的 `返回“值”`。
|
||||
|
||||
_源代码_
|
||||
源代码:
|
||||
|
||||
```
|
||||
using System;
|
||||
@ -165,8 +161,7 @@ namespace netcore_mvc.Controllers
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
_运行 .NET Core web 服务项目_
|
||||
运行 .NET Core web 服务项目:
|
||||
|
||||
```
|
||||
$ cd netcore-mvc
|
||||
@ -177,7 +172,7 @@ Now listening on: http://localhost:5000
|
||||
Application started. Press Ctrl+C to shut down.
|
||||
```
|
||||
|
||||
_运行和定位 HTTP 基准工具_
|
||||
运行和定位 HTTP 基准工具:
|
||||
|
||||
```
|
||||
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
|
||||
@ -193,13 +188,13 @@ Statistics Avg Stdev Max
|
||||
Throughput: 8.91MB/s
|
||||
```
|
||||
|
||||
Iris MVC
|
||||
|
||||
##### Iris MVC
|
||||
|
||||
![](https://cdn-images-1.medium.com/max/1600/1*zf4BjL-7MQNJGikw5E-iNA.png)
|
||||
|
||||
Logo 由 [Santosh Anand][6] 设计。
|
||||
|
||||
_源代码_
|
||||
源代码:
|
||||
|
||||
```
|
||||
package main
|
||||
@ -217,7 +212,6 @@ func main() {
|
||||
view raw
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
package controllers
|
||||
|
||||
@ -242,8 +236,7 @@ func (vc *ValuesController) Put() {}
|
||||
func (vc *ValuesController) Delete() {}
|
||||
```
|
||||
|
||||
|
||||
_运行 Go web 服务项目_
|
||||
运行 Go web 服务项目:
|
||||
|
||||
```
|
||||
$ cd iris-mvc
|
||||
@ -252,7 +245,7 @@ Now listening on: http://localhost:5000
|
||||
Application started. Press CTRL+C to shut down.
|
||||
```
|
||||
|
||||
_运行和定位 HTTP 基准工具_
|
||||
运行和定位 HTTP 基准工具:
|
||||
|
||||
```
|
||||
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
|
||||
@ -275,55 +268,44 @@ Statistics Avg Stdev Max
|
||||
#### 总结
|
||||
|
||||
* 完成 `5000000 个请求`的时间 - 越短越好。
|
||||
|
||||
* 请求次数/每秒 - 越大越好。
|
||||
|
||||
* 等待时间 — 越短越好。
|
||||
|
||||
* 吞吐量 — 越大越好。
|
||||
|
||||
* 内存使用 — 越小越好。
|
||||
|
||||
* LOC (代码行数) — 越少越好。
|
||||
|
||||
.NET Core MVC 应用程序,使用 86 行代码,运行 2 分钟 8 秒,每秒接纳 39311.56 个请求,平均每秒有 3.19ms 等待,最大时到 229.73ms,内存使用大约为 126MB(不包括 dotnet 框架)。
|
||||
.NET Core MVC 应用程序,使用 86 行代码,运行 2 分钟 8 秒,每秒接纳 39311.56 个请求,平均 3.19ms 等待,最大时到 229.73ms,内存使用大约为 126MB(不包括 dotnet 框架)。
|
||||
|
||||
Iris MVC 应用程序,使用 27 行代码,运行 47 秒,每秒接纳 105643.71 个请求,平均每秒有 1.18ms 等待,最大时到 22.01ms,内存使用大约为 12MB。
|
||||
Iris MVC 应用程序,使用 27 行代码,运行 47 秒,每秒接纳 105643.71 个请求,平均 1.18ms 等待,最大时到 22.01ms,内存使用大约为 12MB。
|
||||
|
||||
> 还有另外一个模板的基准,滚动到底部。
|
||||
|
||||
2017 年 8 月 20 号更新
|
||||
**2017 年 8 月 20 号更新**
|
||||
|
||||
[Josh Clark] [24] 和 [Scott Hanselman] [25]在此 [tweet 评论] [26]上指出,.NET Core `Startup.cs` 文件中 `services.AddMvc();` 这行可以替换为 `services.AddMvcCore();`。我听从他们的意见,修改代码,重新运行基准,该文章的 .NET Core 应用程序的基准输出已经修改。
|
||||
|
||||
@topdawgevh @shanselman 他们也在使用 `AddMvc()` 而不是 `AddMvcCore()` ...,难道都不包含中间件?
|
||||
|
||||
@topdawgevh @shanselman 他们也在使用 AddMvc() 而不是 AddMvcCore() ...,难道都不包含中间件?
|
||||
|
||||
— @clarkis117
|
||||
— @clarkis117
|
||||
|
||||
@clarkis117 @topdawgevh Cool @MakisMaropoulos @ben_a_adams @davidfowl 我们来看看。认真学习下怎么使用更简单的性能默认值。
|
||||
|
||||
— @shanselman
|
||||
— @shanselman
|
||||
|
||||
@shanselman @clarkis117 @topdawgevh @ben_a_adams @davidfowl @shanselman @ben_a_adams @davidfowl 谢谢您们的反馈意见。我已经修改,更新了结果,没什么不同。对其它的建议,我非常欢迎。
|
||||
|
||||
— @MakisMaropoulos
|
||||
|
||||
>它有点稍微的不同但相差不大(从 8.61MB/s 到 8.91MB/s)
|
||||
|
||||
— @MakisMaropoulos
|
||||
|
||||
> 它有点稍微的不同但相差不大(从 8.61MB/s 到 8.91MB/s)
|
||||
|
||||
想要了解跟 `services.AddMvc()` 标准比较结果的,可以点击[这儿][27]。
|
||||
|
||||
* * *
|
||||
|
||||
### 想再多了解点儿吗?
|
||||
|
||||
我们再制定一个基准,产生 `1000000 次请求`,这次会通过视图引擎由模板生成 `HTML` 页面。
|
||||
|
||||
#### .NET Core MVC 使用的模板
|
||||
|
||||
|
||||
```
|
||||
using System;
|
||||
|
||||
@ -477,8 +459,7 @@ https://github.com/kataras/iris/tree/master/_benchmarks/netcore-mvc-templates
|
||||
```
|
||||
|
||||
|
||||
_运行 .NET Core 服务项目_
|
||||
|
||||
运行 .NET Core 服务项目:
|
||||
|
||||
```
|
||||
$ cd netcore-mvc-templates
|
||||
@ -489,7 +470,7 @@ Now listening on: http://localhost:5000
|
||||
Application started. Press Ctrl+C to shut down.
|
||||
```
|
||||
|
||||
_运行和定位 HTTP 基准工具_
|
||||
运行 HTTP 基准工具:
|
||||
|
||||
```
|
||||
Bombarding http://localhost:5000 with 1000000 requests using 125 connections
|
||||
@ -620,10 +601,7 @@ https://github.com/kataras/iris/tree/master/_benchmarks/iris-mvc-templates
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
_运行 Go 服务项目_
|
||||
|
||||
运行 Go 服务项目:
|
||||
|
||||
```
|
||||
$ cd iris-mvc-templates
|
||||
@ -633,7 +611,7 @@ Application started. Press CTRL+C to shut down.
|
||||
|
||||
```
|
||||
|
||||
_运行和定位 HTTP 基准工具_
|
||||
运行 HTTP 基准工具:
|
||||
|
||||
```
|
||||
Bombarding http://localhost:5000 with 1000000 requests using 125 connections
|
||||
@ -648,22 +626,17 @@ Statistics Avg Stdev Max
|
||||
Throughput: 192.51MB/s
|
||||
```
|
||||
|
||||
总结
|
||||
#### 总结
|
||||
|
||||
* 完成 `1000000 个请求`的时间 - 越短越好。
|
||||
|
||||
* 请求次数/每秒 - 越大越好。
|
||||
|
||||
* 等待时间 — 越短越好。
|
||||
|
||||
* 内存使用 — 越小越好。
|
||||
|
||||
* 吞吐量 — 越大越好。
|
||||
|
||||
.NET Core MVC 模板应用程序,运行 1 分钟 20 秒,每秒接纳 11738.60 个请求,同时每秒生成 89.03M 页面,平均 10.10ms 等待,最大时到 1.97s,内存使用大约为 193MB(不包括 dotnet 框架)。
|
||||
|
||||
.NET Core MVC 模板应用程序,运行 1 分钟 20 秒,每秒接纳 11738.60 个请求,同时每秒生成 89.03M 页面,平均每秒有 10.10ms 等待,最大时到 1.97s,内存使用大约为 193MB(不包括 dotnet 框架)。
|
||||
|
||||
Iris MVC 模板应用程序,运行 37 秒,每秒接纳 26656.76 个请求,同时每秒生成 192.51M 页面,平均每秒有 1.18ms 等待,最大时到 22.52ms,内存使用大约为 17MB。
|
||||
Iris MVC 模板应用程序,运行 37 秒,每秒接纳 26656.76 个请求,同时每秒生成 192.51M 页面,平均 1.18ms 等待,最大时到 22.52ms,内存使用大约为 17MB。
|
||||
|
||||
### 接下来呢?
|
||||
|
||||
@ -673,10 +646,6 @@ Iris MVC 模板应用程序,运行 37 秒,每秒接纳 26656.76 个请求,
|
||||
|
||||
我也需要亲自感谢下 [dev.to][34] 团队,感谢把我的这篇文章分享到他们的 Twitter 账户。
|
||||
|
||||
论 HTTP 性能,Go 与 .NET Core 谁争雌雄 {作者:@MakisMaropoulos} https://t.co/IXL5LSpnjX
|
||||
|
||||
— @ThePracticalDev
|
||||
|
||||
|
||||
感谢大家真心反馈,玩得开心!
|
||||
|
||||
@ -684,15 +653,15 @@ Iris MVC 模板应用程序,运行 37 秒,每秒接纳 26656.76 个请求,
|
||||
|
||||
很多人联系我,希望看到一个基于 .NET Core 的较低级别 Kestrel 的基准测试文章。
|
||||
|
||||
因此我完成了,请点击下面的链接来了解 Kestrel 和 Iris 之间的性能差异,它还包含一个会话存储管理基准!
|
||||
因此我完成了,请点击下面的[链接][35]来了解 Kestrel 和 Iris 之间的性能差异,它还包含一个会话存储管理基准!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8
|
||||
|
||||
作者:[ Gerasimos Maropoulos][a]
|
||||
作者:[Gerasimos Maropoulos][a]
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
@ -731,3 +700,4 @@ via: https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b
|
||||
[32]:https://github.com/kataras/iris/tree/master/_benchmarks
|
||||
[33]:https://github.com/kataras/iris
|
||||
[34]:https://dev.to/kataras/go-vsnet-core-in-terms-of-http-performance
|
||||
[35]:https://medium.com/@kataras/iris-go-vs-net-core-kestrel-in-terms-of-http-performance-806195dc93d5
|
Loading…
Reference in New Issue
Block a user