1. 程式人生 > >當我們討論性能測試時,我們在說什麽?

當我們討論性能測試時,我們在說什麽?

處理方法 負載均衡 wid bsp 使用場景 方法 業務流程 故障 abi

說起性能測試,大家會想到哪些詞?錄制腳本、模擬高並發?性能需求分析、業務流程梳理?監控資源耗用、性能瓶頸定位?優化代碼處理邏輯、提升服務器配置?

但這真的是性能測試的本質和最終目的麽?這篇博客,聊聊我對軟件性能的一些看法和思考。。。

首先明確一點:技術的存在是為了解決實際的業務發展中遇到的問題和痛點!

隨著互聯網時代不斷深入生活工作的各方面,絕大多數的軟件系統都會面臨如下三個挑戰:

1、日益增長的用戶數量;

2、日漸復雜的業務場景;

3、急劇膨脹的數據沖擊;

這對於軟件系統而言,就意味著及時高效的處理能力、更好的服務可用性以及長期運行的穩定性等要求。

從以上幾點要求出發,站在性能測試的角度,來談談我們需要註意哪些事項。。。

更及時高效的處理能力

技術分享圖片

在互聯網最初的年代,有二五八原則一說。意思就是對用戶而言,在頁面做一個功能操作,如果能在2秒能出現用戶期待的內容,那麽用戶體驗就是比較好的。

如果5秒之內可以返回結果,那麽對用戶來說就是可以接受的範圍,如果超過8秒,絕大多數用戶就會選擇離開或退出該頁面。

雖然這只是一個籠統的概念,但也能看出用戶對軟件系統處理能力的容忍性。

近幾年隨著網絡通訊技術的不斷發展,以及硬件設施的不斷提升,導致用戶對軟件處理能力越來越低的容忍力。

從性能優化角度出發,就需要我們盡力保持和降低系統的99%RT(即一段時間內請求響應時間從低到高排序,低於99%響應時間的上限邊界值)的同時,提高單位時間內的處理能力

請求響應時間=請求發送耗時+請求解析耗時+請求處理耗時+處理結果返回耗時

提高處理能力和降低響應時間,有很多技術方案可以實現,比如:

提高網絡傳輸速率、優化請求傳輸方式(串行→並行→連接復用→管道化)、增加緩存、優化代碼處理方式、增加處理請求的機器數量、提升機器配置等方式。

更好的服務可用性

技術分享圖片

什麽是可用性(Usability)?可用性實際上並不是一個具體的東西,也沒有明確的定義。

個人覺得Jakob Nielsen大師提出的可用性五大屬性,就很客觀全面的介紹了可用性的特點,它們分別是:

可學習性(Learnability):初次接觸這個設計時,用戶完成基本任務的難易程度;

效率 (Efficiency):用戶能多快完成任務;

可記憶性(Memorability):當用戶一段時間沒有使用產品後,是否能馬上回到以前的熟練程度;

出錯(Errors):用戶能否從錯誤中恢復(從系統角度出發,可以理解為容錯性);

滿意度(Satisfaction):用戶對產品的主觀滿意度。

如果真要給出一個定義,那麽我們可以這樣理解:可用性是指在特定的使用場景下,產品為特定用戶用於特定目的時所具有的有效性、效率和主觀滿意度

從可用性五大屬性出發,站在性能優化角度,就要求我們做如下的一些事情,來不斷提升軟件服務可用性:

可學習性:盡可能減少用戶操作的步驟,優化業務邏輯;

效率:提升響應時間和系統的處理能力(回到上面提到的及時高效的處理能力);

可記憶性:人性化的提示,導航能力,是否符合特定用戶的操作習慣;

出錯:提升系統的容錯能力和恢復能力;

滿意度:提高用戶體驗,做好用戶需求調研和場景建模分析;

如果只討論技術保障方案,我們需要做好服務治理、服務解耦,通過主從模式、系統集群負載均衡、雙機雙工、分布式等方式,來保證系統在高可用的同時,降低故障恢復時間。

長期運行的穩定性

技術分享圖片

一般來說,系統的穩定性指標要求7*24小時或者5*8小時,系統的存活時間越長,意味著系統越穩定,這個要根據系統具體的業務定位來確定。

現在而言,系統的穩定性要求已經不僅僅是存活時間,還要求運行過程中的保持服務的高可用、及時處理能力、容錯能力以及出現故障的及時恢復能力

那麽如何保證系統的穩定性呢?

容錯能力:即系統對於自身出現的錯誤具有一定的屏蔽或處理能力。常見的容錯手段包括如下幾點:

①、失敗重試機制;

②、多機備份自動切換;

③、設置合理的TimeOut;

④、服務解耦,微服務模式;

⑤、權重選舉,服務降級;

更多閱讀:億級web系統的高容錯性實踐

故障恢復能力:即系統能否從出錯或故障中及時恢復正常服務水平的能力。

一般來說會根據故障的嚴重等級和優先級,確定不同等級的故障需要在多久時間內恢復正常提供服務的能力。常見的故障有如下幾種:

①、硬件及有關設備故障;

②、軟件系統故障;

③、數據故障;

④、網絡故障;

為了應對如上的幾種故障,常見的一些容災恢復方案有如下幾種:

①、系統需要具有自我診斷、故障報告及指示處理方法的能力,以及具備冗余及自動切換能力;

②、監控到故障發生時,系統需要具備及時隔離、服務降級、服務快速切換的能力;

③、主從熱備,多機冷備,異地多活等措施;

更多閱讀:不容忽視的軟件可恢復測試

總結

回到開頭提到的內容:技術的存在是為了解決實際的業務發展中遇到的問題和痛點!

隨著業務的不斷發展,軟件系統面臨著日益增長的用戶數量、日漸復雜的業務場景以及急劇膨脹的數據沖擊這幾種挑戰。

這就要求我們的系統具有及時高效的處理能力、更好的服務可用性以及長期運行的穩定性等要求。

為了解決這幾點挑戰,使系統具有所要求的能力,我們需要通過性能測試來驗證系統是否具有我們所期望的能力

我們通過完善性能測試流程,優化性能測試工具,采用不同性能測試方法,在各種環境和條件下進行測試,全方位監控,定位分析性能瓶頸,針對性的進行優化

最終的目的是希望系統具有及時高效的處理能力,更好的服務可用性和長期運行的穩定性,來滿足系統面臨的種種挑戰,為業務的發展提供更好的服務保障!

當我們討論性能測試時,我們在說什麽?