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

今天的实验

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

测试工程

一个新建的 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

RPS 平均值:18808

Windows + IIS In Process

RPS 平均值:10089

Windows + IIS Out of Process

RPS 平均值:2820

Linux + Kestrel

RPS 平均值:10667

Linux + Nginx

RPS 平均值:3509

Linux + Caddy

RPS 平均值:3485

结论

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

  1. Windows + Kestrel (18808)

  2. Linux + Kestrel (10667)

  3. Windows + IIS In Process (10089)

  4. Linux + Nginx (3509)

  5. Linux + Caddy (3485)

  6. 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

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

喜欢本篇内容请点个在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句

MYSQL本资料为产品岗位作为日常工作参考,语言口语化At 2019/4/26 By David.Yang如何使用限定条件来进行数据过滤?在前问当中,我们已经学会到了SELECT查询,在过程当中多次接触了WHERE这个关键词,打过预防针应该知道他就…

win10必须禁用的服务_【亲测】Win10系统如何彻底禁止自动更新 亲测有效的Win10关闭自动更新方法...

昨天有人称Win10系统更新依然无法彻底关闭,今天再来补充一下,肯定可以!不少用户反映自己的Win10系统更新无法彻底关闭,网上提供的关闭Win10更新的教程,关闭之后还是会自动更新Win10系统,而今天装机之家分享…

国庆中秋活动——超强AR/3D地球仪!带你领略世界风光!我们未必能环游世界,但都该有个地球仪

通知!通知!通知!!! 玩酷屋十一黄金优惠限时限量秒杀活动,能抢到算你厉害: 1、活动期间 2017/10/03 22:30 ——2017/10/06 22:30 2、【北斗AR地球仪】原价 299元,秒杀活动价 269元…

flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含

宏的概念类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。简单定…

如何在 ASP.Net Core 中使用 MiniProfiler

web应用程序的性能相信是大家普遍关心的一个问题,也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈,MiniProfiler 就是这个领域中的一款产品,它是一款简单的,功能强大的web应用分析工具,MiniProfile…

java 计时_Breitling(百年灵)世界时间终极计时腕表

所有热爱旅行的冒险家可以尽情期待,一款适合所有手腕的全新尺寸“旅行计时腕表”将在今年巴塞尔表展上华彩亮相。百年灵世界时间终极计时腕表(Chronomat 44 GMT),适合腕间的完美尺寸,便捷的三时区时间显示,超凡的百年灵自产机芯&a…

python时钟罗盘酷炫代码_抖音上的时钟屏保,被我改造完用来表白

作者:爱编程的小和尚原文链接:https://blog.csdn.net/Newbie___/article/details/105378852抖音上很火的时钟屏保,被我改造完后用来准备准备准备表白,谁说程序员不浪漫?!不知道一直关注小编我的小伙伴们之前…

大数据|意不意外?今年卖得最好的月饼是这个馅的……

中秋节,你家的月饼都吃完了吗? 淘宝、天猫、京东、苏宁易购等各大电商平台近日相继发布“月饼大数据”。透过这些大数据,我们来看看今年的“月饼消费”有哪些新趋势? 五仁稳居销量“老大哥” 五仁桂花、五仁肉松、五仁牛肉、五仁…

使用FuncT, TResult 委托实现API日志的记录

问题平常我们开发web api的时候&#xff0c;一般是需要记录api的输入输出信息&#xff0c;方便后续排查问题&#xff1b;那么我们一般怎么做的&#xff0c;一般是我们在一个公共地方的写个公共方法控制输入输出。这时候Func<T, TResult> 委托就派上用场。什么是FuncFunc&…

xencenter vgpu 看不见_有一种设计是“看不见,但感受得到”

设计源于生活&#xff0c;设计改变生活。在从业10余年之久的设计师刘洋来看&#xff0c;设计就是带着初心&#xff0c;不断去改变&#xff0c;去创造&#xff0c;去将更多设计的理念投射到时代的潮流中。刘洋认为设计不止是视觉感受&#xff0c;更重要的是融入人的情感&#xf…

数学告诉你家庭关系的奥秘

一直跟踪家庭关系可能非常困难。如果你父亲表弟的女儿刚刚生了一个小男孩&#xff0c;你们两个人怎样被相互介绍&#xff1f;谁是你的"曾曾姑母"&#xff1f;怎样发现你的"移去两次的第一代表亲"&#xff1f;幸运的是&#xff0c;一点儿数学逻辑可以帮助澄…

sql server2005 分页特性

在sql server 2005的新功能中&#xff0c;比较西黄分页功能&#xff0c;通过查询函数row_number over(order by field)实现是提取分页数据当页的记录&#xff0c;此功能原理上和临时表差不多&#xff0c;不过通过插叙语句操作就快捷多了&#xff0c;做了个demo&#xff0c;分页…

c#爬虫-1688官网自动以图搜图

背景在1688有个功能&#xff0c;就是上传图片&#xff0c;就可以找到类似的商品。如下网址 &#xff1a;https://www.1688.com/这时候&#xff0c;我们可以使用程序来代替&#xff0c;大批量的完成图片上传功能。实现思路1、找到图片上传接口post请求&#xff0c;form表单中有s…

php代码里加图片,php如何添加图片

php如何添加图片&#xff1f;php中插入图片的代码是什么&#xff1f;PHP插入图片&#xff0c;实际还是输出HTML代码比如&#xff1a;echo ;还可以直接用PHP生成图片显示出来php的gd库可以生成多种图像文件&#xff0c;如gif,png,jpg,wbmp,xpm等&#xff0c;下面来看一个生成正方…

matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com权重改进的粒子群算法在微粒群算法的可调整参数中&#xff0c;惯性权重 是最重要的参数&#xff0c;较大的 …

两个list怎么对比数据_基于日志的回放对比系统设计

‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;马力部门&#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构&#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求&#xff0c;为商家提供各…

让人眼花缭乱的视错觉,太酷炫了!

盯~ 原理&#xff1a;这只死盯着人看的小短手并不是一个普通的纸模&#xff0c;它的眼睛鼻子和嘴也都不在正常的位置上&#xff0c;它的脸其实是凹下去的。 错觉的关键在于我们的大脑对凹面和凸面的加工方式&#xff0c;以及大脑对从图形中挑出一张脸的执着和能力。大脑想要…

swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单

什么是SWOT分析图&#xff1f;大到企业小到个人都会使用到SWOT来对自身所具备的能力进行分析&#xff0c;这也印证了SWOT分析图的重要性&#xff0c;下面我们一起来深度了解SWOT分析吧&#xff01;&#xff01;一&#xff1a;什么是SWOT分析图所谓SWOT分析图是基于内外部竞争环…

有哪些命令行的软件堪称神器?

ag 比grep、ack更快的递归搜索文件内容。 tig 字符模式下交互查看git项目&#xff0c;可以替代git命令。 mycli mysql客户端&#xff0c;支持语法高亮和命令补全&#xff0c;效果类似ipython&#xff0c;可以替代mysql命令。 jq json文件处理以及格式化显示&#xff0c;支持高…

代码 | 一天一点代码坏味道(1)

【代码精进】| 总结/Edison Zhou作为一个后端工程师&#xff0c;想必在职业生涯中都写过一些不好维护的代码。本文是我学习《代码之丑》的学习总结&#xff0c;今天第一天发车&#xff0c;先来看看在命名上的一些常犯的坏味道。0为何要品代码坏味道Martin Flower在《重构》一书…