筆記(茹炳晟老師 第28課 帶你一起解讀不同視角的軟件性能與性能指標 )
談及軟件性能,談的到底是什麼?--從對象羣體分類
web類應用和手機端應用:一般以終端用戶感受到的端到端的響應時間來描述系統的性能。
非交互式應用(比如典型的電信和銀行後臺處理系統):響應時間關注更多的是事件處理的速度,以及單位時間的事件吞吐量
衡量軟件性能的四個維度
不同的對象羣體分爲四大類:終端用戶、系統運維人員、軟件設計開發人員、性能測試人員
終端用戶:軟件系統的最終使用者(直接決定系統的應用前景)
其他三類人員:直接決定一個系統交付到用戶手中的性能
終端用戶(軟件系統使用者):
軟件性能表現爲用戶進行業務操作時的主觀響應時間。
響應時間是終端用戶對系統性能的最直觀印象,包括系統響應時間和前端展示時間
系統響應時間:反應的是系統能力。進一步細分:應用系統處理時間、數據庫處理時間、網絡傳輸時間等
前端展示時間:取決於用戶端的處理能力
系統運維人員:
單個用戶的響應時間
【主要關注點】大量用戶併發訪問的負載及高負載情況下的系統健康狀態、併發處理能力、當前部署的系統容量、可能的系統瓶頸、系統配置層面的調優、數據庫的調優、長時間運行穩定性和可擴展性
系統運維人員必須在最大併發用戶數和系統響應時間之間權衡取捨。
從全局利益最大化角度,系統具有更大併發用戶承載能力的價值更大。
目前,有些系統爲了能夠承載更多的併發用戶,會犧牲等待時間而引入預期的等待機制(如:火車票購票網站)
軟件設計人員:
關注點:性能相關的設計和實現細節
軟件性能包括5大方面:算法設計、架構設計、性能最佳實踐、數據庫相關、軟件性能的可測試性
算法設計:
核心算法的設計與實現是否高效;
必要時,設計上是否採用buffer機制以提高性能,降低I/O;
是否存在潛在的內存泄漏;
是否存在併發環境下的線程安全問題;
是否存在不合理的線程同步方式;
是否存在不合理的資源競爭;
架構設計:
站在整體系統的角度,是否可以方便地進行系統容量和性能擴展;
應用集羣的可擴展性是否經過測試和驗證;
緩存集羣的可擴展性是否經過測試和驗證;
數據庫的可擴展性是否經過測試和驗證。
......
系統部署級別的性能測試不在軟件開發人員考慮範圍內
性能測試人員:
關注點:算法設計、架構設計、性能最佳實踐、數據庫相關、軟件性能的可測試性
需要具備的技能:
- 性能需求的總結和抽象能力
- 根據性能測試目標,精準的性能測試場景設計和計算能力
- 性能測試場景和性能測試腳本的開發和執行能力
- 測試性能報告的分析解讀能力
- 性能瓶頸的快速排查和定位能力
- 性能測試數據的設計和實現能力
- 互聯網產品全鏈路壓測的設計與執行能力,能夠和系統架構師一起處理流量標記、影子數據庫等的技術設計能力
- 深入瞭解性能測試工具的內容實現原因,可以對性能測試工具進行擴展二次開發
- 極寬的知識面。面:系統架構、存儲架構、網絡架構等全局知識;點:數據庫SQL語句的執行計劃調優、JVM垃圾回收(GC)機制、多線程常見問題等