ASP.NET Core 8 在 Windows 上各種部署模型的性能測試
我們知道 Asp.net Core 在 windows 服務(wù)器上部署的方案有 4 種之多。這些部署方案對性能的影響一直以來都是靠經(jīng)驗。比如如果是部署在 IIS 下,那么 In Process 會比 Out Process 快;如果是 Self Host 那么使用 HttpSys 服務(wù)器會比 Kestrel 快。
那么真實結(jié)果是否如我們想象的那樣呢?接下來就讓我們來做一次 benchmarks 吧。
托管模型
在開始 benchmark 測試之前,我們再來來介紹一下這 4 種托管模型:
1. InProcess 模式
InProcess 模式將 ASP.NET Core 應(yīng)用程序直接部署在 IIS 中,與 IIS 工作進程相同的進程中運行。理論上,這種模式的性能應(yīng)該相對較高,因為請求無需經(jīng)過額外的進程通信。
2. OutProcess 模式
OutProcess 模式下,ASP.NET Core 應(yīng)用程序在獨立于 IIS 工作進程的進程中運行。這種模式通過進程間通信與 IIS 進行通信,理論上可能引入一些性能開銷。
3. SelfHost HttpSys 模式
HttpSys 模式是一種自承載方式,利用 Windows 操作系統(tǒng)內(nèi)核級的 HTTP 服務(wù)器。通常認為在處理大量并發(fā)連接時具有優(yōu)勢,因為它與操作系統(tǒng)集成。
4. SelfHost Kestrel 模式
Kestrel 模式是 ASP.NET Core 的內(nèi)置 Web 服務(wù)器,可以獨立運行而無需依賴其他外部服務(wù)器。Kestrel 是輕量級、跨平臺的選擇,專為處理大量并發(fā)連接而設(shè)計。
壓測平臺
- 操作系統(tǒng): Windows Server 2012 R2 Datacenter
- 硬件配置: Intel E3 1260L CPU, 16GB 內(nèi)存
- 網(wǎng)絡(luò): 家庭內(nèi)網(wǎng),TP-LINK 家用 1000M 交換機
因為本人沒啥高性能的服務(wù)器,家里只有一臺老舊的 HP Gen8 服務(wù)器。安裝 windows server 2012 R2 datacenter,CPU 為 E3 1260L。E3 同樣是古董,大概是 intel 10年前的產(chǎn)品。內(nèi)存為 16G 1333 服務(wù)器專用內(nèi)存。
整個測試平臺可以說是相當拉跨。湊合用用吧,反正不是彪極限性能,橫向?qū)Ρ鹊脑拞栴}不大。
壓測過程
新建一個 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 服務(wù)器則多加一行代碼:
builder.WebHost.UseHttpSys();
- 測試工具: 使用 Netling 進行壓力測試,模擬真實用戶請求。
- 測試流程: 在對每個場景進行測試前先進行 60s 的預熱,等待大概 10s 再后進行 4 次持續(xù)的壓力測試(8個線程,持續(xù)30s),記錄結(jié)果(RPS)。
Benchmark 測試結(jié)果
以下是測試結(jié)果:
托管模型 | Requests Per Second (RPS) |
---|---|
InProcess | 7266 |
OutProcess | 7960 |
SelfHost HttpSys | 26300 |
SelfHost Kestrel | 27199 |
性能分析與總結(jié)
測試結(jié)果大大的出乎了我的預料,特別是 OutProcess 模式的性能略高于 InProcess 模式,與我的認知出現(xiàn)了比較大的偏差。同時,SelfHost Kestrel 模式的性能優(yōu)于 SelfHost HttpSys 模式,這也與一般的預期不同,因為 HttpSys 是運行在內(nèi)核態(tài)的服務(wù)器。
這樣的差異可能受多種因素影響,包括硬件配置、操作系統(tǒng)版本、IIS的版本等,畢竟這些產(chǎn)品都是10年前的產(chǎn)物,而 ASP.NET Core8 是 2023 年的全新產(chǎn)品。測試結(jié)果受到多種因素的影響,大家不要較真,就圖一樂吧。文章來源:http://www.zghlxwxcb.cn/news/detail-750354.html
不過從結(jié)果上橫向來看,至少可以得出以下結(jié)論:文章來源地址http://www.zghlxwxcb.cn/news/detail-750354.html
- Self Host 比 IIS Host 性能上要快上好幾倍。在追求極限性能的場景,應(yīng)該選擇 Self Host。
- IIS Host 不管是 In Process 還是 Out Process 性能也不差。就測試平臺這種老古董也能跑個 7000+ RPS。這還不是極限,因為 7000 RPS 的時候 CPU 才到 50%+ 。如果我再多加一些線程,相信輕松可以過萬。
- 以上最差的結(jié)果也有 7000 多的 RPS。這表明對于一般的信息系統(tǒng)而言,ASP.NET Core 本身的性能一般不會是瓶頸。瓶頸最早出現(xiàn)一定是在其他 IO 模塊,比如數(shù)據(jù)庫。
到了這里,關(guān)于ASP.NET Core 8 在 Windows 上各種部署模型的性能測試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!