當咱們討論性能測試時,咱們在說什麼?

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

但這真的是性能測試的本質和最終目的麼?這篇博客,聊聊我對軟件性能的一些見解和思考。。。緩存

 

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

隨着互聯網時代不斷深刻生活工做的各方面,絕大多數的軟件系統都會面臨以下三個挑戰:服務器

一、日益增加的用戶數量;網絡

二、日漸複雜的業務場景;併發

三、急劇膨脹的數據衝擊;負載均衡

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

從以上幾點要求出發,站在性能測試的角度,來談談咱們須要注意哪些事項。。。微服務

 

更及時高效的處理能力高併發

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

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

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

近幾年隨着網絡通信技術的不斷髮展,以及硬件設施的不斷提高,致使用戶對軟件處理能力愈來愈低的容忍力。

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

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

提升處理能力和下降響應時間,有不少技術方案能夠實現,好比:

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

 

更好的服務可用性

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

我的以爲Jakob Nielsen大師提出的可用性五大屬性,就很客觀全面的介紹了可用性的特色,它們分別是:

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

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

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

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

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

若是真要給出一個定義,那麼咱們能夠這樣理解:可用性是指在特定的使用場景下,產品爲特定用戶用於特定目的時所具備的有效性、效率和主觀滿意度

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

可學習性:儘量減小用戶操做的步驟,優化業務邏輯;

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

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

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

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

若是隻討論技術保障方案,咱們須要作好服務治理、服務解耦,經過主從模式、系統集羣負載均衡、雙機雙工、分佈式等方式,來保證系統在高可用的同時,下降故障恢復時間。

 

長期運行的穩定性

通常來講,系統的穩定性指標要求7*24小時或者5*8小時,系統的存活時間越長,意味着系統越穩定,這個要根據系統具體的業務定位來肯定。

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

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

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

①、失敗重試機制;

②、多機備份自動切換;

③、設置合理的TimeOut;

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

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

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

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

通常來講會根據故障的嚴重等級和優先級,肯定不一樣等級的故障須要在多久時間內恢復正常提供服務的能力。常見的故障有以下幾種:

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

②、軟件系統故障;

③、數據故障;

④、網絡故障;

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

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

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

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

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

 

總結

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

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

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

爲了解決這幾點挑戰,使系統具備所要求的能力,咱們須要經過性能測試來驗證系統是否具備咱們所指望的能力

咱們經過完善性能測試流程,優化性能測試工具,採用不一樣性能測試方法,在各類環境和條件下進行測試,全方位監控,定位分析性能瓶頸,針對性的進行優化

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

相關文章
相關標籤/搜索