天天看點

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

本文主要闡述軟體性能測試中的一些調優思想和技術,節選自作者新書《軟體性能測試分析與調優實踐之路》部分章節歸納。

1、性能分析調優模型

性能測試除了為擷取性能名額外,更多是為了發現性能瓶頸和性能問題,然後對性能問題和瓶頸進行分析和調優,在當今網際網路高速發展的時代,性能調優的模型可以歸納總結如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

系統模型中相關的元件描述如下表所示

元件

描述

網絡分發

網絡分發是高速發展的網際網路時代常用的降低網絡擁塞,快速響應使用者請求的一種技術手段,最常用的網絡分發就是CDN(Content Delivery Network,即内容分發網絡),依靠部署在世界各地的邊緣伺服器,通過中心平台的負載均衡、源伺服器内容分發、排程等功能子產品,使世界各地使用者就近擷取所需内容,而不用每次都到中心平台的源伺服器擷取響應結果,比如南京的使用者直接通路部署在南京的邊緣伺服器,而不需要通路部署在遙遠的北方的北京的伺服器

Web伺服器

Web伺服器用于部署Web服務,Web伺服器的作用就是負責請求的響應和分發以及靜态資源的處理

Web服務

Web服務指運作在Web伺服器上的服務程式,最常見的Web服務就是Nginx和Apache

Web Cache

Web Cache指Web層的緩存,一般都是臨時緩存HTML、CSS、圖像等靜态資源檔案

應用伺服器

應用伺服器用于部署應用程式,如Tomcat、WildFly、普通的Java應用程式(如jar包服務),IIS等

應用程式服務

應用程式服務指運作在應用伺服器上的程式,比如Java應用,C/C++應用、Python應用,一般用于處理使用者的動态請求

應用緩存

應用緩存指應用程式層的緩存服務,常用的應用緩存技術有Redis、Memcached等,這些技術手段也是動态擴充的高并發分布式應用架構中經常使用的技術手段

資料庫(DB)

用于資料的存儲,可以包括關系型資料庫以及NoSql資料庫(非關系型資料庫),常見的關系型資料庫有Mysql、Oracle、Sqlserver、DB2等,常見的NoSql資料庫有Hbase、MongoDB、ElasticSearch等

外部系統

指目前系統依賴于其他的外部系統,需要從其他的外部系統中通過二次請求擷取資料,外部系統有時候可能會存在很多個

上圖中的系統模型是一個網際網路中常見的使用者請求的分層轉發和處理的過程,在性能調優時就是不斷采集系統中的性能名額以及系統模型中各層的資源消耗,從中發現性能瓶頸和性能問題,然後對瓶頸和問題進行分析診斷來确定性能調優方案,最後通過性能壓測進行驗證調優方案是否有效,如果無效繼續重複這個過程進行性能分析,直到調優方案有效,瓶頸和問題得到解決。這個過程一般是非常漫長,因為很多時候性能調優方案往往不是一次就能有效或者一次就能解決所有的瓶頸和問題,或者解決了目前的瓶頸和問題,但是繼續性能壓測又可能會出現新的瓶頸和問題。

轉載請注明出處:來源于部落格園,作者:張永清,https://www.cnblogs.com/laoqing/p/13660768.html

2、性能分析與調優思想

2.1、分層分析

分層分析指的就是按照系統模型以及系統架構分層按照調用鍊進行監控分析和問題排查,如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

         分層排查一般需要對系統的應用架構層次以及部署架構非常的熟悉,需要熟悉請求的處理鍊過程。

         分層排查一般需要對每一層建立checklist,然後按照每層的checklist逐一進行分析。

         分層排排查效率較低,但是往往能發現更多的性能問題。

         分層排查可以自上而下也可以自下而上。

2.2、科學論證

科學論證一般包括發現問題、問題假設、預測、試驗論證、分析這5個步驟,如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

         發現問題:指通過性能采集和監控,發現了性能瓶頸或者性能問題,比如并發使用者數增大後TPS并不增加、每台應用伺服器的CPU消耗相差特别大等。

         問題假設:指根據自己的經驗判斷,假設是某個因素導緻了出現瓶頸和問題。

         預測:指根據問題假設,預測可能出現的一些現象或者特征。

         試驗論證:根據預測,去檢查預期可能出現的現象或者特征

         分析:根據擷取到的實際現象或者特征進行分析,判斷假設是否正确,如果不正确,就重新按照這個流程進行分析論證。

科學論證法進行性能分析與調優的示例如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

2.3、問題追溯與歸納總結

(1)、問題追溯分析指的是根據問題去追溯最近系統或者環境發生的變化,一般适用于生産已上線系統的版本釋出或者環境變動導緻的性能問題,問題追溯的步驟一般如下圖所示,問題追溯分析是通過在追溯和描述中去逐漸排查可能導緻問題的原因。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

(2)、歸納總結指的根據經驗的總結,在出現某種性能瓶頸或者性能問題時根據以往總結的原因進行逐一排查。

1、緩存調優

網際網路高速發展的這個時代,緩存使用已經成為了很多大型系統或者電商網站使用的一個關鍵技術,合理的設計緩存直接關系到了一個系統或者網站的并發通路能力和使用者體驗。網站按照存放地點的不同可以分為使用者端緩存和服務端緩存,如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

緩存調優的關鍵點說明如下:

         如何讓緩存的命中率更高?

         如何注意防止緩存穿透?

         如何控制好緩存的失效時間?

         如何做好緩存的監控分析?比如slow log分析、連接配接數監控、記憶體使用監控。

         如何防止緩存雪崩?緩存雪崩指的是伺服器在出現斷電等極端異常情況後,緩存中的資料全部丢失,導緻大量的請求全部需要從資料庫中直接擷取資料進而資料庫壓力過大造成資料庫崩潰,防止緩存雪崩需要注意:

(1)       要處理好緩存資料全部丢失後,如何能快速把資料重新加載到緩存中。

(2)       緩存資料的分布式備援備份,當出現資料丢失時,可以迅速切換使用備份資料。

2、同步轉異步推送

 同步:指的是系統收到一個請求後,在該請求沒有處理完成時,就一直不傳回響應結果,直到處理完成了才傳回響應結果,如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

異步:與同步相比,異步指的是系統收到一個請求後,隻立即傳回請求調用方請求接收成功,在請求處理完成後,再異步推送處理結果給調用方,或者請求調用方在間隔一定時間再重新來擷取請求結果。如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

 轉載請注明出處:來源于部落格園,作者:張永清,https://www.cnblogs.com/laoqing/p/13660768.html

同步轉異步主要是解決同步請求時的阻塞等待,一直處于阻塞等待的請求,往往會造成連接配接不能快速釋放,進而導緻高并發處理時,連接配接數不夠用,通過隊列異步接收請求後,請求處理方再進行分布式的并行處理,進而達到處理能力擴充,并且網絡連接配接也可以快速釋放。

3、拆分

拆分指的是将系統中的複雜的業務調用拆分為多個簡單的調用,如下圖所示,一般遵循的原則如下:

         對于高并發的業務請求調用都單獨拆分為單個的子系統應用。

         對于并發通路量接近的業務,可以按照産品業務進行拆分,相同的産品業務都歸類到一個新的子系統中。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

系統拆分帶來的好處就是高并發的業務不會對低并發業務的性能造成影響,而且系統在硬體擴充時,也可以有針對性的進行擴充,避免資源的浪費。

4、任務分解與并行計算

任務分解與并行計算指的是将一個任務拆分為多個子任務,然後将多個子任務并行進行計算處理,最後隻需要再将并行計算的結果合并在一起傳回即可。目的是通過并行計算的方式來增加處理性能,如圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

另外對于包含多個處理步驟的串行任務,也可以盡量按照如下圖所示的方式轉換為并行計算處理。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

 5、索引與分庫分表

索引指應用程式在查詢時,盡量走資料庫索引查詢,資料庫表在建立時也盡量對查詢條件的字段建立合适的索引,這裡強調一定是合适的索引,如果索引建立不合适,不僅對查詢效率沒有任何的幫助,反而會使資料庫表在插入資料時變的更慢,因為一旦建立了索引後,資料在插入時,索引也會自動更新,這樣就加大資料庫的插入時的資源消耗。比如資料庫表中有一個字段為“status”,而“status”的取值隻有0、1、2 三個值,這時候如果對“status”建立索引,對查詢效率就沒有任何幫助,因為“status”字段的值隻有1、2、3這三個值,建立索引後根據“status”去檢索時,需要掃描的資料還是非常的大,因為“status”字段的取值範圍太少,過濾出來的資料量還是非常的龐大。

正确的使用索引可以很好的提高查詢效率,但是如果一個表的資料量非常的龐大,比如達到了億萬級别了,此時索引查詢很慢了,并且新資料插入時也很慢,此時就需要對資料進行分表或者分庫了,分庫一般指的是一個資料庫的存儲已經很大了,查詢和插入時I/O消耗非常大,此時就需要将資料庫拆分成2個庫來減輕讀寫時I/O的壓力,如下圖所示。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

常見的分庫分表方式如下:

         按照冷熱資料分離的方式:一般将使用頻率非常高的資料稱之為熱資料,查詢頻率較低或者幾乎不被查詢的資料稱之為冷資料,冷熱資料分離後,熱資料單獨存儲,這樣資料量就會下降下來了,查詢的性能自然也就提升了,而且還可以更友善的單獨針對熱資料做I/O的性能調優了。

         按照時間次元的方式:比如可以按照實時資料和曆史資料分庫分表,也可以按照年份、月份等事件區間進行分庫分表,目的是盡可能的減少庫表中的資料量。

         按照一定的算法計算的方式:此種方式一般适用于資料都是熱資料的情況,比如資料無法做冷熱分離,所有的資料都經常被查詢,而且資料量又非常的大。此時就可以根據資料中的某個字段做算法計算(注意的是這個字段一般是資料查詢時的檢索條件字段),使得資料能均勻的落到不同的分表中去,查詢時再根據查詢條件字段做算法計算就可以快速的定位到是需要到哪個表中去進行查詢。

資料分庫分表後,帶來的另一個好處就是,如果單次查詢時,需要查詢多個分表,那麼此時就可以通過多線程并行的方式去查詢每個分表,最後對每個分表的查詢結果做一次合并即可,這樣也可以使得查詢的效率更高。

關于軟體性能分析調優,可以加微信号yq597365581或者微信号hqh345932,進入專業的性能分析調優群進行交流溝通。

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

備注:作者的原創文章,轉載須注明出處。原創文章歸作者所有,歡迎轉載,但是保留版權。對于轉載了部落客的原創文章,不标注出處的,作者将依法追究版權,請尊重作者的成果。

本文作者:張永清  文章選自 作者2020年初即将出版的《軟體性能測試、分析與調優實踐之路》一書。文章連結:https://www.cnblogs.com/laoqing/p/13660768.html

軟體性能測試分析與調優實踐之路-性能分析調優思想與調優技術總結

個人介紹:從事功能測試、自動化測試、性能測試、Java軟體開發、大資料開發、架構師等工作十多年,在自動化測試設計、性能測試設計、性能診斷、性能調優、分布式架構設計等方面積累了多年經驗,參與過的系統涉及公安、網際網路、移動網際網路、大資料、人工智能等領域。先後任職于江蘇飛搏軟體、蘇甯大資料研發中心、蘇甯研究院、蘇甯人工智能研發中心、紫金普惠研發中心等公司,曆任測試經理、技術經理、部門經理、進階架構師等職位,重點關注大資料、圖像處理、高性能分布式架構設計等領域,著有《robot framework 自動化測試架構核心指南》、《軟體性能測試、分析與調優實踐之路》,apache dolphinscheduler 貢獻者。

作者的原創文章,轉載須注明出處。原創文章歸作者所有,歡迎轉載,但是保留版權。對于轉載了部落客的原創文章,不标注出處的,作者将依法追究版權,請尊重作者的成果。