基于探针的Web服务运行时监控方法研究

2016-11-14 06:23熊达鹏1鹏1
装备学院学报 2016年5期
关键词:探针可靠性监控

陈 亮, 邹 鹏, 熊达鹏1,, 王 华, 王 鹏1,

(1. 装备学院 研究生管理大队, 北京 101416; 2. 装备学院 复杂电子系统仿真实验室, 北京 101416;3. 中国卫星海上测控部, 江苏 江阴 214431)



基于探针的Web服务运行时监控方法研究

陈亮1,3,邹鹏2,熊达鹏1,2,王华3,王鹏1,2

(1. 装备学院 研究生管理大队, 北京 101416;2. 装备学院 复杂电子系统仿真实验室, 北京 101416;3. 中国卫星海上测控部, 江苏 江阴 214431)

为了实时、准确地获取工作流服务及其构件服务的运行状态,提出了一种基于探针的Web服务运行时监测方法。该方法采用面向方面编程(AOP)技术对Web服务进行监测探针插入,以捕获Web服务运行过程中的异常事件和服务质量(QoS)属性相关数据,进而实现对Web服务运行状态的实时监测;针对异常、响应时间、可靠性以及可用性的监测需求分别设计和实现基于AOP的监测探针;在此基础上,基于开放服务网关协议(OSGI)框架设计实现了一个Web服务运行时监测与可视分析原型系统,并通过实验验证了方法的有效性和系统的可用性。

Web服务;监测探针;运行时监控;面向方面编程

随着Web服务被以电子商务为代表的现代企业所广泛应用,出现了越来越多的Web应用和服务,Web应用的组成也日趋复杂化。用户对服务质量的要求也越来越高,与此同时,服务提供商为了提高Web服务产品竞争力,不仅需要开发高质量的服务,而且需要及时获知已上线服务的运行状态。因为,服务提供商需要时刻为用户提供高质量的服务,一旦出现服务异常则会很大程度上影响用户的体验。服务提供者需要对Web服务的运行状态进行实时监控,以最快速度发现服务的异常情况并及时处理。因此,如何实时准确的监测Web服务的运行状态是服务保障的重要环节。

为满足Web服务运行时监控的实际应用需求,本文重点针对Web服务运行时监测的实时性和有效性问题进行研究。在尽量不影响运行性能的前提下,实现对Web服务运行状态的实时高效监测。

1 Web服务运行监测技术分析

当前学术界对于Web服务的监测技术已经进行了深入的研究。Web服务运行时监测主要包括运行状态监测和服务质量监测两大部分的内容:运行状态监测是通过对Web服务所在系统环境、运行状态等实时数据进行监测。Web服务运行时监控比较常见的工具有JConsole、JVisualVm、JProfiler等以Java虚拟机监控功能接口JVMPI为基础的监测工具[1]。Li等[2-3]设计了一种网络服务交互行为的运行时监测和验证框架,通过基于模式/约束的方法定义服务交互规范,监测网络服务的运行时交互行为。张献[4]提出了一个基于AOP的运行时监测器分类框架。该分类框架和类别检测算法有助于用户选择正确监测器和掌控监测器的使用方法。由于上述监测方法是从外部环境对服务状态进行监测,监测数据存在一定的延时。

对于Web服务的QoS属性监测,Kalepu等[5]提出了一种基于第三方监控的方法,通过独立于服务器和客户端之外的第三方进行QoS属性的监控,以确认服务提供商提供的服务质量是否与实际运行结果一致,但文中并没有给出相关QoS属性的具体监测方法和计算方法。Artaiam等[6]提出了一种基于协商机制的Web服务QoS属性监控策略。该方法尽管构建了多个QoS属性的计算模型,但对于如何采集与QoS属性相关的监控数据方法并未提及。

从上述研究中可以看出,对于Web服务运行数据的监测多数是采用被动监测的方式。这种方法的优点通常基于服务容器或编程语言的扩展来实现,对Web服务程序本身运行影响小;缺点是监测数据的实时性和针对性不强,监测速度对于异常处理的时效性有着至关重要影响,通过服务容器提取的Web服务异常信息和QoS属性信息通常在时间上都严重滞后。

为此,针对Web服务运行时监测实时性需求,本文提出了一种基于探针的Web服务运行时监控方法,通过在Web服务中插装基于AOP的探针实现对Web服务的异常和QoS属性实时监测。应用和实验证明了该方法能够实时高效进行Web服务的运行时监控。

2 基于AOP的Web服务运行监测探针

面向方面编程(AOP)是Kiczales等[7-8]于1997年在ECOOP(European Conference on Object Orientated Programming)大会上提出。AOP核心思想是通过对软件的“横切”,将与软件业务流程无关的其他辅助功能代码分离出来单独实现。业务流程程序包含的是软件功能实现的核心代码;而诸如授权、监控、安全等非业务功能的辅助程序则通过切面来实现。该方法最大的优势在于监控代码与核心代码分离,使得对Web服务运行性能的影响足够小,且易于实现。监测代码伴随核心代码运行,能够实时高效地捕获异常和运行状态信息,从而能够支持Web服务运行时的实时监测。

对Web服务QoS属性的监测采用基于事件触发的监测方法。通过探针在服务程序运行时对异常及QoS属性相关的事件进行捕获和记录,进而通过分析处理和量化计算得到Web服务的QoS属性值。QoS属性相关事件的捕获是通过在Web服务程序源代码上插入探针来实现。考虑到尽量减低对Web服务原程序的影响,探针的实现和插入采用AOP技术实现。

2.1异常监测探针

异常是指在Web服务程序执行过程中发生的非正常事件。通常Web服务程序设计时会对可能遇到的异常情况进行处理声明。服务器通过捕获服务执行过程中抛出的异常消息,进而才去响应的策略进行处理。对于Web 服务而言,比较常见的异常主要包括输出参数错误导致异常以及程序代码本身执行异常两大类。

对于基于Java语言开发的Web服务程序而言,Java虚拟机中已经对常见的Java程序执行异常类型进行了比较全面的整理,能够支持多数异常的捕获。考虑到Java程序的异常属于对象,并且在Web服务程序执行中被以对象的方式抛出,监测探针设计时可以考虑通过读取Java虚拟机捕获的异常来实现。但为了提高监测的响应速度,针对Java语言实现的Web服务设计源代码级监测探针:采用直接以主程序main()函数作为监测实施的切入点,设置AOP监测探针捕获主程序执行过程中抛出的异常。探针切面伪代码设计如下。

publicaspectexe.exception

{

pointcuttimeposttreat():execution(* *.main(..));

around(JoinPointjoinPoint):posttreat()

{

try{returnjoinPoint.proceed(); }

catch(Throwablee)

{

发送异常信号;

发送失效后恢复信号;

发送检测代理异常统计信号;

}

}

切面的通知函数采用around(),这样在整个服务程序执行的过程中,如果发生异常,探针将会捕获该异常,并启动通知部分的代码执行,向监测代理发送异常消息,失效恢复消息以及统计请求消息。

2.2服务响应时间监测探针

Web服务响应时间,指请求消息从服务请求端发出到响应消息被服务请求端接收过程中耗费的所有时间。只需要捕获客户端服务的请求开始时间和执行结束时间,通过计算2个时刻的差值即可获取服务运行时间。由于响应时间T主要包括服务运行时间Tprc和网络传输时间。网络传输时间又可以分为发送请求的传输时间Ttral和返回结果的传输时间Tres,其中Ttral可通过简单对象访问协议(SimpleObjectAccessProtocol,SOAP)消息的时间戳与服务端接收到请求的时间比较获得。在网络环境响度稳定的情况下Tres=Ttral,根据T=Ttral+Tprc+Tres可知,只需设计服务运行时间的监测探针获取运行时间Tprc,即可获得服务的响应时间。

采用基于事件的监测方法对服务程序的运行时间进行监测,与服务运行时间相关的事件是服务的执行开始时间和执行结束时间。因此,服务响应时间探针只需监测到这2个时间即可,故服务的运行时间监测探针切面伪代码设计如下。

publicaspecttime

{

pointcuttimemonitor():execution(* *.main(..));

before(JoinPointjoinPoint):timemonitor()

{

发送执行开始时间;

}

after(JoinPointjoinPoint)returning():timemonitor()

{

发送执行结束时间;

}

}

对于工作流服务运行时间的监测,如果采用上述探针则监测到的结果将明显偏小。以图1所示工作流服务执行时间监测为例,如果通过监测探针分别获取Web服务A~D的运行时间进而计算工作流服务的运行时间,则构建服务之间数据传输时间被忽略了,其计算值也会明显偏小。因此在处理工作流服务运行时间监测时,需要将整个流程服务作为一个整体,通过获取Web服务A的执行开始时间和Web服务D的执行结束时间作为工作流服务整体的执行开始和结束时间,进而计算服务执行时间。

图1 工作流服务执行时间监测示例

2.3服务可靠性监测探针

服务程序执行异常的概率是导致可靠性降低的主要原因,因此对可靠性的监测关键在于异常的监测。与可靠性相关的事件是异常和程序执行开始。可靠性监测探针切面中主要捕获服务程序执行异常和服务程序执行开始事件,可靠性监测代理设计,如图2所示。

当监测探针捕获到执行开始事件则通知监测代理执行计数器+1,调用计数器当前记录值记为服务总执行次数Nsum;当探针监测到异常时,则通知异常计数器+1,异常计数器当前记录值即为总服务响应失败次数Nexception,则可靠性值

(1)

图2 可靠性监测代理设计

可靠性是一个需要长期统计的QoS属性,只有服务被调用的次数达到一定量的时候才具有可信性。可靠性监测探针切面伪代码设计如下。

publicaspectreliability

{

pointcutexceptionmonitor():execution(* *.main(..));

before(JoinPointjoinPoint):timemonitor()

{ 发送调用统计信号;}

around(JoinPointjoinPoint):exceptionmonitor()

{

try{returnjoinPoint.proceed();}

catch(Throwablee)

{ 发送异常统计信号;

发送失效后恢复信号;}

}

after(JoinPointjoinPoint)returning():exceptionmonitor()

{发送恢复执行的状态;}

}

2.4可用性监测探针

可用性是指服务可被正常调用的时间比例。其值可通过计算公式TMTTF/(TMTTF+TMTTR)获取。

(2)

式中,i∈(1,2,…,n)表示第i次异常;R是失效恢复标记。平均恢复前时间TMTTF可根据下式计算

(3)

(4)

(5)

由此,对于可用性的监测只需记录每次异常发生的时间以及异常发生后下一次被正常调用的时间即可,故只需根据可靠性监测探针通知函数中异常信号时间,以及相应的下一次执行成功信号时间即可计算出有效时间和失效时间。可用性监测探针切面伪代码设计如下。

publicaspectavailability

{

pointcutexceptionmonitor():execution(* *.main(..));

around(JoinPointjoinPoint):exceptionmonitor()

{

try{returnjoinPoint.proceed();}

catch(Throwablee)

{发送异常产生的时间;

发送失效后恢复信号;}

}

after(JoinPointjoinPoint)returning():exceptionmonitor()

{发送恢复执行的服务状态;

发送执行结束时间; }

}

3 Web服务运行时监测与可视分析原型系统设计与实现

3.1系统框架及工作原理

为了实现Web服务运行状态的实时高效监测,本文设计实现了一个Web服务运行时监测与可视分析原型系统。该原型系统的功能模块设计如图3所示。系统主要包括6个功能模块。

图3 Web服务运行时监控与可视分析原型系统功能模块

监测代理:负责接收Web服务中AOP探针发出监控信息,主要模块包括异常信号接收器、异常信号计数器、服务执行记录器以及消息发送模块等。

监测属性计算模块:负责监测数据的计算和处理,从而获得异常信息及各个QoS属性的实时监测数据,并将这些数据发送给监测属性访问模块,当判断异常为故障时,将故障信息转发给故障通知模块。

监测属性访问模块:从监测属性计算模块接收实时监测数据和故障信息,并对其进行持久化存储。该模块以Web服务的形式部署在服务容器中,原型系统通过调用该模块来实时获取故障信息、QoS属性值以及监测属性历史数据。

可视化模块:负责Web服务运行状态和QoS属性的可视化展示。

故障通知模块:采用Javax中的邮件模块将Web服务执行过程中发生的故障信息通过邮件等方式发送给管理员,提供故障的及时汇报以及信息整理。

属性数据库:负责存储Web服务执行状态以及故障信息,包括每个服务的运行情况、流程服务的执行序列、故障信息以及监测属性数据等。

图4展示了工作流服务运行时,Web服务运行时监控与可视分析原型系统对其进行状态数据监控、采集以及可视化分析的过程。部署于工作流引擎上的工作流服务被调用时,引擎通过绑定具体的带探针Web服务对工作流服务完成实例化;Web服务运行时监测与可视化系统的监测代理模块接收探针发送的监测消息,然后提取相关数据,并分别转发给监测属性计算模块进行进一步的计算和处理;属性访问模块根据计算结果对日志数据库中的数据进行更新,并负责对属性数据库中数据访问的控制;可视化模块调用属性数据库中的QoS数据和异常信息进行可视化展示。

图4 Web服务运行时监控数据处理过程

3.2系统实现

考虑到Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,系统采用Java作为开发语言。监测代理、故障通知模块和监测属性计算模块均采用Java在OSGI框架下实现;监测属性访问模块利用Java数据库连接(Java Data Base Connectivity,JDBC)完成;属性数据库使用MySQL6.0实现。可视化模块采用eclipse+Vaadin6界面开发工具来完成Web界面开发。

此外,系统中的Web服务均是在Apache Axis2框架下开发,组合服务均由业务流程执行语言 (Business Process Excution Language,BPEL)编写,监测探针编写以及与Web服务源代码的编织都是基于Eclipese插件工具Spring AOP完成。Web服务部署在Tomcat7.0上运行,BPEL部署于Active-BPEL引擎上运行。

4 实验分析

4.1实验环境

本实验运行的硬件环境主要包括2个物理节点:服务器端和客户端。服务器与客户端的软硬件环境如表1所示。

软件环境方面,服务器端部署Tomcat6.10服务器,工作流引擎采用可与Tomcat集成的ActiveBPEL5.10,本节采用的实验案例中所有Web服务和流程服务均部署其上;Web服务运行时监控与可视分析原型系统同样部署在服务器端;客户端通过浏览器访问监测系统和服务器。

表1 测试环境软硬件配置

4.2实验过程及结果分析

实验以某商业信息综合平台上运行的Web服务为监测对象。该平台旨在整合各商业网站机构已有的商业信息和服务,提供统一的使用方式。平台基于面向服务体系结构(Service-Oriented Architecture,SOA)将所有的信息和交易过程封装成Web服务,信息的查询以及商品交易都以Web服务和工作流服务的方式完成。

4.2.1监测能力测试

基于探针的Web服务运行时监控与可视分析系统,被应用于监测某商业信息综合平台,实现了对该平台的有效监测。通过对原平台上的所有Web服务插入AOP监控探针,完成了服务改造,并将其重新部署到服务器,选取Edble_Oil_Service服务作为监测可视化能力验证对象,通过客户端浏览器访问监控与可视化平台对该服务的监控界面进行查看。图5给出了2015年12月17日Edble_Oil_Service服务运行时监测界面截图。

图6显示Edble_Oil_Service服务的平均响应时间并不十分稳定,对于组合服务而言,服务的平均运行时间是比较稳定的,但由于网络环境的不稳定性极易对服务的请求/响应传输时间造成影响,请求/响应传输时间的不稳定是造成服务平均响应时间波动的主要原因。

图5 某服务运行时监控截图

图6 Edble_Oil_Service服务平均响应时间监测结果

图7显示Edble_Oil_Service服务的可靠性监测结果,其可靠性指标值在10:12:17和12:13:35降低,其原因是在9:51:31和11:49:53发生了异常事件,如图5显示了2条服务故障通知。

图7 Edble_Oil_Service服务可靠性监测结果

图8显示Edble_Oil_Service服务的可用性监测结果,可用性指标值与可靠性指标值变化一致。由此可知在9:51:31和11:49:53发生的异常事件都造成了服务访问失败。

4.2.2性能影响测试

为了评估AOP探针插入对Web服务以及服务流程执行性能的影响,作者选取了核心代码计算量为103、104、105、106的4个Web 服务进行运行时间对比实验,分别将不带探针的Service_3、Service_4、Service_5、Service_6和与之对应的已编入探针的ServiceProbe_3、ServiceProbe_4、ServiceProbe_5、ServiceProbe_6,同时部署于同一个Tomcat服务器,分别对上述服务访问30次,计算其平均响应时间,结果对比如图9所示。

图9 探针对服务执行响应时间影响对比

由实验结果可知:首先,带探针服务的执行响应时间明显高于不带探针的服务,这表明探针的插入显然增加了Web服务的时间开销,对服务性能具有一定的影响,4组对比实验中探针的绝对平均时间开销分别为42.778 ms、45.881 ms、53.156 ms、53.669 ms,探针开销相对比较稳定,与服务核心码计算量大小不存在明显线性关系;其次,由于探针代码计算量稳定,随着核心代码计算成指数增加,其相对开销逐渐减小,从第一组相对开销量40.2%下降到第四组的1.87%;最后,基于探针的监测方法对于大型工作流服务而言,监测效率较高,针对性和适用性都很强;相反,对于小型服务而言,相对监测开销过大,对服务性能影响难以忽略,适用性也相对较低。

5 结 束 语

本文重点介绍了一种基于探针的Web服务运行时监测方法,该方法中首先针对Web服务运行时的主要QoS属性构建了量化模型;然后针对Web服务运行时的异常以及响应时间、可靠性、可用性3个QoS属性指标分别设计了基于AOP的Web服务监测探针,探针采用主动推送的方式实施监测,极大地提高了监测针对性和效率。设计和实现了一个Web服务运行时监控与可视分析系统。该系统能够支持Web服务运行时监测探针采集的监测数据处理和可视化展示,并且能够及时发现服务运行故障。实验中监测能力测试验证了原型系统和监测探针能够支持应用级Web服务系统监测,探针性能影响测试验证了AOP探针插入Web服务后性能影响在可接受范围之内。

References)

[1]高伟.可定制的Web监测系统的设计与实现[D].北京:北京邮电大学,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]张献.基于AOP的软件运行时验证关键技术研究[D].长沙:国防科学技术大学,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

国家级课题基金资助项目(2012AA012902)

陈亮(1987—),男,博士研究生,主要研究方向为信息网络安全。sky_8682@qq.com

TP319

2095-3828(2016)05-0100-07

A DOI10.3783/j.issn.2095-3828.2016.05.021

邹鹏,男,教授,博士生导师。

猜你喜欢
探针可靠性监控
The Great Barrier Reef shows coral comeback
基于无人机的监控系统设计
Xpert MTB/RIF对结核菌利福平耐药的诊断价值及rpoB基因突变特点的分析
合理使用及正确测试以提升DC/DC变换器可靠性
气液鼓泡床反应器中气泡行为光纤探针测量方法
GO-FLOW法在飞机EHA可靠性分析中的应用
5G通信中数据传输的可靠性分析
论如何提高电子自动化控制设备的可靠性
通过接触测试来提高探针痕迹的一致性
科学训练监控新趋势——适时监控