說起效能測試,大家會想到哪些詞?錄製指令碼、模擬高併發?效能需求分析、業務流程梳理?監控資源耗用、效能瓶頸定位?優化**處理邏輯、提公升伺服器配置?
但這真的是效能測試的本質和最終目的麼?這篇部落格,聊聊我對軟體效能的一些看法和思考。。。
首先明確一點:技術的存在是為了解決實際的業務發展中遇到的問題和痛點!
隨著網際網路時代不斷深入生活工作的各方面,絕大多數的軟體系統都會面臨如下三個挑戰:
1、日益增長的使用者數量;
2、日漸複雜的業務場景;
3、急劇膨脹的資料衝擊;
這對於軟體系統而言,就意味著及時高效的處理能力、更好的服務可用性以及長期執行的穩定性等要求。
從以上幾點要求出發,站在效能測試的角度,來談談我們需要注意哪些事項。。。
更及時高效的處理能力
在網際網路最初的年代,有二五八原則一說。意思就是對使用者而言,在頁面做乙個功能操作,如果能在2秒能出現使用者期待的內容,那麼使用者體驗就是比較好的。
如果5秒之內可以返回結果,那麼對使用者來說就是可以接受的範圍,如果超過8秒,絕大多數使用者就會選擇離開或退出該頁面。
雖然這只是乙個籠統的概念,但也能看出使用者對軟體系統處理能力的容忍性。
從效能優化角度出發,就需要我們盡力保持和降低系統的99%rt(即一段時間內請求響應時間從低到高排序,低於99%響應時間的上限邊界值)的同時,提高單位時間內的處理能力。
請求響應時間=請求傳送耗時+請求解析耗時+請求處理耗時+處理結果返回耗時
提高處理能力和降低響應時間,有很多技術方案可以實現,比如:
提高網路傳輸速率、優化請求傳輸方式(序列→並行→連線復用→管道化)、增加快取、優化**處理方式、增加處理請求的機器數量、提公升機器配置等方式。
更好的服務可用性
什麼是可用性(usability)?可用性實際上並不是乙個具體的東西,也沒有明確的定義。
個人覺得jakob nielsen大師提出的可用性五大屬性,就很客觀全面的介紹了可用性的特點,它們分別是:
可學習性(learnability):初次接觸這個設計時,使用者完成基本任務的難易程度;
效率 (efficiency):使用者能多快完成任務;
可記憶性(memorability):當使用者一段時間沒有使用產品後,是否能馬上回到以前的熟練程度;
出錯(errors):使用者能否從錯誤中恢復(從系統角度出發,可以理解為容錯性);
滿意度(satisfaction):使用者對產品的主觀滿意度。
如果真要給出乙個定義,那麼我們可以這樣理解:可用性是指在特定的使用場景下,產品為特定使用者用於特定目的時所具有的有效性、效率和主觀滿意度。
從可用性五大屬性出發,站在效能優化角度,就要求我們做如下的一些事情,來不斷提公升軟體服務可用性:
可學習性:盡可能減少使用者操作的步驟,優化業務邏輯;
效率:提公升響應時間和系統的處理能力(回到上面提到的及時高效的處理能力);
可記憶性:人性化的提示,導航能力,是否符合特定使用者的操作習慣;
出錯:提公升系統的容錯能力和恢復能力;
滿意度:提高使用者體驗,做好使用者需求調研和場景建模分析;
如果只討論技術保障方案,我們需要做好服務治理、服務解耦,通過主從模式、系統集群負載均衡、雙機雙工、分布式等方式,來保證系統在高可用的同時,降低故障恢復時間。
長期執行的穩定性
一般來說,系統的穩定性指標要求7*24小時或者5*8小時,系統的存活時間越長,意味著系統越穩定,這個要根據系統具體的業務定位來確定。
現在而言,系統的穩定性要求已經不僅僅是存活時間,還要求執行過程中的保持服務的高可用、及時處理能力、容錯能力以及出現故障的及時恢復能力。
那麼如何保證系統的穩定性呢?
容錯能力:即系統對於自身出現的錯誤具有一定的遮蔽或處理能力。常見的容錯手段包括如下幾點:
①、失敗重試機制;
②、多機備份自動切換;
③、設定合理的timeout;
④、服務解耦,微服務模式;
⑤、權重選舉,服務降級;
故障恢復能力:即系統能否從出錯或故障中及時恢復正常服務水平的能力。
一般來說會根據故障的嚴重等級和優先順序,確定不同等級的故障需要在多久時間內恢復正常提供服務的能力。常見的故障有如下幾種:
①、硬體及有關裝置故障;
②、軟體系統故障;
③、資料故障;
④、網路故障;
為了應對如上的幾種故障,常見的一些容災恢復方案有如下幾種:
①、系統需要具有自我診斷、故障報告及指示處理方法的能力,以及具備冗餘及自動切換能力;
②、監控到故障發生時,系統需要具備及時隔離、服務降級、服務快速切換的能力;
③、主從熱備,多機冷備,異地多活等措施;
總結
回到開頭提到的內容:技術的存在是為了解決實際的業務發展中遇到的問題和痛點!
隨著業務的不斷發展,軟體系統面臨著日益增長的使用者數量、日漸複雜的業務場景以及急劇膨脹的資料衝擊這幾種挑戰。
這就要求我們的系統具有及時高效的處理能力、更好的服務可用性以及長期執行的穩定性等要求。
為了解決這幾點挑戰,使系統具有所要求的能力,我們需要通過效能測試來驗證系統是否具有我們所期望的能力。
我們通過完善效能測試流程,優化效能測試工具,採用不同效能測試方法,在各種環境和條件下進行測試,全方位監控,定位分析效能瓶頸,針對性的進行優化,
最終的目的是希望系統具有及時高效的處理能力,更好的服務可用性和長期執行的穩定性,來滿足系統面臨的種種挑戰,為業務的發展提供更好的服務保障!
當我們說流程管理時,我們在說什麼?
說到流程管理,你一定聽過這個定義。流程管理,是一種以規範化的構造端到端的卓越業務流程為中心,以持續的提高組織業務績效為目的的系統化方法。它是乙個操作性的定位描述,指的是流程分析 流程定義與重定義 資源分配 時間安排 流程質量與效率測評 流程優化等。流程管理離不開流程。中國最早的二言詩 斷竹 續竹 飛...
當我們在說事件驅動的時候,我們在說什麼
martin fowler是物件導向分析設計 重構等領域的頂級專家,也是敏捷開發的創始人之一,也是企業應用架構方面的頂級專家。事件通知 這一模式就是乙個系統傳送一些事件訊息到另一些系統,以通知他們說我這個系統裡面的領域物件發生了改變。這個通知的乙個關鍵點是,我的源系統並不關心對方系統收到這些通知以後...
當我們在說事件驅動的時候,我們在說什麼
翻譯自martin fowler2017年初的文章what do you mean by event driven 雖然這篇文章網上已經有一些翻譯,但是基本都是直譯,甚至有的翻譯比較晦澀。再加上最近工作中遇到不少事件驅動架構設計的問題,所以把這個再翻一下,並不是直譯,主要是加上一些自己的理解。mar...