物联网网关
镇海智慧水务项目的各类监测设备主要是工业自动化系统的传感器,如水质PH值、COD等的检测、流量计、水位计等。Modbus协议是水务水利工业传感协议的事实标准,此外,OPC协议应用也较为广泛。虽然是标准协议,但由于各单位已经存在一些原有的自动化监控系统,设备来自不同的厂家,系统也不是一个开发商提供的,所以对Modbus协议的实现方式不完全一致,增加了系统开发和集成的难度和工作量。
针对此类共性需求,项目中我们自主研发了物联网网关产品。物联网网关通俗的讲就是一个通用的数据采集和通信网关。它内置了对主流数据协议的支持,并且提供自定义插件来实现动态扩展,即对于非内置支持的协议,可支持协议的二次定制开发。开发人员只需要继承DataSource基类,实现特定的override方法,即可迅速完成一个新“数据源”程序的开发。然后将动态链接库(DLL)通过管理工具发布到物联网网关
服务器,即可实现与特定类型设备和传感器的通信,如图4。
图4 物联网网关工作原理示意图
海量数据存储
镇海智慧水务项目一期接入了诸多的监测厂、站、节点等,不同类型监测指标的采集频率也不完全相同。根据统计,所有节点一天上报的监测数据约为4.32亿条,1年下来就是1500亿条记录,约7.2TB。
基于以上的容量规划,经过技术调研和可行性验证,我们最终选择采用MongoDB数据库作为实时数据的持久化存储。
MongoDB实时监测数据集合的Schema如下:
经过测试分析,我们总结了MongoDB数据库性能最佳实践,当然,这是基于我们自己的测试数据得出的,如表1所示仅供参考。
表1 MongoDB数据库性能最佳实践
这里值得注意的是,我们的性能测试和评估是在单台服务器的情况下完成的,因此,在实际生产部署环境下,建议采用复制集加分片集群的模式。
图5说明如何在最佳性能和最大数据可靠性之间取得平衡。
图5 最佳性能和最大数据可靠性的平衡
实时通信
物联网应用从传感设备的数据采集、处理到存储、传输、分析、展示,中间要经过很多的环节,除了程序运行处理的时间开销,还应考虑网络传输的延时,即用户对系统实时性的要求。除此之外,人机交互的模式对系统可伸缩性的影响也不容忽视——当新的监测数据上报到服务器时,是主动推送至监控系统的用户界面,还是让用户发送新的数据请求然后将结果返回给用户?推送动作的触发是采用数据库轮询模式,还是基于事件通知?这些都会影响到最终的技术选型。
表2 通信技术对比
最终,我们选择了HTML5 WebSocket作为从物联网网关到监控系统用户界面的实时数据通信机制。主要评估指标包括:实时性、系统可伸缩性、技术复杂度、浏览器兼容性、标准性与开放性、用户体验。
数据交换与共享
如前文所述,由于政府部门和单位间的“数据孤岛”现象严重而导致难以实现系统间互连互通,因此,迫切需要一种数据交换与共享的解决方案。经过市场调研之后,我们最终自己开发了一个轻量级的数据交换与共享服务器程序,来满足镇海智慧水务的数据交换需求,如图6。
图6 数据交换与共享服务工作原理
数据提供者程序和数据接受者程序可以分别部署在不同的网段,不同的服务器上,只要两台服务器之间存在可以连通的网络即可。数据发送方进程和数据接收方进程分别具有本方数据库的访问权限,而无需知道对方数据库。
数据交换配置信息,用来描述源数据库和目标数据库的的标识、表及字段映射关系。
一个数据提供者可以向多个接收者发送数据,一个数据接收者也可以从多个提供者接收数据。
说到这里,有人可能会问:为什么不直接采用数据库层面的DTS来实现数据复制呢?简单的说,DTS也能在一定场景下适用,但只能视具体项目情况而定,而且必须2个数据库间能直接互连,而这在镇海智慧水务项目中基本是不可行的。
后记
最后跟大家分享几点心得:
多了解项目相关的知识。像实施镇海智慧水务项目,需要了解工业传感器、
PLC编程、
嵌入式系统和编程、网络通信、服务器端开发、大数据相关技术、GIS、数据可视化分析和展示等知识。
架构设计需谨慎。在技术落地和项目实施的过程中,要不断优化和演进架构设计,并且防止设计的退化。
对物联网应用项目的实施来说,很大一部分工作量在于系统集成和设备联调。使用实时数据模拟程序、可视化数据分析等工具能够将整个项目进行合理划分和分解,也有利于并行开发,加快进度,便于系统集成。
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。