ASP.Net Core 在 Windows 和 Linux Docker 容器上运行。考虑到 Linux 主机比 Windows 主机便宜,如果不需要完整的 .Net 框架,那么在 IIS/Windows 上运行应用程序与在 Nginx/Linux 上运行应用程序有什么好处?
Roberto Prevato 的一项研究表明,在 Linux 上运行它会更好(!),至少对于 ASP.NET Core 来说是这样。
结果与从发电负载获得的结果一致 通过有线连接到互联网的计算机:相同的 ASP.NET Core 在 Linux 和 Docker 中部署的应用程序比在 Linux 和 Docker 中部署的应用程序要快得多 部署在 Windows 主机中(均在应用程序服务计划内)。这些 新的测试表明,托管的应用程序具有更强的主导地位 Linux,尤其是在为更大的身体提供响应时。他得到的结果的简短总结:
每秒请求数(越高越好):
Scenario Linux Windows +%
Hello World 646.6 432.85 +49.38%
1KB 623.05 431.95 +44.24%
10KB 573.6 361.9 +58.5%
50KB 415.5 210.05 +97.81%
100KB 294.35 143.25 +105.48%
响应时间(越低越好):
Scenario Linux Windows -%
Hello World 168.85 242.2 -30.28%
1KB 171.25 249.8 -31.45%
10KB 184.2 292.7 -37.07%
50KB 233.3 542.85 -57.02%
100KB 365.05 817.35 -55.34%
如果您真的关心您的http传输,或者.net将使用哪个时区数据库,那么您可以做出这样的决定。对于大多数用户来说,并没有什么大的好处。如果您希望使用 AD 登录,那么您几乎必须使用 Windows 和 IIS,因为您需要一台属于活动目录域的服务器。
请记住,Linux 确实有免费选项,但大多数付费企业对 Linux 的支持通常是相同的,甚至比 Windows 更贵。
我知道这是一个老问题,但它仍然非常相关,并且缺乏公认的答案促使我插话。
使用 IIS(仅在 Windows 中可用),进程内托管模型可提供更好的性能。
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/in-process-hosting?view=aspnetcore-8.0
另一种进程外托管模型,其中 IIS 或其他 Web 服务器(Apache、Nginx)与 Kestrel 结合用作反向代理,吞吐量较低。
因此,在这些基准测试中,很可能直接使用 Kestrel。但在生产环境中,Web 服务器几乎总是被用作进程内代理或反向代理,因为 Web 服务器比轻量级 Kestrel 具有更多的安全功能。最好在更接近生产环境的地方执行基准测试。我还没有对 Windows/IIS 进程内与 Linux/Nginx 反向代理进行任何基准测试。据我所知,目前还没有这方面的工作。