李昌建 劉坤 晉文明 錢巨
摘? ?要:云測試用于云上管理和執(zhí)行測試任務(wù)。由于云上的計算資源能夠較為方便的擴(kuò)展,而負(fù)載測試通常需要大量計算資源,因此負(fù)載測試非常契合基于云的測試方法。為了保證負(fù)載測試能夠按照測試計劃成功發(fā)起,并且不會出現(xiàn)資源不足或閑置,需要在測試執(zhí)行前確定云上虛擬主機(jī)數(shù)目,而現(xiàn)有的研究還缺少此類技術(shù)。為此,提出了一種面向腳本化負(fù)載測試的云主機(jī)預(yù)測技術(shù),在負(fù)載測試開始前執(zhí)行小規(guī)模的負(fù)載測試,收集計算資源與測試負(fù)載的基礎(chǔ)數(shù)據(jù),在此基礎(chǔ)上使用機(jī)器學(xué)習(xí)方法進(jìn)行數(shù)據(jù)訓(xùn)練并預(yù)測主機(jī)數(shù)量。結(jié)果表明:提出的主機(jī)預(yù)測方法能夠較好地預(yù)測出負(fù)載測試所需主機(jī)數(shù)目。
關(guān)鍵詞:云測試;負(fù)載測試;測試腳本;主機(jī)預(yù)測
中圖分類號:TP311? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識碼:A
文章編號:1003—6199(2020)02—0150—05
Abstract:Cloud testing refers to manage and perform testing activities on the cloud. Since computing resources in a cloud can be elastically allocated and load testing often needs large computing resources,it is very suitable for cloud-based methods. In cloud-based load testing,in order to ensure that the loads can be successfully launched according to a test plan without insufficient computing resources and avoid unnecessary wastes on such resources,it is necessary to determine the number of virtual hosts in the cloud used for creating test clients before the testing is performed. However,there lack such technique in the existing research. Therefore,this paper proposes a cloud host number prediction technique for scripted-based load testing. The new approach does small-scale load testing to gather basic data. Then,machine learning methods will be applied to train data and predict the required number of hosts. The results show that the proposed approach is effective for cloud-based load testing.
Key words:cloud testing;load testing;test script;host prediction
負(fù)載測試根據(jù)指定的性能要求和應(yīng)用場景,模擬用戶操作,對待測系統(tǒng)施加不同的測試負(fù)載,監(jiān)控系統(tǒng)在不同負(fù)載情況下的性能指標(biāo)數(shù)據(jù)(響應(yīng)時間、吞吐率和資源利用等),從而評估系統(tǒng)的性能[1]。傳統(tǒng)負(fù)載測試主要利用本地集群來發(fā)起測試,在此方面已經(jīng)有一些相對成熟的負(fù)載測試工具,如Load Runner[2]、Apache Jmeter[3]等,極大方便了負(fù)載測試的展開。然而,傳統(tǒng)負(fù)載測試需要相關(guān)技術(shù)人員來搭建測試環(huán)境、安裝部署測試工具,測試過程繁瑣。搭建測試環(huán)境所需的硬件服務(wù)器對中小型企業(yè)也是一筆不小的成本,而在測試結(jié)束后如無其他計算需求,易使得服務(wù)器處于閑置狀態(tài),浪費資源。另一方面,若負(fù)載規(guī)模增長時需要更多的計算資源。計算資源指操作系統(tǒng)及應(yīng)用程序運行所需的CPU資源、內(nèi)存資源、網(wǎng)絡(luò)資源及磁盤資源等,受制于硬件的成本,而不易對計算資源進(jìn)行擴(kuò)展。
云測試是解決負(fù)載測試難題的一種有效途徑。它將測試活動遷移到云上去,用戶通過互聯(lián)網(wǎng)上傳測試配置后,由云上的主機(jī)執(zhí)行測試活動。用戶只需按需要購買測試服務(wù),而不需要購買昂貴的硬件,且可較為方便對計算資源進(jìn)行擴(kuò)展以發(fā)起更高的測試負(fù)載。在此方面, Ali等[4]提出了基于云的Web應(yīng)用的性能測試即服務(wù)的架構(gòu)。Banzai[5]提出了D-Cloud云測試系統(tǒng),通過在虛擬機(jī)上注入故障進(jìn)行容錯性測試,解決分布式系統(tǒng)部署后測試?yán)щy的問題。在工業(yè)界,阿里云性能測試PTS[6]支持以JMeter腳本編寫的測試用例,可以輕松模擬大量用戶訪問業(yè)務(wù)的場景,任務(wù)隨時發(fā)起,免去搭建和維護(hù)成本。騰訊的壓測大師LM[7]通過用戶定義的URL和Cookies創(chuàng)建多用戶的并發(fā)場景對軟件進(jìn)行測試,用戶無需考慮負(fù)載發(fā)起主機(jī)配置問題。這兩個測試工具利用云服務(wù)商海量的計算資源來發(fā)起測試,雖然能夠有效完成測試,但并未討論測試資源的優(yōu)化問題,其發(fā)起大規(guī)模負(fù)載的成本較高,不易為中小客戶使用。另外,兩個測試工具依賴公有云環(huán)境來開展測試,其模式也不適用于私有云環(huán)境下的測試。
為保證云測試活動中負(fù)載測試的服務(wù)質(zhì)量,以及優(yōu)化虛擬主機(jī)的資源消耗,提出了一種面向基于云的測試的主機(jī)預(yù)測技術(shù),通過小規(guī)模負(fù)載從測試活動收集計算資源與負(fù)載的數(shù)據(jù),建立機(jī)器學(xué)習(xí)模型預(yù)測測試負(fù)載所需的主機(jī)數(shù)目。
1? ?預(yù)測總體流程
提出了面向云的負(fù)載主機(jī)的預(yù)測總體方法,總體方法通過測試預(yù)執(zhí)行過程收集小規(guī)模的負(fù)載測試執(zhí)行數(shù)據(jù),通過對負(fù)載測試數(shù)據(jù)進(jìn)行處理后訓(xùn)練主機(jī)預(yù)測模型,再使用預(yù)測模型預(yù)測完成目標(biāo)負(fù)載所需的虛擬主機(jī)數(shù),分配好主機(jī)數(shù)后執(zhí)行負(fù)載測試,最后在負(fù)載測試完成后對測試結(jié)果進(jìn)評估,整體預(yù)測流程如圖3.1所示,以下是對預(yù)測流程的介紹。
首先,上傳負(fù)載測試配置,測試配置包括測試腳本與測試腳本需要執(zhí)行的負(fù)載規(guī)模。接著使用已經(jīng)上傳的測試腳本在單臺虛擬機(jī)上進(jìn)行小規(guī)模負(fù)載測試預(yù)執(zhí)行活動,收集測試執(zhí)行過程中虛擬機(jī)的計算資源數(shù)據(jù)R(包括CPU使用率、內(nèi)存消耗、網(wǎng)絡(luò)帶寬等性能數(shù)據(jù))虛擬機(jī)上的負(fù)載執(zhí)行數(shù)據(jù)LOAD。接著將虛擬主機(jī)的性能數(shù)據(jù)與負(fù)載數(shù)據(jù)按照數(shù)據(jù)收集的時間點進(jìn)組合,得到資源與負(fù)載融合數(shù)據(jù)。資源與負(fù)載融合數(shù)據(jù)中的一條數(shù)據(jù)
接著使用機(jī)器學(xué)習(xí)相關(guān)方法對融合后的數(shù)據(jù)進(jìn)行學(xué)習(xí),建立腳本負(fù)載預(yù)測模型,模型的輸入為腳本的負(fù)載規(guī)模load,輸出為測試達(dá)到負(fù)載規(guī)模load所需要的虛擬主機(jī)數(shù)目n,即
由于主機(jī)數(shù)目對負(fù)載的變化不十分敏感,本文采用計算資源作為中間變量進(jìn)行主機(jī)數(shù)目預(yù)測,可通過已收集數(shù)據(jù)學(xué)習(xí)計算資源與測試負(fù)載的映射關(guān)系預(yù)測消耗的計算資源為r時可達(dá)到的測試負(fù)載load,即
在選定虛擬主機(jī)配置后虛擬主機(jī)的計算資源可用固定的數(shù)值表示(如2核CPU,4 GB內(nèi)存,3 M帶寬,40 GB存儲等),利用上式求得單機(jī)的最大可支持負(fù)載,當(dāng)測試負(fù)載超過單機(jī)的最大可支持負(fù)載時則認(rèn)為負(fù)載測試需要增加新的虛擬主機(jī)。
在完成虛擬主機(jī)數(shù)目n的預(yù)測后在云中的測試集群分配n臺虛擬主機(jī),接著將測試任務(wù)發(fā)送給 n臺虛擬主機(jī),虛擬主機(jī)上運行測試負(fù)載并對生成負(fù)載的待測應(yīng)用程序進(jìn)行監(jiān)控,收集測試執(zhí)行信息。最后,對測試結(jié)果進(jìn)行分析,比較不同機(jī)器學(xué)習(xí)方法的預(yù)測效果。
2? ?數(shù)據(jù)收集
在測試預(yù)執(zhí)行階段在虛擬主機(jī)上收集計算資源與負(fù)載的數(shù)據(jù),按照時間點將計算資源數(shù)據(jù)與負(fù)載數(shù)據(jù)構(gòu)造成資源負(fù)載融合數(shù)據(jù),以方便使用機(jī)器學(xué)習(xí)方法訓(xùn)練數(shù)據(jù)。
使用測試腳本在單臺虛擬機(jī)上執(zhí)行小規(guī)模的負(fù)載測試活動并實時收集計算資源數(shù)據(jù)和負(fù)載數(shù)據(jù),數(shù)據(jù)收集的輸入是負(fù)載測試腳本,輸出是測試腳本對應(yīng)的資源負(fù)載融合數(shù)據(jù)。圖2給出了負(fù)載測試中數(shù)據(jù)收集的流程圖。
首先監(jiān)控中心模塊發(fā)起負(fù)載測試任務(wù),測試腳本執(zhí)行任務(wù)被發(fā)送到虛擬主機(jī)中進(jìn)行。虛擬主機(jī)按照監(jiān)控中心模塊下達(dá)的測試任務(wù),向待測試應(yīng)用程序發(fā)送業(yè)務(wù)請求信息,并接收待測應(yīng)用程序發(fā)出的請求響應(yīng)。測試執(zhí)行過程中,通過預(yù)先安裝在虛擬主機(jī)上的工具監(jiān)控虛擬主機(jī)的CPU使用率、內(nèi)存消耗等實時計算資源數(shù)據(jù),虛擬主機(jī)的負(fù)載測試過程中記錄負(fù)載規(guī)模與其發(fā)生時間的數(shù)據(jù)被當(dāng)作實時負(fù)載數(shù)據(jù)。
監(jiān)控中心模塊通過Web服務(wù)接口收集虛擬主機(jī)的實時計算資源數(shù)據(jù)與實時負(fù)載數(shù)據(jù)。將實時計算資源數(shù)據(jù)[R,Tr]與實時負(fù)載數(shù)據(jù)[LOAD,Tl]作為輸入,如果計算資源數(shù)據(jù)中某一時刻tr對應(yīng)計算資源為r,而在實時負(fù)載數(shù)據(jù)中同一時刻tl(tr = tl)對應(yīng)的負(fù)載為load,則將計算資源r與負(fù)載load組合成資源與負(fù)載的數(shù)據(jù)對
3? ?負(fù)載預(yù)測學(xué)習(xí)方法
本研究需要在資源與負(fù)載間關(guān)系的基礎(chǔ)上預(yù)測出一個負(fù)載與計算資源映射的函數(shù)模型M(r)→load。該函數(shù)模型具有以下特點:
(1)輸入與輸出均是數(shù)值型數(shù)據(jù),不包含有字符、枚舉等類型數(shù)據(jù);
(2)輸入與輸出呈非遞減增長,即要得到更多的測試負(fù)載需要消耗更多的計算資源;
上述問題本質(zhì)上是一個數(shù)值預(yù)測的回歸學(xué)習(xí)問題,當(dāng)前存在多種支持回歸學(xué)習(xí)的方法,典型方法包括線性回歸、支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)等。由于計算資源與負(fù)載的變化關(guān)系尚不確定,由單一學(xué)習(xí)方法進(jìn)行預(yù)測不能保證預(yù)測的準(zhǔn)確性。使用了當(dāng)前比較流行的回歸學(xué)習(xí)方法[8]進(jìn)行數(shù)據(jù)訓(xùn)練,在后面的內(nèi)容中通過實驗比較不同學(xué)習(xí)方法對計算資源的學(xué)習(xí)能力。
3.1? 冪函數(shù)擬合
冪函數(shù)的曲線特征是,曲線變化前期增長比較緩慢,后期增長比較迅速。將計算資源r(如CPU使用率、內(nèi)存消耗大小、網(wǎng)絡(luò)帶寬等)與測試負(fù)載的關(guān)系可用冪函數(shù)標(biāo)示,即
其中w0及w1為冪函數(shù)的參數(shù)。在訓(xùn)練過程中,對上述式子兩邊取對數(shù),可得
令X = w1ln(r),Y = ln(load)將上式轉(zhuǎn)化為一次函數(shù)形式,經(jīng)數(shù)據(jù)訓(xùn)練得到擬合函數(shù):
3.2? ?支持向量回歸擬合
支持向量回歸(SVR)[9]是支持向量機(jī)(SVM)的在數(shù)值回歸預(yù)測問題上的應(yīng)用,通過使預(yù)測誤差最小化來尋找最接近訓(xùn)練數(shù)據(jù)點的函數(shù)。支持向量回歸的輸入是一組可數(shù)值預(yù)測回歸的特征向量集,輸出是一組描述訓(xùn)練數(shù)據(jù)內(nèi)數(shù)據(jù)回歸關(guān)系的函數(shù),即
將資源與負(fù)載融合數(shù)據(jù)作為特征向量,訓(xùn)練得到負(fù)載與計算資源的支持向量回歸模型。
3.3? ?多層感知器擬合
多層感知器是一種前饋型神經(jīng)網(wǎng)絡(luò)[10],其拓?fù)浣Y(jié)構(gòu)包括一個輸入層、一個輸出層和一到多個隱藏層,如圖3所示。多層感知器在復(fù)雜問題的求解,有不錯的表現(xiàn)。
在使用多層感知器進(jìn)行訓(xùn)練時,通過神經(jīng)元輸出的實際值與目標(biāo)值的誤差來調(diào)整神經(jīng)元的連接權(quán)重,直至最終結(jié)果滿足誤差要求。
在使用多層感知器時輸入層的輸入是計算資源數(shù)據(jù)向量,目標(biāo)值是測試負(fù)載的向量形式,訓(xùn)練結(jié)束后得到資源預(yù)測的多層感知器模型,利用該模型計算未知負(fù)載下的計算資源。
4? ?主機(jī)預(yù)測方案
主機(jī)預(yù)測方案使用單機(jī)計算資源作為輸入,預(yù)測單機(jī)支持的最大測試負(fù)載規(guī)模,再根據(jù)負(fù)載規(guī)模求得主機(jī)數(shù)目。包括模型訓(xùn)練和主機(jī)數(shù)目預(yù)測兩個步驟。
模型訓(xùn)練以計算資源預(yù)測負(fù)載,把資源與負(fù)載融合數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),以測試負(fù)載load作為訓(xùn)練目標(biāo),使用負(fù)載學(xué)習(xí)預(yù)測方法得到預(yù)測模型M,得到預(yù)測函數(shù),即:
在預(yù)測主機(jī)數(shù)目時,對于主機(jī)的計算資源來說,計算資源不能得到完全的使用,如CPU資源利用率超過80%時,會造成資源緊張的情況,此時為主機(jī)增加更多的測試任務(wù)會影響測試正常發(fā)起或是測試結(jié)果的處理等情況。本文使用最大資源利用率maxr表示測試主機(jī)正常工作條件下計算資源能達(dá)到的最大利用率,主機(jī)最大可用計算資源ra與主機(jī)計算資源rh的換算關(guān)系:
將單臺主機(jī)的最大可用計算資源ra帶入到預(yù)測函數(shù)得到單臺主機(jī)可支持的負(fù)載loadh,計算過程為
當(dāng)負(fù)載規(guī)模超過單臺主機(jī)支持的負(fù)載時,使用目標(biāo)負(fù)載除以單臺主機(jī)可支持的負(fù)載得到主機(jī)數(shù)目n,若所得數(shù)值存在小數(shù)部分,則對數(shù)值進(jìn)行向上取整處理以保證計算資源能滿足負(fù)載測試的需要,即
5? ?實? ?驗
實驗選取開源應(yīng)用程序錄制6個測試腳本,虛擬機(jī)選擇2核4 GB的配置,最大資源利用率為80%,通過測試預(yù)執(zhí)行過程收集計算資源與負(fù)載數(shù)據(jù)得到資源與負(fù)載融合數(shù)據(jù)。按照本文所述預(yù)測方案,分別使用三種學(xué)習(xí)方法預(yù)測發(fā)起1萬負(fù)載所需要的主機(jī)數(shù),并將預(yù)測的結(jié)果寫入到表1中,其中EXP指冪函數(shù)擬合方法、SVR指支持向量回歸擬合方法、MLP指多層感知器擬合方法,n為當(dāng)前學(xué)習(xí)方法預(yù)測得出的主機(jī)數(shù)目,t為訓(xùn)練及預(yù)測過程的總時間,單位為秒,N為實際負(fù)載測試工作時最優(yōu)主機(jī)數(shù)目,S為測試腳本,s1-s6為具體的腳本編號。
從實驗結(jié)果來看,冪函數(shù)擬合方法進(jìn)行主機(jī)預(yù)測效果相對較差,在實際主機(jī)需求增多時,預(yù)測的主機(jī)數(shù)目與實際數(shù)目相差較大;其次多層感知器擬合方法與支持向量回歸擬合方法預(yù)測的效果相對冪函數(shù)擬合方法有所提升,其中多層感知器算法進(jìn)行預(yù)測時訓(xùn)練及預(yù)測總消耗時間比其他方法的總消耗時間更多。
6? ?結(jié)? ?論
提出了一種面向云測試的主機(jī)預(yù)測技術(shù),可運用于確定云上負(fù)載測試需要的主機(jī)數(shù)目,避免人工估計主機(jī)的主機(jī)數(shù)目偏少引起的測試失敗或是主機(jī)數(shù)目過多造成的資源浪費的問題。實驗結(jié)果表明,提出的方法在使用支持向量回歸及多層感知器算法時能有效預(yù)測出主機(jī)數(shù)目。
參考文獻(xiàn)
[1]? ? MENASCE′ D A. Load testing of web sites[J].? IEEE Internet Computing,2002,6(4):70-74.
[2]? ? Load Runner [EB/OL](2018-10-23)[2019-05-04]. https://www.microfocus.com/zh-cn/products/loadrunner-load-testing/overview.
[3]? ? Apache Jmeter? [EB/OL](2018-12-21)[2019-05-04]. https://jmeter.apache.org
[4]? ? ALI A,BADR N. Performance testing as a service for web applications[C]//2015 IEEE Seventh International Conference on Intelligent Computing and Information Systems (ICICIS). IEEE,2015:356-361.
[5]? ? BANZAI T,KOIZUMI H,KANBAYASHI R,et al. D-cloud:design of a software testing environment for reliable distributed systems using cloud computing technology[C]//2010 10th IEEE/ACM International Conference on Cluster,Cloud and Grid Computing. IEEE,2010:631-636.
[6]? ? 阿里云性能測試工具 PTS [EB/OL](2019-01-21)[2019-05-04]. https://www.aliyun.com/product/pts
[7]? ? 壓測大師 LM [EB/OL](2019-01-21)[2019-05-04]. https://cloud.tencent.com/product/lmRapid elasticity and the cloud.
[8]? ? 胡越,羅東陽,花奎,等. 關(guān)于深度學(xué)習(xí)的綜述與討論[J]. 智能系統(tǒng)學(xué)報,2019,14(01):1-19.
[9]? ? SMOLA A J,SCH?魻LKOPF B. A tutorial on support vector regression[J].? Statistics and Computing,2004,14(3):199-222.
[10]? RUMELHART D E ,HINTON G E ,WILLIAMS R J . Learning internal representations by error propagation[M]// Neurocomputing:foundations of research. MIT Press,1988.