ASP.NET Core 8 在 Windows 上各種部署模型的性能測試

来源:https://www.cnblogs.com/kklldog/archive/2023/12/11/aspnetcore-benchmarks.html
-Advertisement-
Play Games

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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 問題復現 (1)登錄DVMA後,設置DVWA Security為Low。 (2)進入File Inclusion,訪問dvwa/vulnerabilities/fi目錄下的的test.txt文件(自己創建的測試文件)。 (3)報錯ERROR: File not found! 找不到文件。 2 抓 ...
  • 當我們談論編程中的數據結構時,順序容器是不可忽視的一個重要概念。順序容器是一種能夠按照元素添加的順序來存儲和檢索數據的數據結構。它們提供了簡單而直觀的方式來組織和管理數據,為程式員提供了靈活性和性能的平衡。Qt 中提供了豐富的容器類,用於方便地管理和操作數據。這些容器類涵蓋了各種不同的用途,從簡單的... ...
  • 最近想著把工作中使用過的java命令都梳理一下,方便日後查閱。雖然這類文章很多,但自己梳理總結後,還是會有一些新的收穫。這也是這篇筆記的由來。 ...
  • SCG(Spring Cloud Gateway)就我個人理解,是想讓開發者把它作為一個較為簡單的網關框架,只需簡單在yml文件中寫幾個配置項就可以運行。所以它不大推薦在網關這一層獲取body數據或者做一下複雜的業務處理。故而在實際編寫代碼中,獲取queryParam很容易,但body數據就比較麻煩 ...
  • 1 Python解釋器下載 1.1 安裝環境 Windows 10 專業工作站版22H2 python-3.9.6-amd64.exe 1.2 下載地址 Python官網:https://www.python.org/ Python鏡像:https://registry.npmmirror.com/ ...
  • 當我們談論編程中的數據結構時,順序容器是不可忽視的一個重要概念。順序容器是一種能夠按照元素添加的順序來存儲和檢索數據的數據結構。它們提供了簡單而直觀的方式來組織和管理數據,為程式員提供了靈活性和性能的平衡。Qt 中提供了豐富的容器類,用於方便地管理和操作數據。這些容器類涵蓋了各種不同的用途,從簡單的... ...
  • 操作系統 :CentOS 7.6_x64 Python版本:3.9.12 MySQL版本:5.7.38 日常開發過程中,會遇到mysql數據表的備份需求,需要針對單獨的數據表進行備份並定時清理數據。 今天記錄下python3如何使用pandas進行mysql數據表的備份,我將從以下幾個方面進行展開: ...
  • 限制結果 您可以通過使用"LIMIT"語句來限制查詢返回的記錄數量。以下是一個示例,獲取您自己的Python伺服器中"customers"表中的前5條記錄: import mysql.connector mydb = mysql.connector.connect( host="localhost" ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...