同“窗”的較量:部署在 Windows 上的 .NET Core 版部落格站點發布上線(已暫時下線)

部落格園團隊 發表於 2019-08-13

為了驗證 docker swarm 在高併發下的效能問題,週一我們釋出了使用 docker-compose 部署的 .net core 版部落格站點(博文連結),但由於有1行程式碼請求後端 web api 時沒有使用快取,結果造成大量 web api 請求發向跑後端服務的叢集,悲劇的是這個叢集是用 docker swarm 部署的,請求是用 nginx 容器轉發的,結果壓垮了 nginx ,大量後端請求 502 ,被迫回退至 windows + .net framework 版部落格系統。

使用 docker-compose 部署沒有出現高併發下響應速度極不穩定的效能問題,以及後端 docker swarm 叢集被大量請求壓垮,已經基本驗證了 docker swarm 的眼高手低,無法勝任高併發的場景。

在準備改用 k8s 部署之前,我們決定進行一個最直截了當的對比,用同樣配置的 windows 伺服器部署 .net core 版部落格系統(同“窗”就是指這個),對比一下 .net core vs .net framework 的效能,看看是否真的是“青出於藍而勝於藍”?

直接在部署 .net framework 部落格系統的 windows 伺服器上安裝 .net core sdk 並部署 .net core 版部落格系統,“同窗”名副其實,一點不參假,不僅用的都是“Windows Server  2016 資料中心版 64位英文版”,而且系統環境配置都一樣。asp.net core 站點部署方式使用的是 IIS InProcess Hosting :

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

另外,之前釋出後提交評論速度慢是程式碼的問題,.net core 中沒有 .net framework 中的  HostingEnvironment.QueueBackgroundWorkItem ,遷移時我們偷懶了,沒有把提交評論的一些操作放到佇列中處理。今天我們改進了程式碼,用 Coravel 的佇列功能實現了,現在提交速度有了明顯的改善。

Windows 上的 .net core 版部落格站點已於 18: 15 左右釋出上線,它的表現如何,請看明天上午下午訪問高峰的演出。

釋出後立即發現 .net core 版的 CPU 消耗明顯高於 .net framework 版

釋出前 .net framework 版用了4臺4核8G的伺服器,CPU 佔用情況如下

同“窗”的較量:部署在 Windows 上的 .NET Core 版部落格站點發布上線(已暫時下線)

釋出後 .net core 版用了5臺4核8G的伺服器,且訪問量更低,CPU 佔用情況如下

同“窗”的較量:部署在 Windows 上的 .NET Core 版部落格站點發布上線(已暫時下線)

這個 CPU 佔用異常高的問題估計我們寫的程式碼有關,我們會進一步排查。

更新

18:45 左右,加了1臺伺服器,現在是6臺伺服器。

19:10 左右,由於CPU佔用問題,暫時下線。6臺伺服器訪問量更低時,CPU 波動很大,見下圖。

22:26 ,CPU 佔用異常高問題目前排查下來最大的嫌疑是 EnyimMemcachedCore ,明天會進行驗證。

同“窗”的較量:部署在 Windows 上的 .NET Core 版部落格站點發布上線(已暫時下線)

相關博文:


相關文章

攜程 Apollo 配置中心傳統 .NET 專案整合實踐 .Net

攜程 Apollo 配置中心傳統 .NET 專案整合實踐

官方文件存在的問題可能由於 Apollo 配置中心的客戶端原始碼一直處於更新中,導致其相關文件有些跟不上節奏,部分文件寫的不規範,很容易給做對接的新手朋友造成誤導。比如,我在參考如下兩個文件使用傳統
.NETCore CSharp 中級篇2-3 Linq簡介 C#|.Net

.NETCore CSharp 中級篇2-3 Linq簡介

.NETCoreCSharp 中級篇2-3本節內容為Linq及其擴充方法、Linq中表示式樹的使用簡介語言整合查詢(LINQ)是一系列直接將查詢功能整合到C#語言的技術統稱。資料查詢歷來都表示為簡單的
.NET----錯誤和異常處理機制 .Net

.NET----錯誤和異常處理機制

前言  錯誤的出現並不總是編寫程式的人的原因,有時應用程式會因為應用程式的終端使用者引發的動作或執行程式碼的環境發生錯誤。無論如何,我們都應預測應用程式中出現的錯誤,並相應的進行編碼。  .Net改進
【網站公告】.NET Core 版部落格站點第二次釋出嘗試 .Net

【網站公告】.NET Core 版部落格站點第二次釋出嘗試

在上次釋出失敗後,很多朋友建議我們改用 k8s ,但我們還是想再試試 docker swarm ,實在不行再改用 k8s 。在改進了 docker swarm 叢集的部署後,我們準備今天 17:30
Powered by .NET Core 進展:驗證高併發效能問題嫌疑犯 docker swarm Docker|.Net

Powered by .NET Core 進展:驗證高併發效能問題嫌疑犯 docker swarm

相關博文:【故障公告】釋出 .NET Core 版部落格站點引起大量 500 錯誤 【網站公告】.NET Core 版部落格站點第二次釋出嘗試 暴風雨中的 online : .NET Core 版部落
.netcore持續整合測試篇之搭建記憶體伺服器進行整合測試一 .Net

.netcore持續整合測試篇之搭建記憶體伺服器進行整合測試一

系列目錄在web專案裡,我們把每一層的程式碼的單元測試都通過並不代表程式能正常執行,因為這個過程缺失了http管道,很多時候我們還還需要把專案布在iis環境中或者在vs裡啟動iis express伺服
Asp.Net Core WebAPI+PostgreSQL部署在Docker中 Docker|PostgreSQL|.Net

Asp.Net Core WebAPI+PostgreSQL部署在Docker中

PostgreSQL是一個功能強大的開源資料庫系統。它支援了大多數的SQL:2008標準的資料型別,包括整型、數值值、布林型、位元組型、字元型、日期型、時間間隔型和時間型,它也支援儲存二進位制的大對像
Spring.Net 依賴注入 Spring|.Net

Spring.Net 依賴注入

一、Spring.Net概念  程式設計模型(Ioc,DI方式)IoC:控制反轉 原來建立物件的權利由程式來控制就是new例項,IoC就是改由容器來建立,相當於一個工廠, DI:依賴注入 沒有IoC就
.netcore持續整合測試篇之Xunit結合netcore記憶體伺服器傳送post請求 .Net

.netcore持續整合測試篇之Xunit結合netcore記憶體伺服器傳送post請求

系列目錄.net core整合測試之Post請求Web專案中,很多與使用者資料互動的請求都是Post請求,想必大家都用過HttpClient構造過post請求,這裡並不對HttpClient做詳細介紹
.NETCore C# 中級篇2-4 一文帶你完全弄懂正規表示式 C#|.Net

.NETCore C# 中級篇2-4 一文帶你完全弄懂正規表示式

.NETCoreCSharp 中級篇2-4本節內容為正規表示式的使用簡介有的時候,你是否有過這種需求:判斷一個Ip地址、郵箱、密碼規則是否合法。如果讓你使用if一類的傳統方法進行處理,你肯定會被逼瘋的
峰迴路轉:去掉 DbContextPool 後 Windows 上的 .NET Core 版部落格表現出色 .Net

峰迴路轉:去掉 DbContextPool 後 Windows 上的 .NET Core 版部落格表現出色

今天早上,我們修改了部落格程式中的1行程式碼,將 services.AddDbContextPool 改為 services.AddDbContext ,去掉 DbContextPool 。然後奇蹟出
如何在 Linux/Windows/MacOS 上使用 .NET 進行開發 .Net|macOS

如何在 Linux/Windows/MacOS 上使用 .NET 進行開發

瞭解 .NET 開發平臺啟動和執行的基礎知識。.NET 框架由 Microsoft 於 2000 年釋出。該平臺的開源實現 Mono 在 21 世紀初成為了爭議的焦點,因為微軟擁有 .NET 技術的多