當(dāng)一個(gè)應(yīng)用系統(tǒng)需求被提出,就需要確定性能需求,即:需要給多少人同時(shí)來使用,就是多少人可以同時(shí)在線;平均響應(yīng)時(shí)間有多長;每秒通過的交易(transaction)個(gè)數(shù)有多少;需要的網(wǎng)絡(luò)帶寬有多大等等。
系統(tǒng)設(shè)計(jì),就需要遵循性能需求,進(jìn)行性能架構(gòu)設(shè)計(jì)。比如,是否使用集群、雙機(jī)熱備、N+1等模式。當(dāng)然,隨著兩地三中心的模式,也需要充分考慮到性能需求和性能架構(gòu)設(shè)計(jì)的要求。
決定性能的要素,包括了:性能需求、性能架構(gòu)與設(shè)計(jì)、代碼實(shí)現(xiàn)幾個(gè)部分。
性能架構(gòu),很多系統(tǒng)都是分成不同的層,以及不同的業(yè)務(wù)組件來實(shí)現(xiàn)具體的應(yīng)用,一般而言包括了交易處理層、業(yè)務(wù)組件層、數(shù)據(jù)庫服務(wù)層三個(gè)大的部分。當(dāng)系統(tǒng)的性能出現(xiàn)問題,我們就需要知道,
上圖是一個(gè)比較簡單的架構(gòu)。當(dāng)系統(tǒng)的性能達(dá)不到要求,我們就要分析問題出在哪一層上。分析在哪一層,最簡單的方法,就是分析業(yè)務(wù)流量路徑圖:
根據(jù)業(yè)務(wù)流量的路徑,對(duì)每個(gè)層進(jìn)行性能數(shù)據(jù)監(jiān)控,得到每個(gè)模塊被調(diào)用的次數(shù),以及響應(yīng)時(shí)間的數(shù)據(jù),從而分析獲得性能瓶頸。
隨著業(yè)務(wù)的復(fù)雜度提升,系統(tǒng)架構(gòu)也日益復(fù)雜,出現(xiàn)了微服務(wù)或者很多跨系統(tǒng)的業(yè)務(wù)場(chǎng)景:
如上圖,就需要對(duì)外系統(tǒng)或者調(diào)用外系統(tǒng)的接口服務(wù)進(jìn)行監(jiān)控,獲得監(jiān)控?cái)?shù)據(jù)。
獲得監(jiān)控?cái)?shù)據(jù)之后,就需要對(duì)可疑的數(shù)據(jù)進(jìn)行分析。什么是可疑的數(shù)據(jù)?就是按照正常的情況,不應(yīng)該出現(xiàn)的性能曲線,比如數(shù)據(jù)庫sql語句執(zhí)行突然緩慢(隨著數(shù)據(jù)量的增加),交易響應(yīng)時(shí)間突然變長,但是cpu卻沒有大幅度增加等等。
如上圖,是TPS隨時(shí)間變化的趨勢(shì)圖。隨著時(shí)間的變化,客戶端發(fā)起的壓力逐步上升,當(dāng)上升到一等幅度之后,突然開始震動(dòng)和下降,出現(xiàn)了性能瓶頸。
最后,我們來說一下加壓。加壓就是模仿客戶端,生成持續(xù)的交易請(qǐng)求,向系統(tǒng)加壓。
如上圖,我們采用PerformanceRunne性能測(cè)試工具r的架構(gòu)圖,來展示如何產(chǎn)生壓力:
PR的節(jié)點(diǎn)管理器,負(fù)責(zé)管理多個(gè)虛擬機(jī)或者實(shí)體機(jī),在實(shí)體機(jī)上會(huì)通過多進(jìn)程和多線程來模擬用戶請(qǐng)求。
模擬用戶請(qǐng)求的方式是采用測(cè)試腳本來模擬發(fā)起報(bào)文和接收響應(yīng)報(bào)文:
簡單的協(xié)議,比如http、https、socket等,可以通過錄制來獲得測(cè)試腳本,對(duì)于復(fù)雜的協(xié)議或者通訊中間件,比如MQ、tuxedo、cics等,就無法通過錄制來獲得,就需要手工編寫測(cè)試腳本。
腳本編寫完成,我們需要對(duì)腳本進(jìn)行參數(shù)化,以實(shí)現(xiàn)加壓的時(shí)候,產(chǎn)生壓力的數(shù)據(jù)是不同的,從而模擬更真實(shí)的應(yīng)用場(chǎng)景:
針對(duì)具體的統(tǒng)計(jì)口徑和業(yè)務(wù)相關(guān)性,例如:當(dāng)我們通過瀏覽器頁面登錄到一個(gè)系統(tǒng),一般而言,登錄是一個(gè)服務(wù),登錄完成之后,會(huì)請(qǐng)求用戶桌面上的各個(gè)數(shù)據(jù),或者儀表盤信息,是另外的請(qǐng)求。在產(chǎn)生壓力和統(tǒng)計(jì)的時(shí)候,我們需要把這兩個(gè)或者多個(gè),組合在一起,變成一個(gè)交易(transaction),tps的數(shù)據(jù)也是統(tǒng)計(jì)交易的數(shù)據(jù),這樣避免了編寫的測(cè)試腳本和真實(shí)的壓力效果不同,如下圖:
性能測(cè)試腳本創(chuàng)建完成,我們就可以根據(jù)具體的業(yè)務(wù)場(chǎng)景來加壓了。一個(gè)業(yè)務(wù)場(chǎng)景,可以對(duì)應(yīng)一個(gè)或者多個(gè)測(cè)試腳本。
壓力產(chǎn)生策略。我們可以選擇逐步梯度增加并發(fā)個(gè)數(shù)(VU虛擬用戶),來逐步產(chǎn)生壓力,發(fā)現(xiàn)加壓到某個(gè)壓力的時(shí)候,會(huì)出現(xiàn)性能瓶頸。
性能測(cè)試工具,對(duì)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,產(chǎn)生性能監(jiān)控?cái)?shù)據(jù):
推薦閱讀:
本文內(nèi)容不用于商業(yè)目的,如涉及知識(shí)產(chǎn)權(quán)問題,請(qǐng)權(quán)利人聯(lián)系SPASVO小編(021-60725088-8054),我們將立即處理,馬上刪除。