IIS 与 Kestrel 性能比较
IIS vs Kestrel performance comparison
与 Kestrel http 服务器相比,IIS 的性能如何?
似乎 Kestrel 受到异步和事件驱动服务器框架家族的极大启发。同时,IIS发展历史悠久,在功能上明显更加成熟。考虑到所有这些因素,我专门寻找内存利用率、线程利用率、请求相关比较(如每秒请求数)和流媒体功能的比较。
以下是 asp.net 团队的一些初步 Kestrel 基准测试。虽然不像您正在寻找的那样详尽无遗,但您会发现他们 post 一些关于 RPS 的信息。我相信随着他们接近发布,会有更多。您可以通过简单的 google 搜索在 Internet 上找到 IIS 基准:
这是 GitHub 存储库中的 XSLX file,您可以在其中查看您正在寻找的性能比较。
打开 Excel 上的文件并检查“最新”选项卡。
更新:
excel 文件不再可用,已替换为 interactive Power BI dashboard。
截至 2016 年 11 月,直接来自 ASP.NET benchmarks。
在 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 上如此慢。
我为当前项目做了很多基准测试,在 IIS 和 Kestrel 上托管 .net core 1.0 和 2.0 应用程序。测试是真实世界的 rest-api 带有 authentication/authorization、日志记录、指标、速率限制等的 CRUD。此外,.net 核心应用程序完全由 MS 书籍完成,符合推荐的 1.0/2.0 标准.
在相同的硬件设置下,在 IIS 后方托管每秒处理的请求数不断增加约 40%。我仍然找不到能够解释性能差异的文章或顾问。
我还试图通过翻阅设置和服务初始化程序从核心基准测试机构 https://github.com/aspnet/benchmarks 那里找到任何类型的优化技巧,但 IIS 仍然更快。
有什么指点吗?
至于为什么 in-process 在 IIS 中托管更快(直接取自文档):
Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. In-process hosting provides improved performance over out-of-process hosting because requests aren't proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine.
与 Kestrel http 服务器相比,IIS 的性能如何?
似乎 Kestrel 受到异步和事件驱动服务器框架家族的极大启发。同时,IIS发展历史悠久,在功能上明显更加成熟。考虑到所有这些因素,我专门寻找内存利用率、线程利用率、请求相关比较(如每秒请求数)和流媒体功能的比较。
以下是 asp.net 团队的一些初步 Kestrel 基准测试。虽然不像您正在寻找的那样详尽无遗,但您会发现他们 post 一些关于 RPS 的信息。我相信随着他们接近发布,会有更多。您可以通过简单的 google 搜索在 Internet 上找到 IIS 基准:
这是 GitHub 存储库中的 XSLX file,您可以在其中查看您正在寻找的性能比较。
打开 Excel 上的文件并检查“最新”选项卡。
更新: excel 文件不再可用,已替换为 interactive Power BI dashboard。
截至 2016 年 11 月,直接来自 ASP.NET benchmarks。
在 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 上如此慢。
我为当前项目做了很多基准测试,在 IIS 和 Kestrel 上托管 .net core 1.0 和 2.0 应用程序。测试是真实世界的 rest-api 带有 authentication/authorization、日志记录、指标、速率限制等的 CRUD。此外,.net 核心应用程序完全由 MS 书籍完成,符合推荐的 1.0/2.0 标准.
在相同的硬件设置下,在 IIS 后方托管每秒处理的请求数不断增加约 40%。我仍然找不到能够解释性能差异的文章或顾问。
我还试图通过翻阅设置和服务初始化程序从核心基准测试机构 https://github.com/aspnet/benchmarks 那里找到任何类型的优化技巧,但 IIS 仍然更快。
有什么指点吗?
至于为什么 in-process 在 IIS 中托管更快(直接取自文档):
Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. In-process hosting provides improved performance over out-of-process hosting because requests aren't proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine.