高速公路机电设备运维数据采集系统

高速公路机电设备运维数据采集系统

摘要:随着广西高速公路的快速发展,高速公路上的机电设备的安装数量大幅增长,依赖传统人工方法对机电设备巡检、维护已显得力不从心,因此迫切需要构建高速公路机电运维管理系统对高速公路上的机电设备进行智能化管理。而该系统的机电设备数据分析、设备告警等功能依赖于数据采集系统,所以构建一套稳定、可扩展性强的高速公路机电设备运维数据采集系统尤为重要。文章阐述了如何应用Elasticsearch数据库、Nginx-Tomcat集群技术、Kafka消息中间件开发运维数据采集系统,并介绍了该系统实际运行效果。

关键词:高速公路;机电设备;智能化管理;设备监控;运维数据采集

0引言

随着高速公路交通管理的信息化、智能化发展,机电设备在高速公路上应用越来越多,地位越来越重要,对机电设备的养护要求也越来越高。为了实现机电设备的全生命周期管理,需要将机电设备的静态信息(设备的类型、品牌、型号、数量、金额、采购时间等)和维护动态信息(设备的维护时间、地点、内容、维护人员、巡检、维护记录、维护档案等)以及实时状态信息(如设备的工作电压、电流、环境温度、湿度、接口状态、通信链路状态等)通过数据采集系统进行采集和存储,为高速公路运维系统的数据分析和业务应用模块提供数据依据。通过运维系统的专家诊断模块对故障进行预警与精确判断,智能派单,可以有效缩短机电设备的故障发现及修复时间,提高养护效率,改变传统高速公路机电运维被动、落后的局面。

1系统架构

系统由前端采集服务器与后端中心平台组成。分布在前端采集点的前端采集模块负责从各机电设备采集状态数据,汇总到采集汇总模块,再通过http协议上传至采集接收服务模块。由于采集前端访问并发量大,因此数据接收模块采用服务器集群提供负载均衡,接收到数据后再由采集接收服务模块推送到消息队列中。数据预处理模块从消息队列中消费消息,并按照指定格式规整数据,将数据同时推送给Elasticsearch数据库和专家系统。专家研判模块根据规则分析实时数据和Elasticsearch数据库中的数据,生成输出结果,存储到MySql数据库中。展示模块从Mysql数据库中读取专家研判模块的输出结果,并展示到用户界面中。

2前端数据采集模块

在各个高速公路路段设置数据采集节点,该采集节点负责按照各机电设备的通信协议,定时采集本路段的所有可监控的机电设备的状态信息,并推送到中心平台的消息中间件。采集节点负责向接收模块发送心跳信息,报告本采集点的状态。设定为每2min向接收模块发送心跳信息,接收模块3次没有收到心跳信息,会将该采集节点的状态设置为连接中断,直至再次接收到该节点的心跳消息后,将状态设置为正常。一旦采集节点与中心平台的通信连接断开,中心平台需要把该采集节点负责采集的区域设置为不可采集状态,并产生告警信息。采集的规则必须事先在后台定义,采集节点订阅消息队列的规则消息。采集节点在第一次启动时,向中心平台采集接收服务模块请求下载采集规则数据,然后将接收到的采集规则数据保存到指定目录,以便采集模块读取。一旦采集中心的采集规则配置有变化,配置信息模块需要实时将采集规则和采集范围下发到采集模块。在采集数据过程中,当前端采集节点与平台中心通信中断时,应当把采集数据保存到缓存中,待通信恢复后再上传。上传数据要根据时间顺序,优先把离当前时间最近的数据上传,上传成功后,再把该数据从数据库中删除。这样可以保证采集机和中心平台断线的情况下,采集的设备信息不丢失。当缓存的历史数据量过大时,还能保证系统数据反映的是当前的设备状态。系统前端采用SQLite实现数据缓存,他是一款简单的数据库,占用资源非常少,只需要几百K的内存,支持Windows/Linux/Unix等主流的操作系统,同时能够和很多程序语言相结合[1]。

3采集接收服务模块

由于高速公路上机电设备数量庞大,需要支持的并发请求量大,采集服务数据接收接口会产生单点故障,如果只采用一台采集接收服务器且坏掉了,中心平台就无法接收数据。因此采用服务器集群提供负载均衡,扩展服务性能,提高吞吐量,可使得系统数据处理得到增强,提高后端系统的灵活性和稳定性。设计采用Nginx-Tomcat负载均衡。Tomcat是一个免费、开源代码的Web应用服务器,他具有部署简单、支持多种平台、可实现负载均衡等特点。Nginx作为反向服务器,实现负载均衡[2],具有高并发、消耗资源少、配置简单、高稳定性等优点。采集节点发送的http请求由Nginx转发到相应的采集接收服务器,最后把返回的请求结果转发给采集节点。

4状态数据存储

采集前端采集到的设备状态数据以JSON格式存入Elasticsearch。ELasticsearch是一个高度可扩展的开源全文搜索和分析引擎,具有分布式、高扩展、高实时的特点。高速公路机电设备的状态数据具有种类多、结构复杂的特点。设备状态数据结构的设计,以交换机设备为例。该状态数据具有多层对象嵌套和复杂数组的结构。为了支持设备状态的分析和故障智能诊断的应用,以及表现层对设备状态数据的展示,数据存储架构要能支持检索任何设备的所有信息;支持结构化检索,如查找端口速率为1000Mbps以上的交换机;支持用设备的关键字进行全文检索,找到相关设备的信息,并且能高亮显示关键字;要能支持设备故障率、设备性能负荷等统计数据的分析。而利用Elasticsearch,这些要求都能够比较简单的实现,但是如果要在关系型数据库中表达这样的数据结构并实现同样的功能要复杂得多。由于要采集状态数据的高速公路机电设备众多,为了满足快速增长的数据存储和系统横向扩展需求,采用Elasticsearch集群构建高可用、可扩展的系统,在存储空间不足时,通过动态增加节点来实现系统扩容。基于Elasticsearch的特性,使得系统具有海量数据存储的水平伸缩性及搜索、分析的能力,并且随时可用和按需扩容。

5消息队列

采集节点上传的状态数据以及需要的规则数据,由消息系统负责传递。系统使用Kafka作为消息中间件。Kafka是一个分布式流平台,他可以构建实时流数据管道,在系统或应用程序之间可靠地获取数据,构建转换或响应数据流的实时流应用程序。应用Kafka可将系统的消息中间件作为一个集群运行于多个服务器上,这些服务器可以跨越多个数据中心,使系统更具有可扩展、可靠、容错高并发等特性。在某些高速公路路段采集节点断线一段时间后,再恢复连接时,因为节点的缓存积累了大量历史数据,会造成访问量突然增高。为了保证这种突发流量剧增的情况下(这种情况比较少见),系统仍然能够提供服务,则假设以处理峰值时候的标准来构建系统,但这势必会造成巨大的资源浪费。而采用kafka作为中间件,可以在流量高峰期缓存消息,在访问量恢复正常时,对消息进行消费,可以用较低的代价解决突发流量剧增的情况。本方案将kafka部署在linux系统上,由于Kafka服务依赖zookeeper,因此也需要在环境中部署zoo-keeper,为每个主题建立多个分区,消费组建立多个消费者对分区进行消费操作,提高系统的并发性。为了实现多个消费进程消费同一个主题,可以在创建主题时,指定分区数量和复制因子,或者在serv-er.properties文件中设置num.partitions(分区数)和default.replication.factor(默认复制因子)参数。

6系统应用测试

目前实际部署的运维系统中列入监控的设备达3万个,每个设备的状态数据采集间隔是1min,平均每秒有500个并发连接。我们在中心平台部署两台nginx接入服务器和两台tomcat应用服务器,实现数据接收服务负载均衡。部署两台kafka服务器集群,实现消息中间件服务,为每个消息主题设置4个分区,实现每组4个消费线程对消息进行消费。经过6个月时间的实际测试,系统能够在高并发量的情况下稳定运行,期间偶尔因为网络问题造成前端采集服务器断线,积累的大量未上传的数据在通信恢复时造成一段网络流量高峰期,但经过kafka的消息缓存,后端也可以平稳地处理接收到的状态数据。随着监控路段的增加,受监控的设备数还会不断增长,可以在系统中添加服务器以实现系统性能的横向扩展。

7结语

本文针对日益增长的高速公路机电设备运行状态的监测需求,设计了高可扩展性、可靠的系统架构。该设计方案具有机电设备的静态信息、维护动态信息、实时状态信息,支持智能和非智能机电设备监控,提供统一的机电设备终端信息交换和汇聚平台。管理人员可以通过互联网、移动端随时随地获取机电设备的运行状态信息,降低运维成本,提高高速公路养护效率,具有巨大的经济和社会效益,可有效支撑“数字广西”建设。

参考文献

[1]焦娜,邵羽,陈军,等.基于Android平台的恶意文件(夹)隔离箱试验系统[J].信息网络安全,2012(9):32-34.

[2]朱建杰.高性能网络社区的设计与实现[D].重庆:重庆大学,2011.

作者:刘阳 杜文良 单位:广西交通科学研究院有限公司