陳 亮, 鄒 鵬, 熊達(dá)鵬1,, 王 華, 王 鵬1,
(1. 裝備學(xué)院 研究生管理大隊(duì), 北京 101416; 2. 裝備學(xué)院 復(fù)雜電子系統(tǒng)仿真實(shí)驗(yàn)室, 北京 101416;3. 中國衛(wèi)星海上測控部, 江蘇 江陰 214431)
?
基于探針的Web服務(wù)運(yùn)行時監(jiān)控方法研究
陳亮1,3,鄒鵬2,熊達(dá)鵬1,2,王華3,王鵬1,2
(1. 裝備學(xué)院 研究生管理大隊(duì), 北京 101416;2. 裝備學(xué)院 復(fù)雜電子系統(tǒng)仿真實(shí)驗(yàn)室, 北京 101416;3. 中國衛(wèi)星海上測控部, 江蘇 江陰 214431)
為了實(shí)時、準(zhǔn)確地獲取工作流服務(wù)及其構(gòu)件服務(wù)的運(yùn)行狀態(tài),提出了一種基于探針的Web服務(wù)運(yùn)行時監(jiān)測方法。該方法采用面向方面編程(AOP)技術(shù)對Web服務(wù)進(jìn)行監(jiān)測探針插入,以捕獲Web服務(wù)運(yùn)行過程中的異常事件和服務(wù)質(zhì)量(QoS)屬性相關(guān)數(shù)據(jù),進(jìn)而實(shí)現(xiàn)對Web服務(wù)運(yùn)行狀態(tài)的實(shí)時監(jiān)測;針對異常、響應(yīng)時間、可靠性以及可用性的監(jiān)測需求分別設(shè)計和實(shí)現(xiàn)基于AOP的監(jiān)測探針;在此基礎(chǔ)上,基于開放服務(wù)網(wǎng)關(guān)協(xié)議(OSGI)框架設(shè)計實(shí)現(xiàn)了一個Web服務(wù)運(yùn)行時監(jiān)測與可視分析原型系統(tǒng),并通過實(shí)驗(yàn)驗(yàn)證了方法的有效性和系統(tǒng)的可用性。
Web服務(wù);監(jiān)測探針;運(yùn)行時監(jiān)控;面向方面編程
隨著Web服務(wù)被以電子商務(wù)為代表的現(xiàn)代企業(yè)所廣泛應(yīng)用,出現(xiàn)了越來越多的Web應(yīng)用和服務(wù),Web應(yīng)用的組成也日趨復(fù)雜化。用戶對服務(wù)質(zhì)量的要求也越來越高,與此同時,服務(wù)提供商為了提高Web服務(wù)產(chǎn)品競爭力,不僅需要開發(fā)高質(zhì)量的服務(wù),而且需要及時獲知已上線服務(wù)的運(yùn)行狀態(tài)。因?yàn)椋?wù)提供商需要時刻為用戶提供高質(zhì)量的服務(wù),一旦出現(xiàn)服務(wù)異常則會很大程度上影響用戶的體驗(yàn)。服務(wù)提供者需要對Web服務(wù)的運(yùn)行狀態(tài)進(jìn)行實(shí)時監(jiān)控,以最快速度發(fā)現(xiàn)服務(wù)的異常情況并及時處理。因此,如何實(shí)時準(zhǔn)確的監(jiān)測Web服務(wù)的運(yùn)行狀態(tài)是服務(wù)保障的重要環(huán)節(jié)。
為滿足Web服務(wù)運(yùn)行時監(jiān)控的實(shí)際應(yīng)用需求,本文重點(diǎn)針對Web服務(wù)運(yùn)行時監(jiān)測的實(shí)時性和有效性問題進(jìn)行研究。在盡量不影響運(yùn)行性能的前提下,實(shí)現(xiàn)對Web服務(wù)運(yùn)行狀態(tài)的實(shí)時高效監(jiān)測。
當(dāng)前學(xué)術(shù)界對于Web服務(wù)的監(jiān)測技術(shù)已經(jīng)進(jìn)行了深入的研究。Web服務(wù)運(yùn)行時監(jiān)測主要包括運(yùn)行狀態(tài)監(jiān)測和服務(wù)質(zhì)量監(jiān)測兩大部分的內(nèi)容:運(yùn)行狀態(tài)監(jiān)測是通過對Web服務(wù)所在系統(tǒng)環(huán)境、運(yùn)行狀態(tài)等實(shí)時數(shù)據(jù)進(jìn)行監(jiān)測。Web服務(wù)運(yùn)行時監(jiān)控比較常見的工具有JConsole、JVisualVm、JProfiler等以Java虛擬機(jī)監(jiān)控功能接口JVMPI為基礎(chǔ)的監(jiān)測工具[1]。Li等[2-3]設(shè)計了一種網(wǎng)絡(luò)服務(wù)交互行為的運(yùn)行時監(jiān)測和驗(yàn)證框架,通過基于模式/約束的方法定義服務(wù)交互規(guī)范,監(jiān)測網(wǎng)絡(luò)服務(wù)的運(yùn)行時交互行為。張獻(xiàn)[4]提出了一個基于AOP的運(yùn)行時監(jiān)測器分類框架。該分類框架和類別檢測算法有助于用戶選擇正確監(jiān)測器和掌控監(jiān)測器的使用方法。由于上述監(jiān)測方法是從外部環(huán)境對服務(wù)狀態(tài)進(jìn)行監(jiān)測,監(jiān)測數(shù)據(jù)存在一定的延時。
對于Web服務(wù)的QoS屬性監(jiān)測,Kalepu等[5]提出了一種基于第三方監(jiān)控的方法,通過獨(dú)立于服務(wù)器和客戶端之外的第三方進(jìn)行QoS屬性的監(jiān)控,以確認(rèn)服務(wù)提供商提供的服務(wù)質(zhì)量是否與實(shí)際運(yùn)行結(jié)果一致,但文中并沒有給出相關(guān)QoS屬性的具體監(jiān)測方法和計算方法。Artaiam等[6]提出了一種基于協(xié)商機(jī)制的Web服務(wù)QoS屬性監(jiān)控策略。該方法盡管構(gòu)建了多個QoS屬性的計算模型,但對于如何采集與QoS屬性相關(guān)的監(jiān)控數(shù)據(jù)方法并未提及。
從上述研究中可以看出,對于Web服務(wù)運(yùn)行數(shù)據(jù)的監(jiān)測多數(shù)是采用被動監(jiān)測的方式。這種方法的優(yōu)點(diǎn)通常基于服務(wù)容器或編程語言的擴(kuò)展來實(shí)現(xiàn),對Web服務(wù)程序本身運(yùn)行影響小;缺點(diǎn)是監(jiān)測數(shù)據(jù)的實(shí)時性和針對性不強(qiáng),監(jiān)測速度對于異常處理的時效性有著至關(guān)重要影響,通過服務(wù)容器提取的Web服務(wù)異常信息和QoS屬性信息通常在時間上都嚴(yán)重滯后。
為此,針對Web服務(wù)運(yùn)行時監(jiān)測實(shí)時性需求,本文提出了一種基于探針的Web服務(wù)運(yùn)行時監(jiān)控方法,通過在Web服務(wù)中插裝基于AOP的探針實(shí)現(xiàn)對Web服務(wù)的異常和QoS屬性實(shí)時監(jiān)測。應(yīng)用和實(shí)驗(yàn)證明了該方法能夠?qū)崟r高效進(jìn)行Web服務(wù)的運(yùn)行時監(jiān)控。
面向方面編程(AOP)是Kiczales等[7-8]于1997年在ECOOP(European Conference on Object Orientated Programming)大會上提出。AOP核心思想是通過對軟件的“橫切”,將與軟件業(yè)務(wù)流程無關(guān)的其他輔助功能代碼分離出來單獨(dú)實(shí)現(xiàn)。業(yè)務(wù)流程程序包含的是軟件功能實(shí)現(xiàn)的核心代碼;而諸如授權(quán)、監(jiān)控、安全等非業(yè)務(wù)功能的輔助程序則通過切面來實(shí)現(xiàn)。該方法最大的優(yōu)勢在于監(jiān)控代碼與核心代碼分離,使得對Web服務(wù)運(yùn)行性能的影響足夠小,且易于實(shí)現(xiàn)。監(jiān)測代碼伴隨核心代碼運(yùn)行,能夠?qū)崟r高效地捕獲異常和運(yùn)行狀態(tài)信息,從而能夠支持Web服務(wù)運(yùn)行時的實(shí)時監(jiān)測。
對Web服務(wù)QoS屬性的監(jiān)測采用基于事件觸發(fā)的監(jiān)測方法。通過探針在服務(wù)程序運(yùn)行時對異常及QoS屬性相關(guān)的事件進(jìn)行捕獲和記錄,進(jìn)而通過分析處理和量化計算得到Web服務(wù)的QoS屬性值。QoS屬性相關(guān)事件的捕獲是通過在Web服務(wù)程序源代碼上插入探針來實(shí)現(xiàn)。考慮到盡量減低對Web服務(wù)原程序的影響,探針的實(shí)現(xiàn)和插入采用AOP技術(shù)實(shí)現(xiàn)。
2.1異常監(jiān)測探針
異常是指在Web服務(wù)程序執(zhí)行過程中發(fā)生的非正常事件。通常Web服務(wù)程序設(shè)計時會對可能遇到的異常情況進(jìn)行處理聲明。服務(wù)器通過捕獲服務(wù)執(zhí)行過程中拋出的異常消息,進(jìn)而才去響應(yīng)的策略進(jìn)行處理。對于Web 服務(wù)而言,比較常見的異常主要包括輸出參數(shù)錯誤導(dǎo)致異常以及程序代碼本身執(zhí)行異常兩大類。
對于基于Java語言開發(fā)的Web服務(wù)程序而言,Java虛擬機(jī)中已經(jīng)對常見的Java程序執(zhí)行異常類型進(jìn)行了比較全面的整理,能夠支持多數(shù)異常的捕獲。考慮到Java程序的異常屬于對象,并且在Web服務(wù)程序執(zhí)行中被以對象的方式拋出,監(jiān)測探針設(shè)計時可以考慮通過讀取Java虛擬機(jī)捕獲的異常來實(shí)現(xiàn)。但為了提高監(jiān)測的響應(yīng)速度,針對Java語言實(shí)現(xiàn)的Web服務(wù)設(shè)計源代碼級監(jiān)測探針:采用直接以主程序main()函數(shù)作為監(jiān)測實(shí)施的切入點(diǎn),設(shè)置AOP監(jiān)測探針捕獲主程序執(zhí)行過程中拋出的異常。探針切面?zhèn)未a設(shè)計如下。
publicaspectexe.exception
{
pointcuttimeposttreat():execution(* *.main(..));
around(JoinPointjoinPoint):posttreat()
{
try{returnjoinPoint.proceed(); }
catch(Throwablee)
{
發(fā)送異常信號;
發(fā)送失效后恢復(fù)信號;
發(fā)送檢測代理異常統(tǒng)計信號;
}
}
切面的通知函數(shù)采用around(),這樣在整個服務(wù)程序執(zhí)行的過程中,如果發(fā)生異常,探針將會捕獲該異常,并啟動通知部分的代碼執(zhí)行,向監(jiān)測代理發(fā)送異常消息,失效恢復(fù)消息以及統(tǒng)計請求消息。
2.2服務(wù)響應(yīng)時間監(jiān)測探針
Web服務(wù)響應(yīng)時間,指請求消息從服務(wù)請求端發(fā)出到響應(yīng)消息被服務(wù)請求端接收過程中耗費(fèi)的所有時間。只需要捕獲客戶端服務(wù)的請求開始時間和執(zhí)行結(jié)束時間,通過計算2個時刻的差值即可獲取服務(wù)運(yùn)行時間。由于響應(yīng)時間T主要包括服務(wù)運(yùn)行時間Tprc和網(wǎng)絡(luò)傳輸時間。網(wǎng)絡(luò)傳輸時間又可以分為發(fā)送請求的傳輸時間Ttral和返回結(jié)果的傳輸時間Tres,其中Ttral可通過簡單對象訪問協(xié)議(SimpleObjectAccessProtocol,SOAP)消息的時間戳與服務(wù)端接收到請求的時間比較獲得。在網(wǎng)絡(luò)環(huán)境響度穩(wěn)定的情況下Tres=Ttral,根據(jù)T=Ttral+Tprc+Tres可知,只需設(shè)計服務(wù)運(yùn)行時間的監(jiān)測探針獲取運(yùn)行時間Tprc,即可獲得服務(wù)的響應(yīng)時間。
采用基于事件的監(jiān)測方法對服務(wù)程序的運(yùn)行時間進(jìn)行監(jiān)測,與服務(wù)運(yùn)行時間相關(guān)的事件是服務(wù)的執(zhí)行開始時間和執(zhí)行結(jié)束時間。因此,服務(wù)響應(yīng)時間探針只需監(jiān)測到這2個時間即可,故服務(wù)的運(yùn)行時間監(jiān)測探針切面?zhèn)未a設(shè)計如下。
publicaspecttime
{
pointcuttimemonitor():execution(* *.main(..));
before(JoinPointjoinPoint):timemonitor()
{
發(fā)送執(zhí)行開始時間;
}
after(JoinPointjoinPoint)returning():timemonitor()
{
發(fā)送執(zhí)行結(jié)束時間;
}
}
對于工作流服務(wù)運(yùn)行時間的監(jiān)測,如果采用上述探針則監(jiān)測到的結(jié)果將明顯偏小。以圖1所示工作流服務(wù)執(zhí)行時間監(jiān)測為例,如果通過監(jiān)測探針分別獲取Web服務(wù)A~D的運(yùn)行時間進(jìn)而計算工作流服務(wù)的運(yùn)行時間,則構(gòu)建服務(wù)之間數(shù)據(jù)傳輸時間被忽略了,其計算值也會明顯偏小。因此在處理工作流服務(wù)運(yùn)行時間監(jiān)測時,需要將整個流程服務(wù)作為一個整體,通過獲取Web服務(wù)A的執(zhí)行開始時間和Web服務(wù)D的執(zhí)行結(jié)束時間作為工作流服務(wù)整體的執(zhí)行開始和結(jié)束時間,進(jìn)而計算服務(wù)執(zhí)行時間。

圖1 工作流服務(wù)執(zhí)行時間監(jiān)測示例
2.3服務(wù)可靠性監(jiān)測探針
服務(wù)程序執(zhí)行異常的概率是導(dǎo)致可靠性降低的主要原因,因此對可靠性的監(jiān)測關(guān)鍵在于異常的監(jiān)測。與可靠性相關(guān)的事件是異常和程序執(zhí)行開始。可靠性監(jiān)測探針切面中主要捕獲服務(wù)程序執(zhí)行異常和服務(wù)程序執(zhí)行開始事件,可靠性監(jiān)測代理設(shè)計,如圖2所示。
當(dāng)監(jiān)測探針捕獲到執(zhí)行開始事件則通知監(jiān)測代理執(zhí)行計數(shù)器+1,調(diào)用計數(shù)器當(dāng)前記錄值記為服務(wù)總執(zhí)行次數(shù)Nsum;當(dāng)探針監(jiān)測到異常時,則通知異常計數(shù)器+1,異常計數(shù)器當(dāng)前記錄值即為總服務(wù)響應(yīng)失敗次數(shù)Nexception,則可靠性值
(1)

圖2 可靠性監(jiān)測代理設(shè)計
可靠性是一個需要長期統(tǒng)計的QoS屬性,只有服務(wù)被調(diào)用的次數(shù)達(dá)到一定量的時候才具有可信性。可靠性監(jiān)測探針切面?zhèn)未a設(shè)計如下。
publicaspectreliability
{
pointcutexceptionmonitor():execution(* *.main(..));
before(JoinPointjoinPoint):timemonitor()
{ 發(fā)送調(diào)用統(tǒng)計信號;}
around(JoinPointjoinPoint):exceptionmonitor()
{
try{returnjoinPoint.proceed();}
catch(Throwablee)
{ 發(fā)送異常統(tǒng)計信號;
發(fā)送失效后恢復(fù)信號;}
}
after(JoinPointjoinPoint)returning():exceptionmonitor()
{發(fā)送恢復(fù)執(zhí)行的狀態(tài);}
}
2.4可用性監(jiān)測探針
可用性是指服務(wù)可被正常調(diào)用的時間比例。其值可通過計算公式TMTTF/(TMTTF+TMTTR)獲取。

(2)
式中,i∈(1,2,…,n)表示第i次異常;R是失效恢復(fù)標(biāo)記。平均恢復(fù)前時間TMTTF可根據(jù)下式計算
(3)

(4)

(5)
由此,對于可用性的監(jiān)測只需記錄每次異常發(fā)生的時間以及異常發(fā)生后下一次被正常調(diào)用的時間即可,故只需根據(jù)可靠性監(jiān)測探針通知函數(shù)中異常信號時間,以及相應(yīng)的下一次執(zhí)行成功信號時間即可計算出有效時間和失效時間。可用性監(jiān)測探針切面?zhèn)未a設(shè)計如下。
publicaspectavailability
{
pointcutexceptionmonitor():execution(* *.main(..));
around(JoinPointjoinPoint):exceptionmonitor()
{
try{returnjoinPoint.proceed();}
catch(Throwablee)
{發(fā)送異常產(chǎn)生的時間;
發(fā)送失效后恢復(fù)信號;}
}
after(JoinPointjoinPoint)returning():exceptionmonitor()
{發(fā)送恢復(fù)執(zhí)行的服務(wù)狀態(tài);
發(fā)送執(zhí)行結(jié)束時間; }
}
3.1系統(tǒng)框架及工作原理
為了實(shí)現(xiàn)Web服務(wù)運(yùn)行狀態(tài)的實(shí)時高效監(jiān)測,本文設(shè)計實(shí)現(xiàn)了一個Web服務(wù)運(yùn)行時監(jiān)測與可視分析原型系統(tǒng)。該原型系統(tǒng)的功能模塊設(shè)計如圖3所示。系統(tǒng)主要包括6個功能模塊。

圖3 Web服務(wù)運(yùn)行時監(jiān)控與可視分析原型系統(tǒng)功能模塊
監(jiān)測代理:負(fù)責(zé)接收Web服務(wù)中AOP探針發(fā)出監(jiān)控信息,主要模塊包括異常信號接收器、異常信號計數(shù)器、服務(wù)執(zhí)行記錄器以及消息發(fā)送模塊等。
監(jiān)測屬性計算模塊:負(fù)責(zé)監(jiān)測數(shù)據(jù)的計算和處理,從而獲得異常信息及各個QoS屬性的實(shí)時監(jiān)測數(shù)據(jù),并將這些數(shù)據(jù)發(fā)送給監(jiān)測屬性訪問模塊,當(dāng)判斷異常為故障時,將故障信息轉(zhuǎn)發(fā)給故障通知模塊。
監(jiān)測屬性訪問模塊:從監(jiān)測屬性計算模塊接收實(shí)時監(jiān)測數(shù)據(jù)和故障信息,并對其進(jìn)行持久化存儲。該模塊以Web服務(wù)的形式部署在服務(wù)容器中,原型系統(tǒng)通過調(diào)用該模塊來實(shí)時獲取故障信息、QoS屬性值以及監(jiān)測屬性歷史數(shù)據(jù)。
可視化模塊:負(fù)責(zé)Web服務(wù)運(yùn)行狀態(tài)和QoS屬性的可視化展示。
故障通知模塊:采用Javax中的郵件模塊將Web服務(wù)執(zhí)行過程中發(fā)生的故障信息通過郵件等方式發(fā)送給管理員,提供故障的及時匯報以及信息整理。
屬性數(shù)據(jù)庫:負(fù)責(zé)存儲Web服務(wù)執(zhí)行狀態(tài)以及故障信息,包括每個服務(wù)的運(yùn)行情況、流程服務(wù)的執(zhí)行序列、故障信息以及監(jiān)測屬性數(shù)據(jù)等。
圖4展示了工作流服務(wù)運(yùn)行時,Web服務(wù)運(yùn)行時監(jiān)控與可視分析原型系統(tǒng)對其進(jìn)行狀態(tài)數(shù)據(jù)監(jiān)控、采集以及可視化分析的過程。部署于工作流引擎上的工作流服務(wù)被調(diào)用時,引擎通過綁定具體的帶探針Web服務(wù)對工作流服務(wù)完成實(shí)例化;Web服務(wù)運(yùn)行時監(jiān)測與可視化系統(tǒng)的監(jiān)測代理模塊接收探針發(fā)送的監(jiān)測消息,然后提取相關(guān)數(shù)據(jù),并分別轉(zhuǎn)發(fā)給監(jiān)測屬性計算模塊進(jìn)行進(jìn)一步的計算和處理;屬性訪問模塊根據(jù)計算結(jié)果對日志數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行更新,并負(fù)責(zé)對屬性數(shù)據(jù)庫中數(shù)據(jù)訪問的控制;可視化模塊調(diào)用屬性數(shù)據(jù)庫中的QoS數(shù)據(jù)和異常信息進(jìn)行可視化展示。

圖4 Web服務(wù)運(yùn)行時監(jiān)控數(shù)據(jù)處理過程
3.2系統(tǒng)實(shí)現(xiàn)
考慮到Java語言是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,系統(tǒng)采用Java作為開發(fā)語言。監(jiān)測代理、故障通知模塊和監(jiān)測屬性計算模塊均采用Java在OSGI框架下實(shí)現(xiàn);監(jiān)測屬性訪問模塊利用Java數(shù)據(jù)庫連接(Java Data Base Connectivity,JDBC)完成;屬性數(shù)據(jù)庫使用MySQL6.0實(shí)現(xiàn)。可視化模塊采用eclipse+Vaadin6界面開發(fā)工具來完成Web界面開發(fā)。
此外,系統(tǒng)中的Web服務(wù)均是在Apache Axis2框架下開發(fā),組合服務(wù)均由業(yè)務(wù)流程執(zhí)行語言 (Business Process Excution Language,BPEL)編寫,監(jiān)測探針編寫以及與Web服務(wù)源代碼的編織都是基于Eclipese插件工具Spring AOP完成。Web服務(wù)部署在Tomcat7.0上運(yùn)行,BPEL部署于Active-BPEL引擎上運(yùn)行。
4.1實(shí)驗(yàn)環(huán)境
本實(shí)驗(yàn)運(yùn)行的硬件環(huán)境主要包括2個物理節(jié)點(diǎn):服務(wù)器端和客戶端。服務(wù)器與客戶端的軟硬件環(huán)境如表1所示。
軟件環(huán)境方面,服務(wù)器端部署Tomcat6.10服務(wù)器,工作流引擎采用可與Tomcat集成的ActiveBPEL5.10,本節(jié)采用的實(shí)驗(yàn)案例中所有Web服務(wù)和流程服務(wù)均部署其上;Web服務(wù)運(yùn)行時監(jiān)控與可視分析原型系統(tǒng)同樣部署在服務(wù)器端;客戶端通過瀏覽器訪問監(jiān)測系統(tǒng)和服務(wù)器。

表1 測試環(huán)境軟硬件配置
4.2實(shí)驗(yàn)過程及結(jié)果分析
實(shí)驗(yàn)以某商業(yè)信息綜合平臺上運(yùn)行的Web服務(wù)為監(jiān)測對象。該平臺旨在整合各商業(yè)網(wǎng)站機(jī)構(gòu)已有的商業(yè)信息和服務(wù),提供統(tǒng)一的使用方式。平臺基于面向服務(wù)體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)將所有的信息和交易過程封裝成Web服務(wù),信息的查詢以及商品交易都以Web服務(wù)和工作流服務(wù)的方式完成。
4.2.1監(jiān)測能力測試
基于探針的Web服務(wù)運(yùn)行時監(jiān)控與可視分析系統(tǒng),被應(yīng)用于監(jiān)測某商業(yè)信息綜合平臺,實(shí)現(xiàn)了對該平臺的有效監(jiān)測。通過對原平臺上的所有Web服務(wù)插入AOP監(jiān)控探針,完成了服務(wù)改造,并將其重新部署到服務(wù)器,選取Edble_Oil_Service服務(wù)作為監(jiān)測可視化能力驗(yàn)證對象,通過客戶端瀏覽器訪問監(jiān)控與可視化平臺對該服務(wù)的監(jiān)控界面進(jìn)行查看。圖5給出了2015年12月17日Edble_Oil_Service服務(wù)運(yùn)行時監(jiān)測界面截圖。
圖6顯示Edble_Oil_Service服務(wù)的平均響應(yīng)時間并不十分穩(wěn)定,對于組合服務(wù)而言,服務(wù)的平均運(yùn)行時間是比較穩(wěn)定的,但由于網(wǎng)絡(luò)環(huán)境的不穩(wěn)定性極易對服務(wù)的請求/響應(yīng)傳輸時間造成影響,請求/響應(yīng)傳輸時間的不穩(wěn)定是造成服務(wù)平均響應(yīng)時間波動的主要原因。

圖5 某服務(wù)運(yùn)行時監(jiān)控截圖

圖6 Edble_Oil_Service服務(wù)平均響應(yīng)時間監(jiān)測結(jié)果
圖7顯示Edble_Oil_Service服務(wù)的可靠性監(jiān)測結(jié)果,其可靠性指標(biāo)值在10:12:17和12:13:35降低,其原因是在9:51:31和11:49:53發(fā)生了異常事件,如圖5顯示了2條服務(wù)故障通知。

圖7 Edble_Oil_Service服務(wù)可靠性監(jiān)測結(jié)果
圖8顯示Edble_Oil_Service服務(wù)的可用性監(jiān)測結(jié)果,可用性指標(biāo)值與可靠性指標(biāo)值變化一致。由此可知在9:51:31和11:49:53發(fā)生的異常事件都造成了服務(wù)訪問失敗。
4.2.2性能影響測試
為了評估AOP探針插入對Web服務(wù)以及服務(wù)流程執(zhí)行性能的影響,作者選取了核心代碼計算量為103、104、105、106的4個Web 服務(wù)進(jìn)行運(yùn)行時間對比實(shí)驗(yàn),分別將不帶探針的Service_3、Service_4、Service_5、Service_6和與之對應(yīng)的已編入探針的ServiceProbe_3、ServiceProbe_4、ServiceProbe_5、ServiceProbe_6,同時部署于同一個Tomcat服務(wù)器,分別對上述服務(wù)訪問30次,計算其平均響應(yīng)時間,結(jié)果對比如圖9所示。

圖9 探針對服務(wù)執(zhí)行響應(yīng)時間影響對比
由實(shí)驗(yàn)結(jié)果可知:首先,帶探針服務(wù)的執(zhí)行響應(yīng)時間明顯高于不帶探針的服務(wù),這表明探針的插入顯然增加了Web服務(wù)的時間開銷,對服務(wù)性能具有一定的影響,4組對比實(shí)驗(yàn)中探針的絕對平均時間開銷分別為42.778 ms、45.881 ms、53.156 ms、53.669 ms,探針開銷相對比較穩(wěn)定,與服務(wù)核心碼計算量大小不存在明顯線性關(guān)系;其次,由于探針代碼計算量穩(wěn)定,隨著核心代碼計算成指數(shù)增加,其相對開銷逐漸減小,從第一組相對開銷量40.2%下降到第四組的1.87%;最后,基于探針的監(jiān)測方法對于大型工作流服務(wù)而言,監(jiān)測效率較高,針對性和適用性都很強(qiáng);相反,對于小型服務(wù)而言,相對監(jiān)測開銷過大,對服務(wù)性能影響難以忽略,適用性也相對較低。
本文重點(diǎn)介紹了一種基于探針的Web服務(wù)運(yùn)行時監(jiān)測方法,該方法中首先針對Web服務(wù)運(yùn)行時的主要QoS屬性構(gòu)建了量化模型;然后針對Web服務(wù)運(yùn)行時的異常以及響應(yīng)時間、可靠性、可用性3個QoS屬性指標(biāo)分別設(shè)計了基于AOP的Web服務(wù)監(jiān)測探針,探針采用主動推送的方式實(shí)施監(jiān)測,極大地提高了監(jiān)測針對性和效率。設(shè)計和實(shí)現(xiàn)了一個Web服務(wù)運(yùn)行時監(jiān)控與可視分析系統(tǒng)。該系統(tǒng)能夠支持Web服務(wù)運(yùn)行時監(jiān)測探針采集的監(jiān)測數(shù)據(jù)處理和可視化展示,并且能夠及時發(fā)現(xiàn)服務(wù)運(yùn)行故障。實(shí)驗(yàn)中監(jiān)測能力測試驗(yàn)證了原型系統(tǒng)和監(jiān)測探針能夠支持應(yīng)用級Web服務(wù)系統(tǒng)監(jiān)測,探針性能影響測試驗(yàn)證了AOP探針插入Web服務(wù)后性能影響在可接受范圍之內(nèi)。
References)
[1]高偉.可定制的Web監(jiān)測系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2012:5-6.
[2]LI Z,HAN J,JIN Y.Pattern-based specification and validation of Web services interaction properties [C]//Service-Oriented Computing (ICSOC 2005).Amsterdam:Springer,2005:73-86.
[3]LI Z,JIN Y,HAN J.A runtime monitoring and validation framework for Web service Interactions[C]//In Proceedings of the 2006 Australian Software Engineering Conference (ASWEC 2006).Sydeny:IEEE,2006:70-79.
[4]張獻(xiàn).基于AOP的軟件運(yùn)行時驗(yàn)證關(guān)鍵技術(shù)研究[D].長沙:國防科學(xué)技術(shù)大學(xué),2012:76-85.
[5]KALEPU S,KRISHNASWAMY S,SENG W L .Verity:a Qos metric for selecting Web services and providers[C]//Proceedings of the Fourth International Conference on Web Information Systems Engineering Workshops.Roma:IEEE,2003:131-139.
[6]ARTAIAM N,SENVIONGSE T.Enhancing service-side QoS monitoring for Web service[C]//Ninth ACIS International Conference on Software Engineering,Networking,and Parallel/Distributed Computing.Washington D.C.:IEEE,2008:765-770.
[7]KICZALES G,LAMPIN J,MENDHEKAR A,et al.Aspect-oriented programming[C]//Proceedings of the 11th European Conference on Object-Oriented Programming,(ECOOP'97).Finland:Springer-Verlag,1997:220-242.
[8]KICZALES G,HILSDALE E,HUGUNIN J,et al.An overview of AspectJ[C]//Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP'O1).Hungary:Springer Verlag,2001:327-353.
(編輯:李江濤)
Web Service Run-time Monitoring Method Based on Probe
CHEN Liang1,3,ZOU Peng2,XIONG Dapeng1,2,WANG Hua3,WANG Peng1,2
(1. Department of Graduate Management, Equipment Academy, Beijing 101416, China;2. Complex Electronic System Simulation Laboratory, Equipment Academy, Beijing 101416, China;3. China Satellite Maritime Tracking and Control Department, Jiangyin Jiangsu 214431, China)
To know about accurate real-time operation status of the service of the work flow and its component services, this paper proposes a probe-based Web service run-time monitoring method. According to this method, by using aspect-oriented programming (AOP), the researcher can insert the monitoring probe for Web service to acquire data related to the properties of abnormal events and QoS of Web service during operation to realize the real-time monitoring on the operation status of Web service. Aiming at the monitoring demands related to abnormality, response time, reliability and availability, the paper designs and realizes AOP-based monitoring probes respectively; On this basis, based on the open service gateway protocol (OSGI) framework design, the paper implements a Web service runtime monitoring and visual analysis prototype system and then verifies the effectiveness of the method and the availability of the system.
Web service; monitoring probe; run-time monitoring; aspect-oriented programming
2016-06-05
國家級課題基金資助項(xiàng)目(2012AA012902)
陳亮(1987—),男,博士研究生,主要研究方向?yàn)樾畔⒕W(wǎng)絡(luò)安全。sky_8682@qq.com
TP319
2095-3828(2016)05-0100-07
A DOI10.3783/j.issn.2095-3828.2016.05.021
鄒鵬,男,教授,博士生導(dǎo)師。