ASP.NET Core 8 在 Windows 上各种部署模型的性能测试
ASP.NET Core 8 在 Windows 上各種部署模型的性能測試
我們知道 Asp.net Core 在 windows 服務器上部署的方案有 4 種之多。這些部署方案對性能的影響一直以來都是靠經驗。比如如果是部署在 IIS 下,那么 In Process 會比 Out Process 快;如果是 Self Host 那么使用 HttpSys 服務器會比 Kestrel 快。
那么真實結果是否如我們想象的那樣呢?接下來就讓我們來做一次 benchmarks 吧。
托管模型
在開始 benchmark 測試之前,我們再來來介紹一下這 4 種托管模型:
1. InProcess 模式
InProcess 模式將 ASP.NET Core 應用程序直接部署在 IIS 中,與 IIS 工作進程相同的進程中運行。理論上,這種模式的性能應該相對較高,因為請求無需經過額外的進程通信。
2. OutProcess 模式
OutProcess 模式下,ASP.NET Core 應用程序在獨立于 IIS 工作進程的進程中運行。這種模式通過進程間通信與 IIS 進行通信,理論上可能引入一些性能開銷。
3. SelfHost HttpSys 模式
HttpSys 模式是一種自承載方式,利用 Windows 操作系統內核級的 HTTP 服務器。通常認為在處理大量并發連接時具有優勢,因為它與操作系統集成。
4. SelfHost Kestrel 模式
Kestrel 模式是 ASP.NET Core 的內置 Web 服務器,可以獨立運行而無需依賴其他外部服務器。Kestrel 是輕量級、跨平臺的選擇,專為處理大量并發連接而設計。
壓測平臺
- 操作系統: Windows Server 2012 R2 Datacenter
- 硬件配置: Intel E3 1260L CPU, 16GB 內存
- 網絡: 家庭內網,TP-LINK 家用 1000M 交換機
因為本人沒啥高性能的服務器,家里只有一臺老舊的 HP Gen8 服務器。安裝 windows server 2012 R2 datacenter,CPU 為 E3 1260L。E3 同樣是古董,大概是 intel 10年前的產品。內存為 16G 1333 服務器專用內存。
整個測試平臺可以說是相當拉跨。湊合用用吧,反正不是彪極限性能,橫向對比的話問題不大。
壓測過程
新建一個 ASP.NET Core 默認項目。采用 VS2022 自帶的模板,使用 miniapi 對 '/' 路徑直接輸出 'Hello World!' 字符串。
using System.Diagnostics;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
var app = builder.Build();
// Configure the HTTP request pipeline.
app.MapGet("/", () =>
{
return "Hello World!";
});
app.Run();
如果使用 HttpSys 服務器則多加一行代碼:
builder.WebHost.UseHttpSys();
- 測試工具: 使用 Netling 進行壓力測試,模擬真實用戶請求。
- 測試流程: 在對每個場景進行測試前先進行 60s 的預熱,等待大概 10s 再后進行 4 次持續的壓力測試(8個線程,持續30s),記錄結果(RPS)。
Benchmark 測試結果
以下是測試結果:
| 托管模型 | Requests Per Second (RPS) |
|---|---|
| InProcess | 7266 |
| OutProcess | 7960 |
| SelfHost HttpSys | 26300 |
| SelfHost Kestrel | 27199 |
性能分析與總結
測試結果大大的出乎了我的預料,特別是 OutProcess 模式的性能略高于 InProcess 模式,與我的認知出現了比較大的偏差。同時,SelfHost Kestrel 模式的性能優于 SelfHost HttpSys 模式,這也與一般的預期不同,因為 HttpSys 是運行在內核態的服務器。
這樣的差異可能受多種因素影響,包括硬件配置、操作系統版本、IIS的版本等,畢竟這些產品都是10年前的產物,而 ASP.NET Core8 是 2023 年的全新產品。測試結果受到多種因素的影響,大家不要較真,就圖一樂吧。
不過從結果上橫向來看,至少可以得出以下結論:
- Self Host 比 IIS Host 性能上要快上好幾倍。在追求極限性能的場景,應該選擇 Self Host。
- IIS Host 不管是 In Process 還是 Out Process 性能也不差。就測試平臺這種老古董也能跑個 7000+ RPS。這還不是極限,因為 7000 RPS 的時候 CPU 才到 50%+ 。如果我再多加一些線程,相信輕松可以過萬。
- 以上最差的結果也有 7000 多的 RPS。這表明對于一般的信息系統而言,ASP.NET Core 本身的性能一般不會是瓶頸。瓶頸最早出現一定是在其他 IO 模塊,比如數據庫。
總結
以上是生活随笔為你收集整理的ASP.NET Core 8 在 Windows 上各种部署模型的性能测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日媒统计最新超级计算机排名:日本第二 中
- 下一篇: 荣耀 90 / Pro 系列手机支持全新