与 Kestrel http 服务器相比,IIS 的性能如何?
似乎 Kestrel 受到异步和事件驱动服务器框架系列的极大启发。同时,IIS的发展历史悠久,在功能上明显更加成熟。考虑到所有这些,我专门寻找内存利用率、线程利用率、请求相关比较(如每秒请求)和流功能的比较。
与 Kestrel http 服务器相比,IIS 的性能如何?
似乎 Kestrel 受到异步和事件驱动服务器框架系列的极大启发。同时,IIS的发展历史悠久,在功能上明显更加成熟。考虑到所有这些,我专门寻找内存利用率、线程利用率、请求相关比较(如每秒请求)和流功能的比较。
这是来自 GitHub 存储库的XSLX 文件,您可以在其中查看您正在寻找的性能比较。
更新:该 excel 文件不再可用,并已替换为交互式 Power BI 仪表板。
我为我当前的项目做了很多基准测试,在 IIS 和 Kestrel 上托管 .net core 1.0 和 2.0 应用程序。测试是真实世界的 rest-api CRUD,具有身份验证/授权、日志记录、指标、速率限制等。此外,.net 核心应用程序完全由 MS 手册完成,符合推荐的 1.0/2.0 标准。
使用相同的硬件设置,在 IIS 后面的托管服务每秒不断增加约 40% 的请求。我仍然找不到能够解释性能差异的文章或顾问。
我还尝试从核心基准测试权威https://github.com/aspnet/benchmarks中找到任何类型的优化技巧,方法是翻遍设置和服务初始化程序,但 IIS 仍然更快。
任何指针?
截至 2016 年 11 月,直接来自ASP.NET 基准测试。
在 Windows Server 2012 上,管道深度为 16:
stack on RT requests/sec
ASP.NET 4.6 IIS CLR 57,792
ASP.NET 5 Kestrel CoreCLR 1,188,521
这是 20 倍或 2000% 的加速。我了解成熟的 IIS 与独立的 Kestrel,但我确实希望 ASP.NET 团队中的某个人能够深入研究这一点,因为差异是巨大的。
这也是为什么它在 Linux 上要慢得多。
以下是 asp.net 团队的一些初步 Kestrel 基准测试。虽然不像您所寻找的那样详尽,但您会发现他们发布了一些有关 RPS 的信息。我敢肯定,随着他们越来越接近发布,还会有更多。您可以通过简单的 google 搜索在 Internet 上找到 IIS 基准:
至于为什么 IIS 中的进程内托管更快(直接取自文档):
使用进程内托管,ASP.NET Core 应用程序在与其 IIS 工作进程相同的进程中运行。进程内托管比进程外托管提供了改进的性能,因为请求不通过环回适配器代理,环回适配器是一种将传出网络流量返回到同一台机器的网络接口。
请参阅托管模型。