劉 維,何冬輝,楊攀飛
(1.工業(yè)和信息化部電子第五研究所,廣州 511300;2.基礎(chǔ)軟硬件性能與可靠性測評(píng)工業(yè)和信息化部重點(diǎn)實(shí)驗(yàn)室,廣州 511300)
中間件是連接軟件組件或企業(yè)應(yīng)用程序的軟件[1],其主要作用是屏蔽底層系統(tǒng)和通信的異構(gòu)性,進(jìn)而支撐應(yīng)用實(shí)現(xiàn)穩(wěn)定、可靠和高并發(fā)運(yùn)行,并簡化應(yīng)用的開發(fā)流程[2]。它開始于操作系統(tǒng)之上的一些附加功能,以促進(jìn)復(fù)雜應(yīng)用程序的開發(fā),然后發(fā)展了數(shù)據(jù)集成功能,后來成為網(wǎng)絡(luò)應(yīng)用程序的促進(jìn)者,最終成為每個(gè)分布式環(huán)境、應(yīng)用程序、系統(tǒng)和平臺(tái)的重要組成部分。到目前為止,任何類型的分布式系統(tǒng)或應(yīng)用程序都能找到中間件或一些涉及的中間件功能。通常,它支持復(fù)雜的分布式業(yè)務(wù)軟件應(yīng)用程序[1]。
作為三大基礎(chǔ)軟件之一,中間件是信息系統(tǒng)建設(shè)項(xiàng)目不可缺少的核心組件,與操作系統(tǒng)、數(shù)據(jù)庫具備同樣的戰(zhàn)略高度。中間件實(shí)現(xiàn)的范圍是多種多樣的,從面向通信的中間件到面向組件的應(yīng)用服務(wù)器[3]。目前國際通用的中間件技術(shù)標(biāo)準(zhǔn)主要有由SUN 公司提出的Java EE、微軟的COM+/.NET 框架以及公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu)(common object request broker architec?ture,CORBA)/CORBA 組件模型(CCM)[4]。在政策的指引下,國內(nèi)涌現(xiàn)出了一批國產(chǎn)化中間件產(chǎn)品,并廣泛應(yīng)用在各個(gè)行業(yè)與領(lǐng)域,現(xiàn)階段的國產(chǎn)中間件的核心訴求主要集中在應(yīng)用中間件。
目前在中國市場,主要的中間件廠商(組織)有8 家,其中3 家來自美國,5 家為國內(nèi)廠商,國內(nèi)廠商因受到政策驅(qū)動(dòng),市場保持穩(wěn)定發(fā)展態(tài)勢(shì)[5]。在8 家中間件廠商的主打中間件產(chǎn)品中,7 家為商業(yè)產(chǎn)品,1 家為開源產(chǎn)品,8 家廠商均通過了Jakarta EE 8規(guī)范兼容測試認(rèn)證。
獲得系統(tǒng)性能特征的常用方法是通過基準(zhǔn)測試[3],為保證國產(chǎn)Web 應(yīng)用中間件滿足其服務(wù)質(zhì)量(QoS)要求,須使用基準(zhǔn)測試來測量和驗(yàn)證它們的性能。面對(duì)國產(chǎn)中間件無測評(píng)體系、無配套測評(píng)工具的現(xiàn)狀,通過對(duì)中間件測評(píng)技術(shù)的研究,本文設(shè)計(jì)了一種Web 應(yīng)用中間件性能測試系統(tǒng),使用汽車保險(xiǎn)經(jīng)紀(jì)基準(zhǔn)模型對(duì)Web 應(yīng)用中間件進(jìn)行性能評(píng)估,對(duì)通過了Java EE 8、Java EE 7、Java EE 6 國際標(biāo)準(zhǔn)兼容認(rèn)證的某國產(chǎn)品牌Web應(yīng)用服務(wù)器軟件進(jìn)行評(píng)測。
汽車保險(xiǎn)經(jīng)紀(jì)基準(zhǔn)模型旨在測量與Java EE 7.0 Web Profile 或更高版本規(guī)范兼容的應(yīng)用服務(wù)器的性能。它為Web 應(yīng)用程序的用戶提供了一個(gè)標(biāo)準(zhǔn),用于比較從Java EE Web Profile 應(yīng)用服務(wù)器、Java 運(yùn)行時(shí)環(huán)境、網(wǎng)絡(luò)和操作系統(tǒng)到數(shù)據(jù)庫服務(wù)器和存儲(chǔ)的所有級(jí)別的應(yīng)用程序棧(application stack)的軟件和硬件性能[6]。它由一個(gè)保險(xiǎn)應(yīng)用程序組成,包含三種不同的服務(wù):車輛服務(wù)、保險(xiǎn)供應(yīng)商服務(wù)和保險(xiǎn)服務(wù),該應(yīng)用程序使用JSF 和REST 函數(shù)來驅(qū)動(dòng)應(yīng)用服務(wù)器上的負(fù)載。
整個(gè)測試系統(tǒng)可大致分為Driver,Applica?tion Server,Database Server三個(gè)部分[7],結(jié)構(gòu)如圖1所示。
圖1 Web應(yīng)用中間件性能測試系統(tǒng)結(jié)構(gòu)圖
Driver 的壓力部分:首先Driver 引用Faban測試工具進(jìn)行部署和測試,其工作原理是由主節(jié)點(diǎn)創(chuàng)立多個(gè)從節(jié)點(diǎn),之后用大量從節(jié)點(diǎn)來進(jìn)行壓力負(fù)載的測試。基準(zhǔn)測試系統(tǒng)使用Faban來安排和自動(dòng)化基準(zhǔn)測試運(yùn)行。Faban 還提供了一個(gè)嵌入式圖形工具,可以繪制和比較運(yùn)行結(jié)果。該工具作為托管在Tomcat 服務(wù)器上的Web 應(yīng)用程序運(yùn)行,它提供Web 用戶界面,并充當(dāng)汽車保險(xiǎn)經(jīng)紀(jì)基準(zhǔn)測試的驅(qū)動(dòng)程序組件的容器。線束提供的Web 用戶界面用于調(diào)度運(yùn)行,管理運(yùn)行,查看運(yùn)行日志以及運(yùn)行完成后查看結(jié)果(包括詳細(xì)圖表)[7]。
Application Server 部分:其主要運(yùn)行著車輛保險(xiǎn)模型,該模型由三部分服務(wù)組成,分別是:車輛服務(wù)、保險(xiǎn)供應(yīng)商服務(wù)和保險(xiǎn)服務(wù)。該模型支持集群化部署。
Database Server 部分:提供數(shù)據(jù)服務(wù),并且能夠及時(shí)響應(yīng),支持集群化部署。
通過gradle 腳本程序獲取到預(yù)先寫好的Ap?plication 的接口測試模型數(shù)據(jù),之后通過創(chuàng)建主從線程來預(yù)熱測試程序,預(yù)熱之后按照接口測試模型數(shù)據(jù)針對(duì)性地對(duì)承載應(yīng)用服務(wù)器Applica?tion Server的中間件進(jìn)行測試。
Web 應(yīng)用中間件性能測試系統(tǒng)的功能特點(diǎn)見表1。
表1 Web應(yīng)用中間件性能測試系統(tǒng)的功能特點(diǎn)
測試系統(tǒng)軟、硬件環(huán)境如表2所示。汽車保險(xiǎn)經(jīng)紀(jì)基準(zhǔn)模型測試的吞吐量由保險(xiǎn)驅(qū)動(dòng)程序的活動(dòng)驅(qū)動(dòng)。注入率(injection rate,IR)衡量在基準(zhǔn)運(yùn)行期間將加載多少數(shù)據(jù),驅(qū)動(dòng)器的吞吐量與所選的注入率直接相關(guān)。為了提高吞吐量,需要增加注入率。較高的注入率等同于更多的客戶端負(fù)載,因此相應(yīng)地創(chuàng)建了更多的數(shù)據(jù),本文分別在注入率為500、1000、1500 和2000的條件下進(jìn)行了測試,設(shè)置預(yù)熱時(shí)長為600 s,測試時(shí)長為3600 s,結(jié)束時(shí)長為300 s。
表2 測試系統(tǒng)運(yùn)行環(huán)境
本系統(tǒng)對(duì)Web 應(yīng)用中間件測試項(xiàng)分為四個(gè)部分,分別為組合操作(Operation Mix)、響應(yīng)時(shí)長(Response Times(seconds))、邏輯執(zhí)行時(shí)長(Cycle/Think Times(seconds))及其他項(xiàng)(Miscella?neous Statistics),業(yè)務(wù)交易類型如表3 所示。由保險(xiǎn)驅(qū)動(dòng)程序運(yùn)行的業(yè)務(wù)交易是保險(xiǎn)服務(wù)的一系列操作,業(yè)務(wù)交易序列由驅(qū)動(dòng)程序根據(jù)表4中所示的組合選擇。驅(qū)動(dòng)程序?qū)?5%的負(fù)載發(fā)送到JAX?RS API,并將15%的負(fù)載發(fā)送到JSF生成的HTML 頁面。表4 中的每個(gè)序列都具有REST 和JSF變體。驅(qū)動(dòng)負(fù)載的客戶端模擬Web用戶與保險(xiǎn)服務(wù)的應(yīng)用程序進(jìn)行交互,負(fù)載按照15%的JSF請(qǐng)求和85%的REST請(qǐng)求的比例進(jìn)行分配。
表4 業(yè)務(wù)交易組合要求
2.2.1 組合操作
組合操作測試結(jié)果包括業(yè)務(wù)成功總數(shù)、失敗總數(shù)、實(shí)際組合、目標(biāo)組合四項(xiàng),對(duì)于每種類型的業(yè)務(wù)交易操作,基準(zhǔn)中實(shí)現(xiàn)的實(shí)際組合須在目標(biāo)組合的4%范圍內(nèi)(±2%),驅(qū)動(dòng)程序檢查并報(bào)告是否滿足組合混合要求。圖2 顯示了500、1000、1500 和2000 四種不同注入率(txrate)下業(yè)務(wù)操作的成功總數(shù),圖3 顯示了實(shí)際組合和目標(biāo)組合之間的偏差在規(guī)定的范圍內(nèi),所有業(yè)務(wù)測試項(xiàng)通過。
圖2 不同注入率下業(yè)務(wù)的成功總數(shù)
圖3 不同注入率下業(yè)務(wù)實(shí)際組合和目標(biāo)組合的偏差
2.2.2 響應(yīng)時(shí)長
驅(qū)動(dòng)程序測量并記錄業(yè)務(wù)交易序列中每個(gè)不同操作的響應(yīng)時(shí)間,僅包括在測量間隔中成功完成業(yè)務(wù)交易序列的操作。業(yè)務(wù)交易的每個(gè)操作中至少有90%的響應(yīng)時(shí)間(90%th)須小于2 s(即90%目標(biāo)響應(yīng)時(shí)間為2 s)。每個(gè)業(yè)務(wù)交易操作的平均響應(yīng)時(shí)間不得超過記錄的90%響應(yīng)時(shí)間的0.1 s,此要求可確保所有用戶都能看到合理的響應(yīng)時(shí)間。例如,如果注冊(cè)事務(wù)的90%響應(yīng)時(shí)間是1 s,那么平均值不能大于1.1 s。驅(qū)動(dòng)程序檢查并報(bào)告是否滿足響應(yīng)時(shí)間要求。
該項(xiàng)測試,測試結(jié)果包括平均響應(yīng)時(shí)長、最大響應(yīng)時(shí)長、標(biāo)準(zhǔn)差、90%實(shí)際響應(yīng)時(shí)間、90%目標(biāo)響應(yīng)時(shí)間五項(xiàng),若每項(xiàng)業(yè)務(wù)平均響應(yīng)時(shí)間和90%實(shí)際響應(yīng)時(shí)間符合以上要求,則該測試項(xiàng)通過,反之則未通過。
圖4表明不同注入率,業(yè)務(wù)交易的每個(gè)操作中90%實(shí)際響應(yīng)時(shí)間(90%th)均小于90%目標(biāo)響應(yīng)時(shí)間(2 s),平均響應(yīng)時(shí)間(avg)符合規(guī)定,所有測試項(xiàng)通過,通過計(jì)算驗(yàn)證也可證明以上結(jié)論。
圖4 業(yè)務(wù)交易操作的響應(yīng)時(shí)間
2.2.3 邏輯執(zhí)行時(shí)長
該部分測試結(jié)果分為目標(biāo)平均(targeted avg)、實(shí)際平均(actual avg)、邏輯執(zhí)行時(shí)長最小值(min)和邏輯執(zhí)行時(shí)長最大值(max)四項(xiàng),每一個(gè)業(yè)務(wù)交易操作的測試均生成上述四項(xiàng)結(jié)果,當(dāng)實(shí)際平均不超過目標(biāo)平均時(shí),該業(yè)務(wù)交易操作項(xiàng)測試通過。測試結(jié)果表明在各注入率下實(shí)際平均執(zhí)行時(shí)長(actual avg)皆不高于目標(biāo)執(zhí)行時(shí)長(targeted avg),該項(xiàng)測試通過,測試結(jié)果如圖5及圖6所示。
圖5 邏輯執(zhí)行時(shí)長的目標(biāo)平均和實(shí)際平均
圖6 邏輯執(zhí)行時(shí)長的目標(biāo)平均及實(shí)際平均之差
2.2.4 其他項(xiàng)
該部分測試項(xiàng)設(shè)測量基準(zhǔn)設(shè)置,包括使用安全連接、有效的運(yùn)行屬性設(shè)置;初步審計(jì)項(xiàng),該項(xiàng)是注入數(shù)據(jù)的初步數(shù)據(jù)量審計(jì),包括車輛描述、車輛、車輛保險(xiǎn)、投保人、保險(xiǎn)政策;原子性測試,測試內(nèi)容包括原子性測試一及原子性測試二;持久性和正確性測試,包括JPA緩存透寫測試、幻讀刪除測試;最終審計(jì)項(xiàng)測試,它對(duì)程序測試之后的數(shù)據(jù)審計(jì);業(yè)務(wù)審計(jì)項(xiàng)測試。具體描述見表5。
表5 其他項(xiàng)測試
續(xù)表5
在基準(zhǔn)測試期間,業(yè)務(wù)交易序列的每個(gè)操作有99%或以上須在穩(wěn)定狀態(tài)下取得成功,這允許最多1%的操作類型失敗。此外,數(shù)據(jù)庫表中的行數(shù)須不超過預(yù)期大小±1%的偏差。驅(qū)動(dòng)程序檢查并報(bào)告是否滿足這些要求。測試結(jié)果表明,實(shí)際結(jié)果(results)符合目標(biāo)結(jié)果(targeted results),被測Web 應(yīng)用中間件使用https 安全連接方式,與目標(biāo)結(jié)果一致,有效的運(yùn)行屬性設(shè)置符合目標(biāo)結(jié)果,原子性測試通過。在誤差允許范圍內(nèi),初步審計(jì)、最終審計(jì)及業(yè)務(wù)審計(jì)成功率被測結(jié)果符合目標(biāo)結(jié)果要求。圖7在橫軸上三組不連續(xù)線段分別表示初步審計(jì)項(xiàng)、最終審計(jì)項(xiàng)和業(yè)務(wù)審計(jì)的成功數(shù)。
圖7 初步審計(jì)、最終審計(jì)及業(yè)務(wù)審計(jì)成功數(shù)
當(dāng)前,我國信創(chuàng)產(chǎn)業(yè)快速發(fā)展,但在中間件測評(píng)體系和測評(píng)工具方面還沒有成熟的、標(biāo)準(zhǔn)的技術(shù)和產(chǎn)品成果,本文設(shè)計(jì)了一個(gè)基于汽車保險(xiǎn)經(jīng)紀(jì)基準(zhǔn)模型的Web 應(yīng)用中間件性能測試系統(tǒng),并在某國產(chǎn)品牌Web 應(yīng)用中間件上進(jìn)行了應(yīng)用驗(yàn)證,探索了在四組不同注入率下應(yīng)用服務(wù)器的系統(tǒng)性能。實(shí)驗(yàn)結(jié)果表明,該測試系統(tǒng)能夠?qū)崿F(xiàn)對(duì)國產(chǎn)Web 應(yīng)用中間件性能的評(píng)估,在一定程度上有效牽引了國產(chǎn)Web 應(yīng)用中間件產(chǎn)品質(zhì)量提升。