為了驗證 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 佔用情況如下
釋出後 .net core 版用了5臺4核8G的伺服器,且訪問量更低,CPU 佔用情況如下
這個 CPU 佔用異常高的問題估計我們寫的程式碼有關,我們會進一步排查。
更新
18:45 左右,加了1臺伺服器,現在是6臺伺服器。
19:10 左右,由於CPU佔用問題,暫時下線。6臺伺服器訪問量更低時,CPU 波動很大,見下圖。
22:26 ,CPU 佔用異常高問題目前排查下來最大的嫌疑是 EnyimMemcachedCore ,明天會進行驗證。
相關博文: