海量环境监测数据存储与共享平台

2016-03-10 08:31MassiveEnvironmentalMonitoringDataStorageandSharingPlatform
自动化仪表 2016年2期
关键词:海量环境监测服务器

Massive Environmental Monitoring Data Storage and Sharing Platform

李 琦 王光明 朱 林

(内蒙古科技大学信息工程学院,内蒙古 包头 014010)



海量环境监测数据存储与共享平台

Massive Environmental Monitoring Data Storage and Sharing Platform

李琦王光明朱林

(内蒙古科技大学信息工程学院,内蒙古 包头014010)

摘要:以湿地保护、呼伦湖流域生态环境综合信息采集及共享云计算平台建设项目为研究背景,针对环境监测数据大流量、大并发量的问题,采用基于物联网协议建立网络传输架构,提出采用Linux+Nginx+MongoDB+PHP环境集成方法构建数据共享平台。详细阐述了数据中心服务器环境部署;重点分析和研究了Go语言创建beego框架的RESTful API,为第三方应用程序提供接口服务,实现了数据库的安全访问。数据共享平台应用消息队列遥测转传输(MQTT)协议,实现了环境数据的订阅和推送。

关键词:环境监测物联网通信协议云计算监测数据采集储存共享安全网络拓扑服务器

Abstract:With the wetland protection and the construction project of Hulun lake basin ecological environment integrated information collection and sharing cloud computation platform as the research background,in accordance with the features of large flow and high concurrency for environment monitoring data,the network transmission architecture is established based on Internet of thing protocol,and the data sharing platform is constructed by using Linux+Nginx+MongoDB+PHP environment integrated approach.The environment deployment of data center server is described in detail,the RESTful API with beego framework structured by Go language is analyzed emphatically; this API provides service for the third party applications,to implement secure database access.The message queuing telemetry transport(MQTT) protocol is applied for data sharing platform,to realize subscription and promotion of environment data.

Keywords:Environmental monitoringInternet of thingsCommunication protocolCloud computingMonitoring data

Collection and storageShareSecurityNetwork topologyServer

0引言

呼伦湖(又称达莱湖),是我国第四大淡水湖,其水系横跨中、蒙、俄三国,特殊的地理位置决定了它在区域生态环境保护和经济发展中不可替代的重要地位。在区域气候暖干化、流域经济快速发展以及污染治理相对滞后的背景下,呼伦湖湿地系统遭到严重的干扰和破坏[1]。如何对呼伦湖资源与生态环境做出有效的、科学的监测和评估,已成为亟待解决的研究课题之一。建立呼伦湖流域生态环境综合信息采集及共享云计算平台,实现信息互通,是实现呼伦湖流域生态环境保护及修复的当务之急。生态环境监测数据不仅对日常生活、环境变化研究等具有重要的科学价值,还将为政府决策等提供有力的依据和数据支撑。

物联网技术的发展为环境监测提供了生态环境数据感知、传输的技术手段,但对环境数据的采集与利用,分属于不同部门的各高校、科研机构各自为政,资源没有有效整合,重复建设,信息化建设水平参差不齐,缺乏对生态环境研究的长远考量。现有的传感数据缺乏规范和标准,不同厂家产品互通性差,实时性差,缺乏面向应用层的业务功能(如环境数据订阅服务、推送服务)。针对以上问题,本文以湿地保护、呼伦湖流域生态环境综合信息采集及共享云计算平台建设项目为研究背景,提出了解决方案。

1数据共享平台网络拓扑结构

呼伦湖流域生态环境综合信息采集及共享云计算平台建设项目以湿地保护为目标,实现水(水质、水量)、土、气(气象)、生(生物)、冰层厚度、大风(预警)等海量环境数据的传输、存储、查询、推送服务。图1为数据采集、存储与共享平台整体架构。

环境监测系统包括下位机和上位机两部分,第一部分是下位机,主要负责数据采集。如图1左半图所示,将采集环境数据的传感器接入各节点,根据各种传感器内部集成的数据通信模式(如单总线、I2C、SPI等总线方式),传感器与单片机相连,构成传感器节点采集环境数据(作为从站,用STM32系列单片机完成)。通过ZigBee组网连接到具有Rt-thread操作系统的汇聚节点(作为主站)。最后,通过物联网受限制的应用协议(contrained application protocol,CoAP)统一数据格式,向上位机发送数据。第二部分是上位机,即数据中心,也是本设计的重点。如图1右半图所示,数据中心通过服务器端的CoAP协议接收、解析数据。数据存储用非关系数据库。beego API为第三方应用程序提供接口服务,实现数据库的安全访问。用PHP开发呼伦湖环境监测系统网站,实现数据的Web呈现。在此基础上用消息队列遥测传输 (message queuing telemetry transport,MQTT)协议实现双向推送,对灾害性天气及时预警,方便使用者在任何地点对数据进行访问。下面将对设计方案所涉及的技术进行一一介绍。

图1 系统整体设计方案

2数据共享平台设计

2.1服务器环境部署

对于实现海量环境数据存储与共享平台这样一个大流量、大并发量的网站系统架构,除了硬件上使用高性能的服务器、负载均衡、内容分发网络(content delivery network,CDN )等之外,在软件架构上需要重点考虑使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Database)、高效率的编程语言等。海量环境监测数据存储与共享平台的搭建解决方案如图2所示。

服务器基本性能要求安全、长期稳定不间断持续运行,毋庸置疑Linux操作系统是首选。Nginx作为开源、轻量级、高性能的Web服务器软件,有简单的负载均衡和容错功能,支持热部署,即在不间断服务条件下能对软件版本或配置进行更新升级。它与Linux配合,可以不间断持续稳定运行数月,内存消耗低,在处理静态文件上有突出的优势。基于以上优点,Linux在本设计中做高并发的HTTP服务器。

图2 数据存储与共享平台搭建方案

海量环境数据存储要求数据库有较高的读写、并发能力,对数据库的性能要求很高。通常所用的关系型数据库MySQL由于其内部机制所限,以表结构形式存储受限于字段与记录,要求每个字段与记录都要一一对应,限制了个体的多样性,在处理高并发问题上显得很吃力。NoSQL数据库架构偏向于面向对象,具有分布式、水平可扩展的特点。NoSQL数据库以Key-value形式存储数据,可以灵活地对架构进行扩展[2],提高读写速度,有效解决了海量环境数据存储与访问效率的问题。甄选了三个代表性的非关系型数据库和关系型数据库,在装有Linux系统的虚拟机中进行了数据存储测试,测试结果如表1所示。由表1可以看出,比较数据存储时间,非关系型数据库比关系型数据库的性能好。

表1 数据库存储数据时间对比表

Redis适用于数据量较小的高性能操作和运算,如替代memcached实现缓存。MongoDB存储使用高效的BSON[3](JSON的二进制存储格式)作为内部存储的格式和语法。MongoDB的操作使用JSON风格语法,客户端提交或接收的数据使用JSON形式来展现。相对于SQL来说,MongoDB非关系型数据库更加直观,容易理解和掌握。MongoDB支持丰富的数据表达、索引,支持的查询语言也非常丰富,是最像关系型数据库的非关系型数据库。MongDB与关系型数据库数据存储格式对比如表2所示。

表2 数据库数据存储格式对比表

MongoDB是一个高性能、易部署、面向集合存储、开源、模式自由的文档型数据库。模式自由体现在集合里没有行和列的概念,存储的是键值对,可以实现不同传感器、不同参数、不同数据在同一集合里的存储。MongoDB存储形式如下:

{ "highestTEMP ": 18,"lowestTEMP ":13 }

{ "weather": "sunny" }

{ "PH": 5}

菊芋除块茎兼有食用价值和药用价值之外,树叶的药理活性和应用也不容小觑。在传统的民间医学上,菊芋的绿叶被用来治疗骨折、皮外伤、肿胀和疼痛[33-34]。菊芋的地上部分中发现了许多可以药用且有生物活性的化合物,并被证明具有抗真菌活性、抗氧化活性、抗癌活性和其他方面的药用作用[35-37]。

MongoDB支持动态查询、完全索引、复制与故障恢复,具有自动处理碎片等特性,能够满足海量环境数据的高读写、高并发的要求。因此,综合考量后选择MongoDB做服务器的数据库。Web服务后台用PHP开发,快捷简单,平台兼容性好。服务器部署:Linux+Nginx+MongoDB+PHP搭建完成。根据功能要求,编程语言选择并发编程简单并具有自动垃圾回收机制的Go语言[4]。

2.2CoAP协议

因特网工程任务组(IETF)的约束RESTful环境工作组(CoRE) 定义基于REST的Web传输协议称为受约束的应用协议(CoAP)[5]。CoAP的目的是为了统一数据格式,让小设备可以接入互联网,扩展REST体系结构,以满足受约束物联网装置和网络(如6LoWPAN[6])的需要。CoAP常用的应用版本是封装在嵌入式操作系统Contiki中,而目前还没有在RT-Thread操作系统上实现的版本,所以需要将CoAP协议移植到RT-Thread平台上。CoAP客户端实现架构如图3所示。

图3 CoAP客户端实现架构

CoAP协议由一组具有HTTP功能的REST子集组成,运输层基于UDP,支持多播,降低了网络开销。CoAP请求/响应层与事务层的双层处理方式支持异步消息交换[7]。CoAP基本报头为4个字节,基本报头后跟扩展选项。一个典型的请求报头为10~20个字节。

用Go语言实现CoAP协议无论从代码量还是编程逻辑上都较C语言简单。Go语言版本的CoAP协议提供了ListenAndServe函数,这个函数既能实现UDP 5683端口监听,又能完成读取端口的请求数据。适用于物联网的CoAP协议,解决了传感器节点环境受限问题。CoAP协议消息类型有4种,表3是一组请求要求被确认的C/S消息结构,客户端将携带 “PH 5”的数据包发送给服务器端,服务器接收到数据包后回复“ok”确认收到消息。

表3 C/S消息结构

2.3beego API

图4 Beego执行逻辑

首先,程序的执行从main开始,监听8080端口,根据请求路由到控制器,控制器根据请求动词,执行对应的请求方法,接收用户的请求,并决定应该调用哪个模型来进行处理。然后,模型用业务逻辑来处理用户的请求并返回数据;最后控制器用相应的视图格式化模型返回数据,并通过表示层呈现给用户。基于beego创建的RESTful API,简单、安全的访问机制可为科研机构提供海量数据接口,还可将数据绘制成历史曲线,形象直观地展现给公众用户,用以指导生产、生活。

基于beego创建对海量环境数据访问的API。首先,beego API要与数据库进行连接,代码如下,bee api DB -conn=root:@tcp(127.0.0.1:33061)/DB,其中DB为自定义的数据库的名字;然后创建基于swagger的自动化文档,命令如下,bee run -gendoc=true -downdoc=true;最后执行bee run watch。这就成功创建了一个基于beego的API。

beego API测试需要安装curl。curl是一个利用URL语法、在命令行方式下工作的开源文件传输工具,在命令行下模拟浏览器POST一条数据后,beego API会返回一个唯一的ID值。查询此条数据时,GET这个唯一的ID值即可获取存储的数据,命令行中测试结果如下。

wgm@ubuntu:~$ curl -X POST -d '{"PH":5,"addr":"土壤"}'

http://127.0.0.1:8080/object

{

" object Id":"ID1413338440024731267"

} wgm@ubuntu:~$ curl -X GET -d http://127.0.0.1:8080/object

{

"ID1413338440024731267":{

" object Id":"ID1413338440024731267",

"PH":5,

"Addr":"土壤"

}

为保证数据库的安全访问,可加入用户认证。首先在main文件import中加入一个插件“github.com/astaxie/beego/plu- gins/auth”,然后在func main中加入“beego.Insort Filter(“*” ,beego.Before Router,auth.Basic(“username”,“ password” ))”,当访问数据库时就会出现对话框,提示填写用户名和密码,实现验证登录。

2.4MQTT协议

MQTT是一个轻量级的消息发布/订阅协议。针对目前环境数据共享技术(短信、GPRS等)实时性差、缺乏面向应用层的业务功能,本文采用消息推送协议MQTT,用以实现环境数据的订阅、推送服务。选择MQTT协议的另一个原因是,它是一个专为远程传感器和控制设备通信而设计的开源协议,可以实现传感器节点的远程参数配置。本文采用Jeff Allen用Go语言编写的MQTT协议。这个Go语言的MQTT协议导入了github/ huin/ mqtt包,用以减少内核调用,从而减少TCP数据包。一个连接发起到断开需要19个数据包, Go语言的MQTT协议减少编写系统调用,14个数据包即可实现[10]。可见,减少内核调用不仅能缩短内核与用户的切换时间,而且能节省带宽。

海量环境监测数据共享平台应用MQTT协议将采集的环境数据,通过预警分析及时有效地推送给订阅者。尤其针对由外蒙古刮入我国境内的灾害性的大风,及时预警可以大大减少当地人民的财产损失。

3结束语

本文针对环境监测数据采集与应用现状,就研究目的相对单一和片面(从各自学科角度)、重复建设、缺乏整体考量等不足,提出了整合方案,解决了高并发的海量环境数据传输受限的问题。海量环境监测数据存储与共享平台可完成环境数据订阅服务、推送服务。通过以上技术实现对冰层厚度的测量,为冬天作业提供安全指导;对水质进行监测分析,为渔业生产提供指导;提供站点气象,监测草原生态,对提高环境监测水平有重要意义。

参考文献

[1] 吴亚男.呼伦湖生态系统健康评价及稳定阈值遥感分析[D].北京:中国水利水电科学研究院,2013.

[2] 潘凡.从MySQL到MongoDB——视觉中国的NoSQL之路[J].程序员,2010(6):79-81.

[3] 张尧,甘泉,刘建川.基于MongoDB的地理信息共享数据存储模型研究[J].测绘,2014(4):147-150.

[4] Google抛弃C语言,采用Go语言重写Go编译器[J].电脑编程技巧与维护,2014(3):4.

[5] 汤春明,张荧,吴宇平.无线物联网中CoAP协议的研究与实现[J].现代电子技术,2013(1):40-44.

[6] 曹振,邓辉,段晓东.物联网感知层的IPv6协议标准化动[J].电信网技术,2010(7):17-22.

[7] 常英亮.基于嵌入式Linux的物联网网关研究与实现[D].北京:北京交通大学,2014.

[8] Astaxie.beego开发文档[EB/OL].[2013-11-20][2014-05-12].http://beego.me/docs/intro/.

[9] 余洪春.构建高可用Linux服务器[M].2版.北京:机械工业出版社,2012.

[10]Allen J.Reduce write system calls,thus fewer TCP packets [EB/OL].[2013-08-24][2014-09-15].https://github.com/huin/mqtt/commit/.

中图分类号:TH86;TP393

文献标志码:A

DOI:10.16086/j.cnki.issn1000-0380.201602015

包头市科技计划基金资助项目(编号:2014N1010-2)。

修改稿收到日期:2015-03-30。

第一作者李琦(1973-),男,2002年毕业于同济大学系统工程专业,获硕士学位,副教授;主要从事复杂过程控制以及流程工业综合自动化技术的研究。

猜你喜欢
海量环境监测服务器
一种傅里叶域海量数据高速谱聚类方法
服务器组功能的使用
通信控制服务器(CCS)维护终端的设计与实现
环境监测系统的数据分析与处理
PowerTCP Server Tool
海量快递垃圾正在“围城”——“绿色快递”势在必行
环境监测实验中有害试剂的使用与处理
大气污染问题的环境监测
一个图形所蕴含的“海量”巧题
计算机网络安全服务器入侵与防御