ASP.NET Core 8 在 Windows 上各種部署模型的性能測試 我們知道 Asp.net Core 在 windows 伺服器上部署的方案有 4 種之多。這些部署方案對性能的影響一直以來都是靠經驗。比如如果是部署在 IIS 下,那麼 In Process 會比 Out Process 快 ...
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 模塊,比如資料庫。
QQ群:1022985150 VX:kklldog 一起探討學習.NET技術
作者:Agile.Zhou(kklldog)
出處:http://www.cnblogs.com/kklldog/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。