基于WEB的实时监控系统的研究与实现 2011-11 《电信工程技术与标准化》
耿方1,2 朱晓民1,2 李炜1,2
(1. 北京邮电大学网络与交换技术国家重点实验室 北京100876;
2. 东信北邮信息技术有限公司 北京100191)
摘要:采用基于DWR(Direct Web Remoting)中的反向Ajax(Asynchronous JavaScript and XML)技术的服务器推送结合JMX(Java Management Extensions)的notification模型开发了基于Web的监控系统,在移动开放平台鉴权系统的Web监控系统中实现实时监控功能,取得了良好的实时效果,并有效减少了网络通信成本。
关键词:DWR,反向Ajax,服务器推送, JMX
Research and Implementation of Web based real-time monitoring system
Geng Fang1,2 Zhu Xiaomin1,2 Li Wei1,2
(1. State Key Lab of Networking and Switching Technology, Beijing University of Posts and Telecommunications, Beijing 100876;
2. EBUPT Information Technology Co. Ltd., Beijing 100191)
【Abstract】This article use the reverse Ajax technology in DWR(Direct Web Remoting) and notification model in JMX(Java Management Extensions) to develop the Web based real-time monitoring system. The achievement has been used in the OMP(Open Mobile-internet Platform) to implement B/S architecture monitoring system. It achieve the real-time goal and make great network communication cost reduction.
【Key words】DWR, Reverse Ajax, Web Push, Comet, JMX
1. 引言
目前,B/S架构的管理系统以其部署简单,升级方便等优点得到了广泛的应用,监控系统从C/S架构向B/S架构演进是发展趋势。用Web的形式进行监控,可以使管理员在各种终端实现监控,只需要安装浏览器而不必安装特定的客户端,减轻了监控系统的维护成本。
由于HTTP(Hyper Text Transfer Protocol)协议的无状态无链接特点,传统的基于Web的应用只能通过用户的操作触发浏览器从服务器获取页面数据,继而刷新浏览器端整张页面。不能仅仅获取实时数据,局部刷新页面的呈现,且服务器不能将发生变化的数据实时传送到浏览器端。Ajax(Asynchronous JavaScript and XML)技术引入了异步交互数据的方式,实现了局部页面的动态刷新。DWR(Direct Web Remoting)是一个Ajax的框架,在其最新版本中引入了反向Ajax的功能,使得服务器向浏览器实时发送监控数据成为可能。
JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架,可以在Java 应用程序中使用JMX框架实现管理。JMX 定义了一种基于Java事件模型的通知机制,可以方便的实现对资源的监控。采用DWR框架,结合JMX的通知机制,实现基于Web的监控系统,可以较好的满足监控实时性需求。
2. 技术背景
2.1. DWR介绍
DWR是位于服务器端的开源Ajax框架。DWR允许将定义在服务器端的对象上的方法直接暴露给Ajax请求,从而可以直接调用服务器上的遵循了Ajax原则的Servlet并获取处理结果。
DWR主要包括两部分:客户端的JavaScript,可以直接调用远程Java方法,并根据远程方法的返回值动态更新页面内容;服务器上运行的 Servlet,处理请求并把结果返回客户端的JavaScript代码。
其基本原理是:DWR负责在Web页面中动态生成存根函数,对应于服务端Java类暴露的方法。存根函数封装了客户端的JavaScript代码与服务端Java组件进行数据交换的过程,通过XMLHttpRequest将请求发送到服务端的DWR servlet,DWR servlet将请求翻译成服务器端Java对象上的方法调用并把方法的返回值放在Servlet响应中发送回客户端的JavaScript代码。
DWR 2.0中包含的反向Ajax技术突破了基于HTTP协议的Request/Response模式,使浏览器能够实时获取服务端更新的数据,对基于Web的监控系统的实时性要求提供了支持。
DWR中提供了三种可选技术方案:
1、Polling定时轮询,浏览器定时地发送请求到服务器看是否有更新。
2、Comet又叫长轮询(Long Polling),服务器收到一个请求时时并不立即发送响应,而是会阻塞请求、维持一个长连接直到有数据传递或超时才返回。客户端JavaScript响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。这种方法使得客户端可以立即获取服务器的更新。从用户体验来看,完全是服务器实时的在向浏览器推送数据。
3、Piggyback捎带技术,即服务器有数据要更新时,等待浏览器的下一次请求,把响应和更新的数据一并返回。
其中,Polling只能算作伪实时,实时的效果取决于定时的间隙,且定时轮询的方式需要大量的网络数据传输为基础,造成了网络带宽的浪费。Piggyback方式在监控系统的应用中对于用户体验没有改善,数据的更新速度依然取决于浏览器刷新的速度。Comet技术基于长连接,可以实现服务端数据的实时推送,且没有额外的通信需要,节省网络带宽;不足之处在于长时间占用连接资源,对服务器压力大且丧失了HTTP的无状态高并发特点[1]。
2.2. JMX技术
JMX是一种应用编程接口,可扩充对象和方法的集合体,可用于跨越一系列不同的异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用,它提供了用户界面指导、Java类和开发集成系统、网络及网络管理应用的规范[2]。
目前JMX管理体系结构基本可以划分为以下三个层次:
Instrumentation level,提出了实现JMX可管理资源的规范,这些资源可以是 Java应用、服务实现、设施等,它们是通过一个或多个MBean来实现。
Agent Level,JMX Agent是管理服务的实体,运行在JVM上起着连接管理应用和MBean的桥梁作用。它直接控制被管理资源,使其可用于远程管理。
Manager Level,提供了管理组件的实现,它可以作为管理者或管理代理通过Agent层操纵分布式管理服务[3]。
MBean的管理接口允许MBean Server在其管理的对象上执行配置和管理的操作,然而这些接口一般只定义了管理一个复杂的分布式系统所必需功能的一部分,更多的时候管理应用需要对一个状态的改变或者一个特定的条件进行响应。这种情况下,使用Notification机制对管理接口进行灵活的扩展,通过广播接口广播管理事件,使得管理应用可以很及时的被管理对象的状态或属性的改变。
管理服务中的通知机制Notification建立在 Java 事件模式的基础之上,需要发送的广播MBean或 MBean Sever实现Broadcaster接口,而管理应用或其它管理对象作为接收者实现 Listener接口。同时,接收者通过设置过滤器NotificationFilter 可以屏蔽掉那些不感兴趣的管理事件,提高系统处理管理事件的效率。Notification机制使得一个Listener只需注册一次就可以接收Broadcaster中发生的所有不同类型的事件[4]。
3. 设计和实现
完整的监控系统需要考虑的特性包括可靠性,安全性,实时性,易用性等。限于篇幅暂不考虑安全性的要求。实时性即监控系统对信息的传输要及时,不能有过大的延时,否则难以及时跟踪被监控对象的当前状况。如果监控系统的实时性得不到保障,现场监控就失去了实用价值[5]。
监控系统的基本功能主要包括:数据的实时采集、数据的处理和分析、数据的传送和显示。
3.1. 总体设计
如图 1,监控系统由资源监视器、连接器、Web服务器和浏览器四部分构成:资源监视器负责实时采集数据,并进行初步的处理和过滤,然后通过基于RMI(Remote Method Invocation)的JMX通知机制发送到Web服务器。Web服务器端对数据进行储存和处理,并根据需要通过DWR服务端发送到运行在浏览器中的DWR客户端,通过调用网页中的JavaScript脚本实现更新页面,反映监控结果的效果。
图 1 监控系统结构图
其中,连接器(Connector)包含客户端连接器(connector client)和服务器连接器(connector server)。服务器连接器连接MBean Server并监听客户端的连接请求。客户端连接器任务是查找服务器连接器并建立连接。MX Remote API 定义了标准的连接器 RMI Connector,它通过RMI提供了对MBean Server的远程访问[6]。使用RMI将客户端请求传输到远程MBean服务器。client 和server通常在不同机器的不同虚拟机中。在这里,通过连接器将资源监视器和Web服务端连接起来。
3.1.1. 资源监视器
资源MBean,代表一个被监控的实例,在MBean接口中定义需要暴露的属性和其访问方法,然后在具体的资源类中实现该接口。
监视器代理,创建MBean Server和Connector Server,并注册资源MBean和相应的Monitor监视器,设置Monitor监视器参数。监视器(Monitor)服务将代价高昂的远程轮询操作转换成本地操作;根据预先设定的参数监控资源MBean的属性,并在必要时将MBean属性情况用JMX的通知机制通知Web服务器端运行的监听器。
3.1.2. Web服务器端
在web.xml中配置启动时执行初始化servlet,执行连接器初始化和在服务端JMX server中注册监听器的任务。
监听器(Listener),负责接收监视器发送的通知,对信息进行处理和分类,然后调用DWR的服务器端的相应方法。
DWR的服务器端运行在Web服务器中,接收到来自Listener的更新消息后,通过服务器推送技术推送到对应的运行在浏览器中的DWR客户端,调用网页中的JavaScript函数,更改网页中相应参数的值,从而达到更新监控值的目的。
1) 服务端DWR配置
为使用DWR,需要在/WEB-INF/web.xml中配置DWR Servlet,并设定请求URL地址,同时通过设置参数activeReverseAjaxEnabled为true来启用反向Ajax。
2) DWR服务端Java Bean
负责调用浏览器中的客户端函数,更新网页显示数据。
3) 配置JavaBean到DWR
使用DWR的配置文件/WEB-INF/dwr.xml,将JavaBean引入到DWR框架中,通过JavaBean调用网页中的JavaScript方法,或者通过JavaScript直接调用JavaBean的监测方法,方便从客户端配置JavaBean。
3.1.3. DWR客户端
客户端以网页形式在浏览器中运行。使用DWR代码库,用JavaScript函数操作DOM实现监控Web页面的数据显示。
1) 设置DWR
引入DWR代码库并在加载时运行代码中启用DWR反向Ajax。
2) 定义监控数据
在监控页面上使用div元素定义DWR反向Ajax推送数据的显示位置。
3) 调用JavaScript方法
服务器端实时监测数据并以方法调用方式推送到客户端,客户端JavaScript方法更新相关DOM元素值。通过在客户端的JavaScript方法实现页面数据更新主要是为了将页面的复杂性隔离在DWR服务端代码之外。
3.2. 测试分析
设计如下实验测试监控系统的实时性[6]:将资源监视器,Web服务器,监控客户端分别部署在局域网内的三台主机上,首先对三台主机进行时间同步,通过在数据经过的三个节点处打时间戳的方式计算延时(以毫秒为单位),经过对不同数据变动间隔,资源监视器扫描频度的测试,得到图 2所示数据:横轴表示多次测量,纵轴表示测量的时延(单位:ms),黑色柱表示数据从资源监视器到web服务器的时延,白色柱表示数据从web服务器到浏览器的时延。
图 2 监控数据传输时延对比图
从新数据产生到浏览器接收到数据更新通知所产生的时间间隔主要分布在10ms-40ms之间,平均为36ms;主要的时延在Web服务器到浏览器之间,平均31ms。时延差异主要原因在于RMI和HTTP的性能差异,RMI在响应时间和资源利用率等方面均优于HTTP[7]。
4. 总结
本文所设计的基于Web的监控系统满足实时性要求,能够支持监控参数的灵活配置。且在很大程度上减少了过量的网络流量,减少了网络带宽损耗。系统很多方面还不够完善,可以从网络I/O和Web服务器对大量长连接的支持方向优化。在B/S架构流行的趋势下,本文为监控系统的Web化提供了参考价值。
参考文献:
[1] 孙巧云,基于DWR开发Reverse Ajax应用,2007通信理论与技术新发展——第十二届全国青年通信学术会议论文集(上册),2007年,P432-436
[2] BEN G. SULLINS, MARK B. WHIPPLE, JMX in action, Manning Publications Co., 2002年10月
[3] 文震,洪玫,李群慧,JMX技术在网络监控中的应用,计算机应用研究,2004年21卷第7期,P220-224
[4] 晏雪松,基于JMX的监控系统研究与实现,西南交通大学硕士学位论文,2007年01月
[5] 何胜锋,李云春,李巍,面向分布式应用网管系统的研究与实现,计算机与数字工程,2005年33卷第9期,P4-6
[6] 刘海鹏,廖建新,朱晓民,PoC中一种负载均衡与时延优化的RTP媒体流转发机制,通信学报,2010年31卷第8期,P105-113
[7] 张弩云,李军国,黄罡,一种互操作协议性能评估方法,电子学报,2006年34卷12A期,P2355-2359
* 基金项目:国家自然科学基金(No. 61072057,60902051);国家973计划项目(No. 2012CB315802); 中央高校基本科研业务费专项资金(BUPT2009RC0505);国家科技重大专项( No. 2011ZX03002-001-01,移动互联网总体架构研究)。