大型票務(wù)系統(tǒng)性能測(cè)試淺析
其中,優(yōu)化項(xiàng)所有內(nèi)容必須滿(mǎn)足,附加項(xiàng)可以不滿(mǎn)足,在評(píng)測(cè)結(jié)果中Y代表滿(mǎn)足、N代表不滿(mǎn)足、Null代表無(wú)優(yōu)化項(xiàng)相關(guān)技術(shù)。評(píng)測(cè)結(jié)果共分為A、B、C、D、E和U六個(gè)級(jí)別。具體對(duì)應(yīng)關(guān)系如下表所示:
表2 評(píng)級(jí)標(biāo)準(zhǔn)

4.2 后端性能測(cè)試方法
測(cè)試主要采用商業(yè)級(jí)別的性能測(cè)試工具進(jìn)行測(cè)試,如HP Loadrunner。通過(guò)大規(guī)模模擬實(shí)際用戶(hù)的操作行為,測(cè)試核心售票系統(tǒng)中注冊(cè)、瀏覽、座位選擇、支付等關(guān)鍵業(yè)務(wù)的響應(yīng)時(shí)間和服務(wù)器實(shí)時(shí)處理能力,重點(diǎn)關(guān)注CPU、內(nèi)存、I/O等信息,為操作系統(tǒng)、中間件和數(shù)據(jù)庫(kù)以及服務(wù)器的性能優(yōu)化和調(diào)整提供數(shù)據(jù)依據(jù)。
通常情況下,數(shù)據(jù)中心中用于支撐售票業(yè)務(wù)的服務(wù)器多達(dá)幾百臺(tái),通過(guò)軟件在測(cè)試中進(jìn)行監(jiān)控更容易實(shí)現(xiàn),如UC Berkeley的開(kāi)源集群監(jiān)視軟件Ganglia。Ganglia的核心包含gmond、gmetad以及一個(gè)Web前端,通過(guò)自動(dòng)解析linux操作系統(tǒng)proc目錄下的文件來(lái)獲取操作系統(tǒng)的主要性能指標(biāo)。Ganglia帶來(lái)的系統(tǒng)負(fù)載非常少,幾乎不會(huì)影響被監(jiān)控系統(tǒng)性能。對(duì)于中間件和數(shù)據(jù)庫(kù)等基礎(chǔ)軟件,可采用其自帶的監(jiān)視器或命令來(lái)獲取性能指標(biāo)。
在測(cè)試場(chǎng)景設(shè)計(jì)中,應(yīng)考慮準(zhǔn)確模擬混合業(yè)務(wù)的并發(fā)操作,以及過(guò)載訪問(wèn)的情況,可借鑒下表中的思路進(jìn)行測(cè)試:
表3后端性能測(cè)試場(chǎng)景

通過(guò)測(cè)試考察運(yùn)行環(huán)境的抗壓能力,在成本和風(fēng)險(xiǎn)可接受范圍內(nèi)對(duì)整個(gè)運(yùn)行環(huán)境進(jìn)行合理優(yōu)化,提高核心售票系統(tǒng)的處理能力。總的來(lái)說(shuō),高效的核心售票系統(tǒng)在上線前達(dá)到以下要求:
A、核心業(yè)務(wù)模塊中無(wú)明顯效率低下的模塊
B、多個(gè)數(shù)據(jù)中心間實(shí)現(xiàn)了良好的負(fù)載均衡,整個(gè)運(yùn)行環(huán)境中不存在明顯的服務(wù)器資源消耗過(guò)度的情況
C、整個(gè)運(yùn)行環(huán)境的網(wǎng)絡(luò)承受負(fù)載的能力良好,各銀行支付網(wǎng)點(diǎn)進(jìn)行了合理的組網(wǎng)規(guī)劃,網(wǎng)站與支付系統(tǒng)的流量實(shí)現(xiàn)良好分離
D、在正常和過(guò)載情況下,系統(tǒng)的定單數(shù)量/小時(shí)指標(biāo)在合理范圍內(nèi),代理服務(wù)器、交易服務(wù)器以及數(shù)據(jù)庫(kù)服務(wù)器的資源消耗合理
5、總結(jié)
通過(guò)分析大型票務(wù)系統(tǒng)的訪問(wèn)特點(diǎn)和規(guī)律,提出了大型票務(wù)系統(tǒng)的性能測(cè)試策略和方法,該方法經(jīng)具備普遍的合理性和較強(qiáng)的操作性,但是該方法還有待在更多大型票務(wù)系統(tǒng)性能測(cè)試中進(jìn)行應(yīng)用和完善。
1、引言
隨著互聯(lián)網(wǎng)的普及,越來(lái)越多的傳統(tǒng)業(yè)務(wù)轉(zhuǎn)移到了網(wǎng)絡(luò)進(jìn)行。但是由于大型票務(wù)系統(tǒng)受眾訪問(wèn)高峰、持續(xù)性等特殊性,使得傳統(tǒng)的性能測(cè)試策略并不適合該類(lèi)系統(tǒng)的測(cè)試。例如北京奧運(yùn)會(huì)票務(wù)系統(tǒng)和倫敦奧運(yùn)會(huì)票務(wù)系統(tǒng)的在運(yùn)營(yíng)階段不斷的癱瘓、修復(fù)、上線運(yùn)營(yíng)的循環(huán)中,大型票務(wù)系統(tǒng)的性能測(cè)試顯得尤為重要。
2、關(guān)鍵技術(shù)
2.1 Web應(yīng)用響應(yīng)時(shí)間

其中C1是用戶(hù)發(fā)請(qǐng)求前在客戶(hù)端完成預(yù)處理階段;C2是客戶(hù)端接收到服務(wù)器返響應(yīng)后,對(duì)處理結(jié)果展現(xiàn)的階段;A1是WEB Server或者APP Server對(duì)請(qǐng)求進(jìn)行處理階段;A2是數(shù)據(jù)庫(kù)服務(wù)器對(duì)請(qǐng)求進(jìn)行處理階段;A3是WEB Server或者APP Server對(duì)DB Server 返回結(jié)果進(jìn)行處理的階段;N1是請(qǐng)求由客戶(hù)端發(fā)出并達(dá)到Web/App Server 的階段;N2是如果需要進(jìn)行數(shù)據(jù)庫(kù)相關(guān)的操作,由Web/App Server 將請(qǐng)求發(fā)送至DB Server 階段;N3是DB Server 完成處理并將結(jié)果返回Web/App Server 階段;N4是Web/App Server 完成處理并將結(jié)果返回給客戶(hù)端階段。
從用戶(hù)的角度來(lái)看,響應(yīng)時(shí)間=(C1+C2)+(A1+A2+A3)+(N1+N2+N3+N4);但是從系統(tǒng)的角度來(lái)看,響應(yīng)時(shí)間只包括(A1+A2+A3)+(N1+N2+N3+N4)。
2.2 前端性能
所謂前端是相對(duì)于后端而言的,后端是用戶(hù)分析用戶(hù)請(qǐng)求、執(zhí)行數(shù)據(jù)查詢(xún)并對(duì)結(jié)果進(jìn)行組織,形成瀏覽器可以完全呈現(xiàn)的內(nèi)容;前端是負(fù)責(zé)將后端生成的內(nèi)容通過(guò)網(wǎng)絡(luò)發(fā)送給客戶(hù)段瀏覽器,展現(xiàn)后端請(qǐng)求處理結(jié)果的。前端開(kāi)發(fā)技術(shù)主要有(X)HTML/CSS/JavaScript/DOM/Flash等各種Web技術(shù)。前端性能主要是在客戶(hù)端通過(guò)瀏覽器發(fā)送了一個(gè)請(qǐng)求,除去后端處理消耗的時(shí)間的瀏覽器展示后端訪問(wèn)請(qǐng)求的時(shí)間。也就是圖1中C1+C2+N1+N2階段,其中主要衡量接受到的數(shù)據(jù)的大小、接受響應(yīng)數(shù)據(jù)的碎片程度等方面。
在交互式應(yīng)用中,響應(yīng)時(shí)間大于15秒,對(duì)于大多數(shù)人是無(wú)法容忍的,相應(yīng)時(shí)間大于4秒時(shí),人的短期記憶會(huì)受到影響,工作的連續(xù)性就會(huì)被破壞。對(duì)于一個(gè)用戶(hù)的每次訪問(wèn)來(lái)說(shuō),80%的響應(yīng)時(shí)間消耗在了前端。而且對(duì)于提升網(wǎng)站的訪問(wèn)速度而言,如果通過(guò)后端優(yōu)化將響應(yīng)速度提升一賠,那么整體的響應(yīng)時(shí)間僅僅只能減少5%到10%;而如果通過(guò)優(yōu)化前端將響應(yīng)時(shí)間減少一半,則整體響應(yīng)時(shí)間至少減少40%到45%。
2.3 后端性能
后端性能是指web Server或者APP Server在收到客戶(hù)端響應(yīng)后,對(duì)其進(jìn)行處理,通過(guò)數(shù)據(jù)庫(kù)數(shù)據(jù)返回結(jié)果,經(jīng)過(guò)處理將返回響應(yīng)發(fā)送給客戶(hù)端的過(guò)程。也就是圖1中邏輯業(yè)務(wù)流經(jīng)過(guò)A1、A2、A3、N2、N3的過(guò)程中對(duì)各個(gè)階段的響應(yīng)時(shí)間、服務(wù)器資源利用率、網(wǎng)絡(luò)負(fù)載等方面的衡量。
性能度量就是通過(guò)定義一系列可以反映程序性能的指標(biāo),并從程序?qū)嶋H運(yùn)行的數(shù)據(jù)中獲得度量結(jié)果的過(guò)程。性能度量的結(jié)果可以用于評(píng)估系統(tǒng)的性能好壞、分析性能瓶頸和改進(jìn)系統(tǒng)性能等。針對(duì)Web應(yīng)用性能,有兩種常用度量指標(biāo):度量資源使用情況,度量響應(yīng)時(shí)間。
3、大型票務(wù)系統(tǒng)性能評(píng)價(jià)方法
3.1 前段性能評(píng)價(jià)方法
對(duì)于大型票務(wù)系統(tǒng)而言,前端性能的優(yōu)化主要是為了加快響應(yīng)結(jié)果在客戶(hù)端的響應(yīng)速度,這樣能夠避免用戶(hù)誤以為無(wú)響應(yīng)而反復(fù)的刷新造成服務(wù)器端壓力。在評(píng)測(cè)過(guò)程中主要從如下幾個(gè)方面進(jìn)行考慮:
A、CSS文件或者代碼至于頂部
B、JavaScript腳本文件或者代碼至于文件的底部
C、CSS文件或者代碼中無(wú)CSS表達(dá)式
D、JavaScript腳本文件或者代碼中無(wú)重復(fù)腳本
E、移除無(wú)用的CSS
F、對(duì)JavaScript腳本進(jìn)行了精簡(jiǎn)
G、精簡(jiǎn)CSS腳本
H、外鏈JavaScript腳本并且合并多個(gè)javascript腳本文件
I、外鏈CSS并且合并多個(gè)CSS文件
J、應(yīng)用圖片地圖或者CSS Sprites
K、應(yīng)用Expires頭
L、無(wú)重定向
M、應(yīng)用GZip壓縮
N、配置ETag
在上述的評(píng)測(cè)內(nèi)容中主要包括了兩方面,其一是腳本文件的優(yōu)化,資源文件的優(yōu)化和CSS文件的優(yōu)化三大方面。服務(wù)器文件優(yōu)化就是降低在客戶(hù)端訪問(wèn)服務(wù)器端時(shí),除去HTML文檔外其他所有內(nèi)容的物理大小,減小傳輸時(shí)間和加載時(shí)間。其二是依據(jù)HTTP協(xié)議特性,通過(guò)配置中間件、修改源程序等操作進(jìn)行的優(yōu)化。在完成上述14項(xiàng)技術(shù)評(píng)價(jià)指標(biāo)后,仍有如下4項(xiàng)附加項(xiàng)需要考慮:
O、應(yīng)用Ajax緩存
P、應(yīng)用CDN
Q、混淆JavaScript
R、頁(yè)面DNS查找最小化
由于上述四項(xiàng)附加是由相對(duì)復(fù)雜,風(fēng)險(xiǎn)較大、實(shí)現(xiàn)成本較高技術(shù)決定的,因此附加項(xiàng)的滿(mǎn)足條件就視項(xiàng)目的投入成本情況而定,并不一定要完全滿(mǎn)足。
3.2 后端性能評(píng)價(jià)方法
由于票務(wù)系統(tǒng)通常在短時(shí)間內(nèi)進(jìn)行集中售票,存在短時(shí)間內(nèi)訪問(wèn)量陡增、售票期間持續(xù)高壓力以及與銀行支付業(yè)務(wù)緊密相關(guān)等特點(diǎn),因此保證大壓力下的核心售票系統(tǒng)能夠提供高性能的服務(wù)水平,將直接影響終端用戶(hù)的購(gòu)票體驗(yàn)。糟糕的用戶(hù)體驗(yàn)包括:
A、超長(zhǎng)的等待時(shí)間
B、頁(yè)面無(wú)響應(yīng)
C、支付失敗
從性能測(cè)試角度看,整個(gè)運(yùn)行環(huán)境在承受來(lái)自世界各地高強(qiáng)度的并發(fā)訪問(wèn)過(guò)程中,可能存在以下問(wèn)題:
A、網(wǎng)絡(luò)擁塞導(dǎo)致頁(yè)面請(qǐng)求響應(yīng)緩慢或超時(shí)報(bào)錯(cuò)
B、頁(yè)面刷新機(jī)制導(dǎo)致在用戶(hù)鎖票、坐席分配以及支付階段時(shí),用戶(hù)等待時(shí)間增長(zhǎng),訂單處理速度急劇下降
C、大量的金額統(tǒng)計(jì)以及票務(wù)更新導(dǎo)致交易服務(wù)器和后臺(tái)數(shù)據(jù)庫(kù)繁忙
D、大量的VISA卡支付操作導(dǎo)致支付網(wǎng)點(diǎn)服務(wù)器繁忙,處理效率底下
為準(zhǔn)確模擬實(shí)際情況,需將歷史經(jīng)驗(yàn)同本次售票方案相結(jié)合,預(yù)計(jì)并發(fā)訪問(wèn)人數(shù)、網(wǎng)點(diǎn)規(guī)模、數(shù)據(jù)規(guī)模等指標(biāo),在保證數(shù)據(jù)中心實(shí)現(xiàn)良好數(shù)據(jù)共享的情況下,測(cè)試的重點(diǎn)應(yīng)涉及一下幾個(gè)方面:
A、網(wǎng)絡(luò)負(fù)載
B、多個(gè)數(shù)據(jù)中心間的負(fù)載均衡
C、峰值期間每小時(shí)定單數(shù)量
D、代理服務(wù)器、交易服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器的資源消耗情況
E、長(zhǎng)時(shí)間高效服務(wù)的能力
4、大型票務(wù)系統(tǒng)性能測(cè)試方法
4.1 前段性能測(cè)試方法
前端性能主要的評(píng)測(cè)工具有Google的Page Speed和Yahoo的YSlow。Google開(kāi)發(fā)團(tuán)隊(duì)針對(duì)SteveSounder網(wǎng)頁(yè)性能最優(yōu)方法,成功地推出一款基于Firefox/Firebug的開(kāi)發(fā)類(lèi)插件Page Speed,旨在幫助開(kāi)發(fā)人員分析網(wǎng)站性能存在的主要問(wèn)題,并有針對(duì)性地提出優(yōu)化改進(jìn)意見(jiàn)。它支持的操作系統(tǒng)為Linux、Mac、Windows。在此之前, Google內(nèi)部已經(jīng)廣泛使用PageSpeed優(yōu)化網(wǎng)頁(yè)前端性能。YSlow是有雅虎公司開(kāi)發(fā)的免費(fèi)前端性能檢測(cè)工具。YSlow通過(guò)檢測(cè)網(wǎng)頁(yè)上的所有組件,包括JavaScript動(dòng)態(tài)創(chuàng)建的組件,分析網(wǎng)頁(yè)的前端性能。同時(shí),YSlow依據(jù)前端性能的分析結(jié)果提出改進(jìn)建議。
在應(yīng)用上述兩款任意一款給你工具進(jìn)行測(cè)試后,將測(cè)試結(jié)果對(duì)應(yīng)的填入下面的前段性能評(píng)測(cè)記錄表中。
表1 前段性能評(píng)測(cè)記錄表

其中,優(yōu)化項(xiàng)所有內(nèi)容必須滿(mǎn)足,附加項(xiàng)可以不滿(mǎn)足,在評(píng)測(cè)結(jié)果中Y代表滿(mǎn)足、N代表不滿(mǎn)足、Null代表無(wú)優(yōu)化項(xiàng)相關(guān)技術(shù)。評(píng)測(cè)結(jié)果共分為A、B、C、D、E和U六個(gè)級(jí)別。具體對(duì)應(yīng)關(guān)系如下表所示:
表2 評(píng)級(jí)標(biāo)準(zhǔn)

4.2 后端性能測(cè)試方法
測(cè)試主要采用商業(yè)級(jí)別的性能測(cè)試工具進(jìn)行測(cè)試,如HP Loadrunner。通過(guò)大規(guī)模模擬實(shí)際用戶(hù)的操作行為,測(cè)試核心售票系統(tǒng)中注冊(cè)、瀏覽、座位選擇、支付等關(guān)鍵業(yè)務(wù)的響應(yīng)時(shí)間和服務(wù)器實(shí)時(shí)處理能力,重點(diǎn)關(guān)注CPU、內(nèi)存、I/O等信息,為操作系統(tǒng)、中間件和數(shù)據(jù)庫(kù)以及服務(wù)器的性能優(yōu)化和調(diào)整提供數(shù)據(jù)依據(jù)。
通常情況下,數(shù)據(jù)中心中用于支撐售票業(yè)務(wù)的服務(wù)器多達(dá)幾百臺(tái),通過(guò)軟件在測(cè)試中進(jìn)行監(jiān)控更容易實(shí)現(xiàn),如UC Berkeley的開(kāi)源集群監(jiān)視軟件Ganglia。Ganglia的核心包含gmond、gmetad以及一個(gè)Web前端,通過(guò)自動(dòng)解析linux操作系統(tǒng)proc目錄下的文件來(lái)獲取操作系統(tǒng)的主要性能指標(biāo)。Ganglia帶來(lái)的系統(tǒng)負(fù)載非常少,幾乎不會(huì)影響被監(jiān)控系統(tǒng)性能。對(duì)于中間件和數(shù)據(jù)庫(kù)等基礎(chǔ)軟件,可采用其自帶的監(jiān)視器或命令來(lái)獲取性能指標(biāo)。
在測(cè)試場(chǎng)景設(shè)計(jì)中,應(yīng)考慮準(zhǔn)確模擬混合業(yè)務(wù)的并發(fā)操作,以及過(guò)載訪問(wèn)的情況,可借鑒下表中的思路進(jìn)行測(cè)試:
表3后端性能測(cè)試場(chǎng)景

通過(guò)測(cè)試考察運(yùn)行環(huán)境的抗壓能力,在成本和風(fēng)險(xiǎn)可接受范圍內(nèi)對(duì)整個(gè)運(yùn)行環(huán)境進(jìn)行合理優(yōu)化,提高核心售票系統(tǒng)的處理能力。總的來(lái)說(shuō),高效的核心售票系統(tǒng)在上線前達(dá)到以下要求:
A、核心業(yè)務(wù)模塊中無(wú)明顯效率低下的模塊
B、多個(gè)數(shù)據(jù)中心間實(shí)現(xiàn)了良好的負(fù)載均衡,整個(gè)運(yùn)行環(huán)境中不存在明顯的服務(wù)器資源消耗過(guò)度的情況
C、整個(gè)運(yùn)行環(huán)境的網(wǎng)絡(luò)承受負(fù)載的能力良好,各銀行支付網(wǎng)點(diǎn)進(jìn)行了合理的組網(wǎng)規(guī)劃,網(wǎng)站與支付系統(tǒng)的流量實(shí)現(xiàn)良好分離
D、在正常和過(guò)載情況下,系統(tǒng)的定單數(shù)量/小時(shí)指標(biāo)在合理范圍內(nèi),代理服務(wù)器、交易服務(wù)器以及數(shù)據(jù)庫(kù)服務(wù)器的資源消耗合理
5、總結(jié)
通過(guò)分析大型票務(wù)系統(tǒng)的訪問(wèn)特點(diǎn)和規(guī)律,提出了大型票務(wù)系統(tǒng)的性能測(cè)試策略和方法,該方法經(jīng)具備普遍的合理性和較強(qiáng)的操作性,但是該方法還有待在更多大型票務(wù)系統(tǒng)性能測(cè)試中進(jìn)行應(yīng)用和完善