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