linux iis 测试工具,ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试

原标题:ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试

导语

ASP.NET Core 从 2.2 版本起,在 IIS 下可以使用 InProcess 模式提高性能,国外大神 Rick Strahl 对此有一片详细的文章。3年过去了,现在 ASP.NET Core 已经到了 5.0 版本,不同服务器之间的性能有什么变化呢?我们来一起看一下吧。

曾经的结论

Rick Strahl 在 原文* 中测试了 Windows 下 ASP.NET Core 2.2 在 Kestrel、IIS InProcess、IIS Out of Process 中的性能,metric 为 request per second。结论是 IIS InProcess > Kestrel > IIS Out of Process。测试方法、工具和结论可以查看 Rick 的文章:

* https://weblog.west-wind.com/posts/2019/Mar/16/ASPNET-Core-Hosting-on-IIS-with-ASPNET-Core-22

d15c15bac868d7824350e6b0625a468b.png

今天的实验

Rick 没有测试相同配置的 Linux 服务器跑 ASP.NET Core 与 Windows 服务器的区别。很多朋友想知道,在 2021年跑 ASP.NET Core 5.0 到底用 Windows 还是 Linux 性能好,因此我决定用类似的方法在相同配置的服务器上重新跑一下 ASP.NET Core 5.0 在 Windows 及 Linux 上的 Request per Second 数据,方便大家参考。

测试环境

由于 Windows 10、Ubuntu Desktop 等桌面版系统并不能真实代表服务器环境,因此我均选择服务器版系统进行测试。所有系统均为全新安装,并打了最新 patch,并且均多喝了热水,并重启试试了一次。

Windows 服务器

供应商:Microsoft Azure 国际版 East Asia 数据中心

系统:Windows Server 2019

配置:2 vCPU, 4GB RAM, Premium SSD

安装环境:IIS (启用静态、动态压缩,不含 ASP.NET 3.5, 4.X),ASP.NET Core Runtime 5.0.2

Linux 服务器

供应商:Microsoft Azure 国际版 East Asia 数据中心

系统:Ubuntu Server 20.04 LTS

配置:2 vCPU, 4GB RAM, Premium SSD

安装环境:启用BBR,安装 Nginx,Caddy,ASP.NET Core Runtime 5.0.2

测试工具

Rick 使用的是他自主研发的 West Wind Web Surge,但是这个工具只有 Windows 平台,没法满足我们的需求,因此我使用了一个开源、跨平台的测试工具 bombardier,该工具也曾经在微软官方 .NET 博客上有所用到。

版本:v1.2.5

下载地址:https://github.com/codesenberg/bombardier

cce9d7750e3504d26ed503ede0e5dcf4.png

测试工程

一个新建的 ASP.NET Core 5.0 Web API 项目,唯一的方法是:

[ApiController]

[Route("[controller]")]

public class TestController : ControllerBase

{

[HttpGet]

public string Get

{

return $"Test {DateTime.UtcNow}";

}

}

为了简单,本次我不测试 Json 序列化等操作,有兴趣的朋友可以自行实验。

该工程使用 Release 编译,FDD发布,日志配置留默认,即:

"LogLevel": {

"Default": "Information",

"Microsoft": "Warning",

"Microsoft.Hosting.Lifetime": "Information"

}

测试方法

分别使用 Kestrel、IIS In Process、IIS Out of Process、Nginx 反代、Caddy 反代运行测试工程,随后使用 bombardier 访问服务器本机的测试地址,启用2个连接,10秒钟DPS,预热一轮后连续跑3轮,取 Request per Second 平均值。

注意,在理想环境下,最好不要使用性能测试工具测试localhost地址,因为操作系统本身分配调度测试工具和Web服务器之间网络资源会有一定的影响。但是由于云端的网络大家都懂的,所以为了尽可能排除网络影响,我不得不访问localhost测试。

测试结果

Windows + Kestrel

07a7f3fca62b962b2f0b9027619cde49.png

RPS 平均值: 18808

Windows + IIS In Process

c3bbbb017b56d71fbcf61d7daeccf905.png

RPS 平均值: 10089

Windows + IIS Out of Process

6c81d880d3d4655efa92cd06c4fee068.png

RPS 平均值: 2820

Linux + Kestrel

1dcdd634d9a7a58b18fcacb86a20d889.png

RPS 平均值: 10667

Linux + Nginx

1e6ac5892795eb66c186ccda7a7ca29c.png

RPS 平均值: 3509

Linux + Caddy

0a4bd914ccfb6019dd134be9852cc2ac.png

RPS 平均值: 3485

结论

测试结果排名(从快到慢):

Windows + Kestrel (18808)

Linux + Kestrel (10667)

Windows + IIS In Process (10089)

Linux + Nginx (3509)

Linux + Caddy (3485)

Windows + IIS Out of Process (2820)

结果和 Rick 当年对 ASP.NET Core 2.2 的测试有所不同。Rick 的测试中,IIS In Process 的性能竟然能超越 Kestrel,他曾经表示意外。今天 IIS In Process 还是被 Kestrel 吊打了,这好像还挺合理的。

但是我没想到的是,同样用 Kestrel,Windows 服务器的性能竟然能吊打 Linux,我表示意外,毕竟说好的 Windows 性能差,说句政治正确的话,这一定不是 Linux 的问题,很可能是 ASP.NET Core Runtime 对于 Linux 的优化没有 Windows 版的好。

在反代模式下,Nginx 和 Caddy 的性能基本相同,并且都能吊打 IIS Out of Process,这非常政治正确,毕竟说好的 IIS 性能差。

当然了,光一个输出字符串的测试,并不能代表 ASP.NET Core 5.0 及各服务器性能表现的全部,在实际项目中,影响性能的因素非常多。本次实验的设计并不覆盖所有场景,肯定有所纰漏,欢迎大家留言指出。

汪宇杰博客

Azure | .NET | 微软 MVP

无广告,不卖课,做纯粹的技术公众号

喜欢本篇内容请点个在看返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值