摘 要:Web系統(tǒng)已是當(dāng)今信息系統(tǒng)開(kāi)發(fā)和部署的主流選擇。在大數(shù)據(jù)時(shí)代,性能更是衡量信息系統(tǒng)可靠性的重要指標(biāo)。文章在對(duì)Web系統(tǒng)壓力測(cè)試方法進(jìn)行研究的基礎(chǔ)上,指出高效壓力測(cè)試的關(guān)鍵在于測(cè)試方案應(yīng)盡可能接近真實(shí)應(yīng)用負(fù)載,給出的項(xiàng)目實(shí)踐經(jīng)驗(yàn)很好地驗(yàn)證了這一觀(guān)點(diǎn)。
關(guān)鍵詞:Web系統(tǒng);性能;壓力測(cè)試
1 概述
近年來(lái),隨著信息化技術(shù)的不斷發(fā)展,Web系統(tǒng)(瀏覽器/服務(wù)器,C/S架構(gòu))已經(jīng)成為了信息系統(tǒng)開(kāi)發(fā)和部署的主流選擇。相對(duì)于傳統(tǒng)的客戶(hù)端/服務(wù)器(B/S架構(gòu))信息系統(tǒng),Web系統(tǒng)具有開(kāi)發(fā)便捷、部署快速和易于維護(hù)的特點(diǎn)。同時(shí),因其易于和其他系統(tǒng)及接口協(xié)同工作,具備了同時(shí)向上向下兼容的特性。如今高速發(fā)展的移動(dòng)互聯(lián)網(wǎng),大多數(shù)移動(dòng)客戶(hù)端軟件后臺(tái)連接的都是Web應(yīng)用系統(tǒng)。
對(duì)于任何一個(gè)商用信息系統(tǒng),可靠性要求都是必須考慮的重要問(wèn)題。對(duì)可靠性而言,除了基本的功能性保證,在大數(shù)據(jù)時(shí)代,系統(tǒng)的性能更是不能回避的問(wèn)題。龐大的用戶(hù)群以及海量數(shù)據(jù)給Web應(yīng)用系統(tǒng)的性能帶來(lái)了諸多挑戰(zhàn)。
2 Web系統(tǒng)壓力測(cè)試方法研究
2.1 影響Web系統(tǒng)性能的主要因素
作為依托網(wǎng)絡(luò)部署的系統(tǒng),除去網(wǎng)絡(luò)這一相對(duì)外部的因素后,影響Web系統(tǒng)性能的自身內(nèi)在因素主要有以下幾方面:
用戶(hù)并發(fā)數(shù)。并發(fā)數(shù)是建立在用戶(hù)量基礎(chǔ)上的、反應(yīng)系統(tǒng)繁忙程度的重要指標(biāo)。每一個(gè)在線(xiàn)用戶(hù)都會(huì)產(chǎn)生到后臺(tái)服務(wù)器的會(huì)話(huà)連接,對(duì)系統(tǒng)CPU、內(nèi)存、I/O等資源產(chǎn)生開(kāi)銷(xiāo)。在線(xiàn)用戶(hù)大量累積后一般都會(huì)引起系統(tǒng)性能的下降。
后臺(tái)數(shù)據(jù)量。每一次前臺(tái)頁(yè)面訪(fǎng)問(wèn)對(duì)應(yīng)都是后臺(tái)數(shù)據(jù)庫(kù)增、刪、改、查操作,其執(zhí)行返回時(shí)間與系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)的基礎(chǔ)數(shù)據(jù)量直接相關(guān)。
用戶(hù)行為。業(yè)務(wù)邏輯復(fù)雜程度及在線(xiàn)用戶(hù)的行為特點(diǎn)也直接影響著性能。同樣數(shù)量的在線(xiàn)用戶(hù),大面積地進(jìn)行復(fù)雜綜合報(bào)表查詢(xún),與僅僅進(jìn)行靜態(tài)頁(yè)面瀏覽相比,對(duì)系統(tǒng)性能影響的差異是不言而喻的。
2.2 衡量Web系統(tǒng)性能的重要指標(biāo)
一方面是系統(tǒng)的響應(yīng)時(shí)間。完整的系統(tǒng)響應(yīng)時(shí)間應(yīng)該從用戶(hù)發(fā)起前臺(tái)頁(yè)面請(qǐng)求算起,涵蓋經(jīng)過(guò)網(wǎng)絡(luò)傳輸、后臺(tái)服務(wù)器響應(yīng)請(qǐng)求并返回結(jié)果,最終在用戶(hù)瀏覽器端完成頁(yè)面渲染、加載等環(huán)節(jié)全過(guò)程。響應(yīng)時(shí)間是用戶(hù)可感知的,是系統(tǒng)性能的直觀(guān)體驗(yàn)。
另一方面是系統(tǒng)的吞吐率。吞吐率是系統(tǒng)在單位時(shí)間內(nèi)能夠處理的請(qǐng)求數(shù),影響系統(tǒng)吞吐率最直接的因素是系統(tǒng)資源總量和完成單次請(qǐng)求所需的系統(tǒng)資源。在實(shí)踐中,一般指系統(tǒng)在單位時(shí)間內(nèi)能夠成功完成的交易或事務(wù)數(shù)量。
2.3 Web系統(tǒng)主流壓力測(cè)試工具
進(jìn)行Web系統(tǒng)壓力測(cè)試,需要高效的工具支持。在商業(yè)軟件方面,比較著名的產(chǎn)品有Loadrunner(原為Mercury產(chǎn)品,現(xiàn)已被惠普公司收購(gòu))、SilkPerformer(Borland公司產(chǎn)品)等;開(kāi)源軟件方面,比較著名的有JMeter、Grinder,以及WebLOAD等。這些產(chǎn)品基本工作方式都是通過(guò)“錄制-回放”模式來(lái)編寫(xiě)壓力測(cè)試腳本。
Web系統(tǒng)壓力測(cè)試是項(xiàng)目實(shí)踐工作中最關(guān)鍵的環(huán)節(jié),是設(shè)計(jì)壓力測(cè)試場(chǎng)景。好的場(chǎng)景設(shè)計(jì)應(yīng)盡可能接近真實(shí)應(yīng)用負(fù)載,才能充分暴露系統(tǒng)性能瓶頸點(diǎn),提高測(cè)試效率。要做到這一點(diǎn),項(xiàng)目實(shí)施人員需充分認(rèn)識(shí)影響Web系統(tǒng)性能的主要因素,依據(jù)業(yè)務(wù)邏輯設(shè)定實(shí)際、合理的測(cè)試參數(shù)。結(jié)合高效的測(cè)試工具,在測(cè)試中密切關(guān)注衡量Web系統(tǒng)性能的重要指標(biāo),不斷修正測(cè)試場(chǎng)景,實(shí)踐一個(gè)與系統(tǒng)真實(shí)應(yīng)用負(fù)載逐漸擬合的過(guò)程。
3 項(xiàng)目實(shí)踐案例
作者作為項(xiàng)目負(fù)責(zé)人,于前期完成了一次Web應(yīng)用系統(tǒng)建設(shè)工作。該項(xiàng)目為全市各商業(yè)銀行基層網(wǎng)點(diǎn)提供某人民幣對(duì)公業(yè)務(wù)網(wǎng)上辦理服務(wù)。系統(tǒng)使用標(biāo)準(zhǔn)J2EE三層架構(gòu)設(shè)計(jì),為減輕商業(yè)銀行負(fù)擔(dān),采取純B/S架構(gòu),不在各商業(yè)銀行架設(shè)前置機(jī)服務(wù)器,全市2000余家基層網(wǎng)點(diǎn)均采取直連方式(一點(diǎn)接入)訪(fǎng)問(wèn)中心服務(wù)器。在上線(xiàn)前測(cè)試階段,為解決系統(tǒng)出現(xiàn)的性能問(wèn)題,作者帶領(lǐng)項(xiàng)目開(kāi)發(fā)人員組織了多輪壓力測(cè)試。壓力測(cè)試工作依據(jù)如下步驟開(kāi)展:
第一步,排除系統(tǒng)外圍因素。網(wǎng)絡(luò)因素是Web系統(tǒng)自身之外的性能影響因素,但是當(dāng)出現(xiàn)性能問(wèn)題時(shí),必須對(duì)其影響程度做到心中有數(shù)。在不對(duì)應(yīng)用系統(tǒng)做任何調(diào)整的情況下,單純加大并發(fā)壓力便有了收獲,在此環(huán)節(jié)找到了一個(gè)服務(wù)器區(qū)接入層交換機(jī)品牌型號(hào)兼容性導(dǎo)致的性能問(wèn)題。
第二步,合理設(shè)計(jì)測(cè)試場(chǎng)景,利用壓力測(cè)試定位系統(tǒng)性能瓶頸。經(jīng)與業(yè)務(wù)需求部門(mén)充分交流,作者很快就掌握了該系統(tǒng)的業(yè)務(wù)訪(fǎng)問(wèn)特點(diǎn):在每日下午特定訪(fǎng)問(wèn)時(shí)段,用戶(hù)的高頻訪(fǎng)問(wèn)全部集中在幾個(gè)關(guān)鍵頁(yè)面上。當(dāng)此“尖峰時(shí)刻”到來(lái)時(shí),大部分在線(xiàn)用戶(hù)的行為是在對(duì)當(dāng)日的交易結(jié)果進(jìn)行確認(rèn),同時(shí)還有相當(dāng)一部分用戶(hù)在利用系統(tǒng)日切前的最后機(jī)會(huì)對(duì)交易數(shù)據(jù)進(jìn)行補(bǔ)錄。系統(tǒng)響應(yīng)時(shí)間隨著用戶(hù)并發(fā)量和“尖峰時(shí)刻”的臨近逐漸增大,性能拐點(diǎn)明顯。在性能下降到一定程度后,新用戶(hù)甚至已經(jīng)無(wú)法登陸系統(tǒng),在線(xiàn)用戶(hù)交易請(qǐng)求開(kāi)始出現(xiàn)大量失敗。
根據(jù)“場(chǎng)景設(shè)計(jì)應(yīng)盡可能接近真實(shí)應(yīng)用負(fù)載”的原則,作者在此項(xiàng)目壓力測(cè)試方案設(shè)計(jì)中重點(diǎn)考量了用戶(hù)行為、數(shù)據(jù)量鋪墊以及并發(fā)數(shù)等幾個(gè)因素。業(yè)務(wù)部門(mén)提供的需求數(shù)據(jù),是數(shù)據(jù)量鋪墊和并發(fā)數(shù)估算的原始基礎(chǔ);為達(dá)到盡可能接近真實(shí)的目標(biāo),作者對(duì)前期全市聯(lián)調(diào)階段系統(tǒng)后臺(tái)記錄的日志展開(kāi)深入分析,統(tǒng)計(jì)出系統(tǒng)高峰訪(fǎng)問(wèn)時(shí)段用戶(hù)增、刪、改、查等具體行為的分布比例,并根據(jù)商業(yè)銀行接入數(shù)量、線(xiàn)路帶寬等因素進(jìn)行相應(yīng)調(diào)整,修正場(chǎng)景設(shè)計(jì)中用戶(hù)行為的權(quán)重。之后利用企業(yè)級(jí)Loadrunner測(cè)試工具,反復(fù)錄制調(diào)試測(cè)試腳本。同時(shí)采取對(duì)應(yīng)用服務(wù)器與數(shù)據(jù)庫(kù)服務(wù)器分離部署的方法,在壓力測(cè)試中分別監(jiān)測(cè)操作系統(tǒng)、數(shù)據(jù)庫(kù)、應(yīng)用各部分對(duì)應(yīng)性能指標(biāo)。
通過(guò)幾輪壓力測(cè)試,項(xiàng)目組很快就定位到了影響系統(tǒng)性能的關(guān)鍵問(wèn)題,并提交開(kāi)發(fā)人員進(jìn)行對(duì)應(yīng)處置。在應(yīng)用層面,局部針對(duì)性修改代碼,對(duì)高頻訪(fǎng)問(wèn)頁(yè)面涉及到的數(shù)據(jù)庫(kù)基礎(chǔ)表做全局內(nèi)存靜態(tài)化處理,優(yōu)化高耗能SQL語(yǔ)句;數(shù)據(jù)庫(kù)層面,對(duì)涉及復(fù)雜查詢(xún)的業(yè)務(wù)表進(jìn)行分表處理,實(shí)現(xiàn)當(dāng)前熱數(shù)據(jù)與歷史冷數(shù)據(jù)的合理隔離;在系統(tǒng)整體集成層面,對(duì)操作系統(tǒng)、數(shù)據(jù)庫(kù)及應(yīng)用中間件分別進(jìn)行參數(shù)調(diào)優(yōu)。
通過(guò)上述努力,經(jīng)壓力測(cè)試優(yōu)化后的系統(tǒng)再次提交測(cè)試,整體性能有了顯著提升,“尖峰時(shí)刻”的性能拐點(diǎn)已經(jīng)完全消失,無(wú)論從系統(tǒng)的響應(yīng)時(shí)間還是吞吐率指標(biāo)看,均達(dá)到了預(yù)期建設(shè)目標(biāo),并且完全能夠支撐未來(lái)五年業(yè)務(wù)發(fā)展的性能預(yù)留空間。目前系統(tǒng)已投產(chǎn)上線(xiàn),運(yùn)行平穩(wěn),為全市金融服務(wù)水平提升起到了重要推動(dòng)作用。
4 結(jié)束語(yǔ)
性能是信息系統(tǒng)建設(shè)和運(yùn)維中永恒的話(huà)題。做好Web系統(tǒng)壓力測(cè)試,第一要?jiǎng)?wù)是在排除外部干擾因素,充分了解業(yè)務(wù)邏輯的基礎(chǔ)上,設(shè)計(jì)出盡可能接近真實(shí)應(yīng)用負(fù)載的測(cè)試場(chǎng)景。
要達(dá)成這一目標(biāo),最重要的是對(duì)用戶(hù)并發(fā)數(shù)、鋪墊數(shù)據(jù)量以及用戶(hù)行為的把握,并借助有效的工具軟件進(jìn)行迭代驗(yàn)證。實(shí)踐經(jīng)驗(yàn)證明,高質(zhì)量的壓力測(cè)試是系統(tǒng)項(xiàng)目建設(shè)中進(jìn)度與質(zhì)量的重要保證。