南宁供电局J2EE应用服务中间件监控系统的设计与实现
2013-09-29吴一鸣田永涛
吴一鸣,田永涛
(南宁供电局信息中心 南宁 530031)
1 引言
J2EE(Java 2 platform enterprise edition)作为当前主流的Web服务架构,广泛应用于电力行业的各个信息系统中。南宁供电局内,包括生产MIS(management information system,管理信息系统)和营销MIS等多个信息系统都采取了J2EE架构。
在J2EE架构中,应用服务中间件作为应用服务程序(服务器程序)的容器,是用户业务请求和应用服务程序服务处理的中继以及桥梁。一方面,应用服务中间件接收用户请求并屏蔽浏览器之间的请求差异;另一方面,应用服务中间件将应用服务程序请求处理结果响应请求客户端。应用服务中间件是J2EE信息系统正常工作的保证。常见的 J2EE 应用服务中间件包括:Tomcat、WebLogic、JBoss和WebSphere 等[1]。
正是由于应用服务中间件在信息系统中的关键位置,当应用服务中间件出现内存溢出、进程僵死类似异常情况时,轻则服务器超时响应用户请求,重则信息系统崩溃无法访问,均会导致系统服务异常,影响用户工作。
应用服务中间件监控是电力行业信息工作人员日常系统运维的重要任务。在实际工作中,采用人为方式监控信息系统应用服务中间件运行状况既不现实也不可靠,以系统级别的自动化程序监控应用服务中间件是最好的解决方式。南宁供电局信息中心针对J2EE架构的应用服务中间件自主设计并实现了监控系统,并在南宁供电局生产MIS中成功应用该监控系统。
2 系统简介
南宁供电局生产MIS架构体系可以分为4个层次,如图1所示。从上至下依次为负载均衡器、应用服务中间件、应用服务程序和系统数据库。负载均衡器是整个系统的对外接口,用户在以太网内发起服务请求,到达负载均衡器,负载均衡器根据指定算法,将用户请求分流至应用服务中间件。应用服务程序是用户请求的处理单元,处理用户请求并生成响应结果。系统数据库位于数据持久层,提供数据服务。
图1 生产MIS结构
南宁供电局生产MIS采用的J2EE应用服务中间件是Tomcat,Tomcat对于其运行载体的计算机物理内存并非全数使用,为了充分利用服务器计算机的物理内存资源,生产MIS里采用的是Tomcat集群模式,即同一台服务器计算机上开启多个Tomcat应用服务中间件,提供无差别的系统服务。
南宁供电局监控系统的监控对象是生产MIS的应用服务中间件,获取应用服务中间件的各种实时运行参数,根据参数判断健康状态或警戒状态,在此基础上延伸高级应用。
在生产MIS新的架构体系中,监控系统位于负载均衡器与应用服务中间件之间:监控系统对下层应用服务中间件实时监控,对其上层负载均衡器提供接口,反馈应用服务中间件运行状态,以便负载均衡器优化分流用户请求。监控系统亦可以作为生产MIS对外接口,凭借其收集整理的应用服务中间件运行状态数据,导流以太网用户服务请求,集成负载均衡功能。生产MIS集成监控系统结构如图2所示。
图2 生产MIS集成监控系统结构
3 南宁供电局J2EE应用服务中间件监控系统设计
根据软件设计中功能聚合的原则,本次南宁供电局开发的J2EE应用服务中间件监控系统采取的是模块化模式,如图3所示。整个系统从总体上划分为:监控数据采集模块、监控数据处理模块、监控数据展示模块、监控控制模块、应用服务中间件控制模块、对外接口模块以及系统基础类库模块。
图3 应用服务中间件监控系统结构模块
各个模块功能说明如下。
监控数据采集模块:此模块是整个系统的核心,采集模块获取到监控目标应用服务中间件的实时运行状态数据是监控系统运行的基础。通过对采集监控的数据分析以及处理,系统做出正确的响应。
监控数据处理模块:此模块对监控数据结构化处理,并实现监控数据持久化。在此模块数据处理成果之上,可以实现应用服务中间件运行状态统计分析,进而实现中间件运行状态趋势预测以及对策预防等高级功能。
监控数据展示模块:电力信息工作运维人员通过此模块可以实时了解应用服务中间件的运行状态。展示模块是监控数据采集模块的“显示器”。
监控控制模块:运维人员人机操作的接口,操作人员通过控制模块将预设指令输入系统,完成各种系统功能。
应用服务中间件控制模块:系统通过此模块控制应用服务中间件,可对应用服务中间件实现启动、终止或者重启操作。
对外接口模块:为第三方程序提供特定格式的应用服务中间件运行状态数据,在南宁供电局生产MIS中,负载均衡器可以接收监控系统的监控反馈,以实时更新分流策略。
系统基础类库模块:包括网络接口类、系统日志类、信息封装解析类等供系统其他模块直接调用的类库。
通过对各个模块功能分析可以看出,监控数据采集模块是整体系统开发的重点,是系统运行的数据之源,是系统功能实现的基础。南宁供电局J2EE应用服务中间件监控系统开发小组将此模块设为重点攻关对象。
4 南宁供电局J2EE应用服务中间件监控系统实现
4.1 监控数据采集模块实现
监控数据采集模块的开发采用JMX(Java management extensions,Java管理扩展)技术。JMX是一个为Java应用程序、Java设备、Java系统等植入管理功能的框架,JMX中定义了Java进程管理的体系结构、监控模式和应用程序接口以及服务。Tomcat中间件基于J2EE标准,其本身集成了JMX框架,使用JMX技术可以实现对J2EE应用服务中间件运行状态数据的实时采集[2]。
JMX框架本身定义了一系列进程监控数据交互的接口,监控程序接入应用服务中间件内置JMX框架的监控服务端,以此形成监控数据传输通道,在通道内传输符合JMX框架定义格式的应用服务中间件运行状态数据。由此可见,JMX框架可以看成一系列协议的集合,包括基于TCP/IP的网络连接协议以及传输消息格式协议,JMX技术的体现就在于以JMX框架协议交互。
南宁供电局J2EE应用服务中间件监控系统开发小组经过对JMX框架的深入研究,了解了其中的监控连接和数据传输的细节,解析出网络连接以及传输消息格式的协议规范,将JMX框架的网络连接协议和传输消息格式协议以类的方式在系统基础类库模块中实现。监控数据采集模块通过实例化这两个基于JMX框架的类,调用类的方法,实时获取到应用服务中间件的运行状态数据。
通过JMX技术,开发小组实现了对单个应用服务中间件运行状态的监控,但是在实际应用中,南宁供电局生产MIS采用的是应用服务中间件集群。为了使一对一的JMX技术扩展为一对多的应用来应对现实的应用场景,开发小组采取了线程池技术。监控线程池工作如图4所示。
图4 监控线程池工作
作为监控系统的子进程,监控数据采集模块进程启动后,等待来自监控控制模块进程的系统指令。当采集模块收到指向某个具体应用服务中间件的监控指令后,通过工厂模式,从应用JMX技术的线程池中新建一个线程,以监控指令中解析出的参数实例化该线程,线程开始对指定应用服务中间件的监控服务端以JMX框架网络连接协议发起监控请求,应用服务中间件响应了监控请求后,JMX框架网络连接通道建立,应用服务中间件持续通过JMX框架网络通道发送以JMX框架传输消息格式封装的运行状态数据,期间如果双方的JMX框架网络连接异常,则监控线程保持对指定应用服务中间件发送监控请求,直至采集模块收到停止对指定应用服务中间件监控指令,采集模块释放该监控线程[3]。采取线程池技术保证了线程工厂及时生成和回收监控线程,监控线程之间并发运行互不影响之间的监控功能,线程池技术实现了监控数据采集模块一对多个应用服务中间件监控,监控数据采集模块功能开发完成。
以下是监控数据采集模块的3个监控线程在同一时间获取到的Tomcat中间件运行状态数据:
maxMemory:1398145024;
commitMemory:91029504;
usedMemory:33862408;
heap:37.19937658893539%;
maxMemory:1398145024;
commitMemory:102563840;
usedMemory:42737488;
heap:41.66915747304313%;
nonheap:175.77420874747304%;
nonheap:139.27205952029988%;
maxMemory:1398145024;
commitMemory:153288704;
usedMemory:76276240;
heap:49.759857060308896%;
nonheap:313.71510960663744%。
4.2 监控数据处理模块实现
监控数据处理模块的功能主要有两个:一是处理原始应用服务中间件监控数据,写入系统数据库;二是从系统数据库中读出历史监控数据,加以处理以实现高级统计功能。
从监控数据采集模块获取到的应用服务中间件运行状态数据,在监控数据处理模块汇聚,数据处理模块按照监控系统数据库表单定义字段,将监控汇聚数据生成结构化的运行状态记录,应用JDBC(Java database connectivity)技术写入指定的系统数据库(SQL Server 2005)表单,实现监控数据持久化。
数据是重要的资源,通过对监控数据的分析,可以得出许多有用的结论,作为判断决策的依据。监控数据处理模块的另一个功能是从系统数据库中应用JDBC技术抽取出记录数据,作为高级统计应用的输入,经过高级统计处理后,可以得出中间件运行状态趋势预测以及预防对策等有效信息。
南宁供电局生产MIS中,某Tomcat应用节点某一时段堆内存使用率数据,见表1。
表1 Tomcat应用节点堆内存使用情况
4.3 监控数据展示模块实现
监控数据展示模块是监控系统向系统用户传输应用服务中间件运行监控数据的单工通道,模块采用图形化技术直观地显示各类监控信息,以便系统用户实时了解应用服务中间件运行状态以采取正确的应对措施[4],如图5所示。
4.4 监控控制模块实现
监控控制模块是监控系统人机交互的接口,系统管理员通过控制模块向监控系统发送预设的系统指令,系统收到指令后,解析指令以及指令参数,执行系统管理员指令,并将指令执行结果通过监控模块反馈系统管理员,完成一次人机交互。
在监控控制模块中,预设系统指令采用的是带参数的命令行模式,即指令字符串后拼接参数名和参数值。
新建监控线程指令:new-a 127.0.0.1-p 10091-dba 127.0.0.1-dbp 20000。
监控系统解析指令类型和指令参数后,指令执行处理通过函数形式实现,函数形式保证了系统指令执行处理的可拓展性。
4.5 应用服务中间件控制模块实现
监控系统通过此模块远程控制应用服务中间件,远程控制操作类型当前主要有启动、终止和重启3种。启动操作实现的原理是,调用Tomcat批处理启动文件startup.bat;终止操作实现的原理是通过Tomcat监听端口号查询出该Tomcat进程的ID号,调用Windows操作系统命令taskkill终止该进程ID号的Tomcat;重启操作实现是将Tomcat调用终止操作后,再调用启动操作。
4.6 对外接口模块实现
图5 监控数据展示模块
对外接口模块取决于对外接口系统,针对不同的接口系统,监控系统的对外接口模块亦有相应变化。在南宁供电局生产MIS中,对外接口系统是Radware负载均衡器,监控系统与Radware交互,实时更新应用服务中间件Tomcat集群中可用单体信息,保证Radware的分流服务均指向可用的Tomcat[5]。
Radware与监控系统交互如图6所示。Radware接口机制的实现是基于TCP/IP自定义网络传输协议交互:对于一个Tomcat,Radware系统中可设定一个 IP地址、TCP端口和时间间隔作为接口属性,Radware向指定IP地址的指定TCP端口以一定的时间间隔发送“detect”消息,监控系统中该Tomcat运行状态正常时,对外接口模块向 Radware回发“succeed”消息,如果该 Tomcat运行状态非正常时,对外接口模块回发“failed”消息,网络传输交互完成。
5 结束语
5.1 系统开发小结
南宁供电局J2EE应用服务中间件监控系统开发完成后,在技术上实现了以下几点突破。
·深度了解了J2EE应用服务中间件运行机制以及技术体系,应用JMX技术实现对J2EE应用服务中间件运行参数数据监控,实时掌握J2EE应用服务中间件运行状态。
图6 Radware与监控系统交互
·监控系统内模块功能划分清晰合理,模块间高聚合、低耦合,体现了 MVC(model,view,controller)模式软件设计典范。
·监控系统对外接口设计规范、兼容性强,系统间数据流转通畅,数据共享程度高。在监控系统基础上与其他系统灵活集成,功能对接。
·实现了系统级别的自动化程序监控,以信息化的方
式提升供电企业的信息运维水平。
5.2 系统展望
南宁供电局J2EE应用服务中间件监控系统,在技术上仍有以下拓展空间。
·数据加密。无论是通信传输中的数据,还是持久层存储数据,都需做到数据加密,确保数据安全。
·趋势分析。针对系统获取到的大量J2EE应用服务中间件运行数据统计分析,进而实现中间件运行状态趋势预测以及对策预防等高级功能。
·机器学习智能故障处理。应用机器学习技术,对故障处理操作建模,分析每次故障处理控制信息,操作目标参数回归,最终实现自动故障处理。
1 高张,康小军.提高Tomcat服务器运行性能的研究.计算机与数字工程,2008(10):153~154
2 孙仁鹏,何淼.Tomcat性能监视和调优研究.软件导论,2012(12):56~59
3 林泊,周明辉,刘天成等.一个J2EE应用服务器的Web容器集成框架.软件学报,2006(5):26~28
4 田珂,谢世波,方马.J2EE数据持久层的解决方案.计算机工程,2003(22):102~103
5 窦蕾,袁臻,刘冬梅.基于构件的中间件技术J2EE.计算机科学,2004(6):98~102