7. 堪比JMeter的.Net壓測工具 – Crank 總結篇 – crank帶來了什麼
目錄
- 堪比JMeter的.Net壓測工具 – Crank 入門篇
- 堪比JMeter的.Net壓測工具 – Crank 進階篇 – 認識yml
- 堪比JMeter的.Net壓測工具 – Crank 進階篇 – 認識bombardier
- 堪比JMeter的.Net壓測工具 – Crank 進階篇 – 認識wrk、wrk2
- 堪比JMeter的.Net壓測工具 – Crank 實戰篇 – 介面以及場景壓測
- 堪比JMeter的.Net壓測工具 – Crank 實戰篇 – 收集診斷跟蹤資訊與如何分析瓶頸
- 堪比JMeter的.Net壓測工具 – Crank 總結篇 – crank帶來了什麼
1. 前言
通過上面的學習,我們已經了解清楚crank的職責以及作用,那麼我們重新回來思考一下,crank能為我們帶來什麼?
2. Crank帶來了什麼?
- 為分散式壓測提供了解決方案、可以模擬更高強度的壓測
- 單機壓測最多提供65535,通過支援多個Agent可以很輕鬆的突破這個極限
- 提供了壓測結果二次處理的能力,並支援將結果保存到json、csv、資料庫甚至是es(目前仍在對接)
- 通過對以往壓測數據的結果做折線圖的展示
- 通過ci可以完成自動化觸發壓測,再通過折線圖清晰了解每次程式碼對性能的提升情況
3. Crank還能更進一步嗎?
上面的實戰訓練我們僅僅是做了基礎的工作,儘管我們通過模擬多介面同時壓測完成了對單場景的壓測,但真實的項目遠遠不會是所有人都同時訪問一個頁面,而不訪問其它頁面,那我們如何模擬出更貼近真實場景的用戶軌跡呢?
真實的用戶場景應該更像
如果我們希望更進一步,想知道我們的系統的極限究竟在哪裡,我們可以按照按照此用戶場景進行深度還原壓測場景,完成對整個場景的壓測,並通過調整副本、頻寬、Redis集群、資料庫集群數量等方式提升QPS,最後通過不斷的壓測以及配置不斷的增加,了解到我們使用什麼樣的配置、用多少副本、用多少頻寬、什麼樣的Redis、資料庫集群能夠抗住多少的用戶,但這個需要視我們真實的業務場景,如果QPS到100就夠用的話,那麼我們花費那麼高的成本搞那麼大的QPS有什麼意義呢?我們又不是需要再做一個淘寶出來,實際沒有那麼高的用戶量,搞到極致的優化也只是勞民傷財罷了
4. 疑問
- Agent的壓測機配置必須很高嗎?
- 壓測機的配置高,將賦予壓測機更高的壓測能力,但QPS的高低並不是通過壓測機來決定,Qps低的項目,搞個超級電腦過來,Qps仍然低
- 為何我啟動Agent執行任務後每次都需要Install Sdk?每次安裝都需要半天,FQ我也處理過了,但還是很慢
- 建議Agent啟動時指定dotnethome,並且在啟動任務時,最好指定任務的框架環境是已經存在的環境,Agent的啟動配置可以查看入門篇,指定任務運行框架可以查看進階篇
- 為何我通過crank官方的命名運行出錯呢?
- crank還在持續更新升級中,可能會出現用新版本的crank發送上文示例不能使用的情況,可以安裝指定版本的crank,以上示例都有在0.2.0-alpha.21567.1版本運行成功
- 我想自己搭建Agent的docker鏡像,文中提供的鏡像不知道是否安全?
- 文中用到的鏡像是通過下面的dockerfile編譯的,沒有搞很複雜的東西,不放心的可以使用自建鏡像
- doddgu/crankagent:net5.0是.net 5.0版本
- 我的壓測場景也需要登錄,但不需要實現每次請求都是一個新的用戶,我該選擇bombardier還是wrk、wrk2呢?
- 針對壓測場景簡單的,又不需要實現多用戶、不需要動態參數的可以用bombardier、簡單不需要學習lua、成本低
- 希望可以用動態參數,玩一些複雜場景的,選擇wrk或者wrk2更合適
- 壓測場景單一,且不需要實現多用戶、不需要動態參數不能使用wrk、wrk2嗎?
- bombardier能實現的場景,wrk、wrk2都可以做到
- 針對簡單的get請求,不需要更改參數使用wrk一樣很簡單、使用post請求的需要多掌握一點lua腳本知識,有條件的還是建議使用wrk、wrk2,它更靈活入手成本也不是太大
crank agent dockerfile
FROM mcr.microsoft.com/dotnet/sdk:5.0
ENV PATH="${PATH}:/root/.dotnet/tools"
EXPOSE 5010
RUN dotnet tool install -g Microsoft.Crank.Agent --version "0.2.0-alpha.21567.1"
ENTRYPOINT crank-agent --dotnethome "/usr/share/dotnet"
5. 總結
Crank的功能其實是很單一的,它不像我們起初想像的那樣龐大,所有的事情都能做,也沒那麼複雜,但我們也可以說Crank什麼都能幹,因為它提供了讓我們運行dotnet項目以及在docker中運行dotnet程式的能力。
但它最後能做什麼事取決於使用它的人想用它來幹什麼,它只是一個工具而已,不要把它想得太美好,有了它以後可以不寫程式碼,自動化完成測試工作,我只需要等結果,自動出報告等等……有這樣想法的還是去洗洗臉吧,大白天的竟然在做夢?
壓測以及性能調優考驗的是我們對整個系統的一個全局掌控能力,通過壓測讓我們知道目前系統的瓶頸在哪裡?等我們的業務規模到了瓶頸時,可以通過調優提高項目的QPS、使其響應能力更快,不會因為系統而影響我們的業務,其目的是幫助業務發展的更好,但如果業務沒發展起來,一味的陷入性能調優這個深坑中去,會使得我們花費高昂的代價做了沒有實際意義的事,就比如說家裡總共就四口人,非得搞個中巴,美其名曰可以拉更多的人,過年走親戚不會坐不下什麼的,每次出門費油又心疼的不得了,最後捨不得開了,最後還得花錢給它找停車位,那就得不償失了
開源地址
MASA.BuildingBlocks://github.com/masastack/MASA.BuildingBlocks
MASA.Contrib://github.com/masastack/MASA.Contrib
MASA.Utils://github.com/masastack/MASA.Utils
MASA.EShop://github.com/masalabs/MASA.EShop
MASA.Blazor://github.com/BlazorComponent/MASA.Blazor
如果你對我們的 MASA Framework 感興趣,無論是程式碼貢獻、使用、提 Issue,歡迎聯繫我們