物联网分布式高并发数据接入与解析系统
2021-08-31彭建华
彭建华
(南京工业职业技术大学,江苏 南京 210023)
高吞吐量、低延时是大规模物联网系统数据接入的关键,当海量物联网感知设备发送数据时,低并发的数据接入与处理能力将导致大量终端数据积压,进而导致数据丢失,同时数据采集程序也将耗费巨量计算机资源,从而导致服务器异常,因此设计高并发的分布式物联网数据解析系统具有重要的实践意义与应用价值,是物联网数据接入系统研究的重点。
1.研究现状
数据解析能力是高并发物联网数据接入的关键因素之一,接收与处理分离的思想[1]与高并发的数据处理算法[2]能够提高物联网数据接入的并发能力,海量数据处理方法[3]能够加快物联网数据接入后的数据处理速度,提高物联网数据接入的并发能力。
张娜等[4]在仔细分析研究Netty与Kafka技术后,通过结Kafka的通行能力,利用Netty优良的多线程功能,通过解决Netty网络程序应用框架的NIO线程与业务处理线程间的耦合,提出了一种基于Netty和Kafka的终端服务系统设计方案,实现了较高的物联网数据并行接入能力;天合云能源[5]设计了一种CAN总线通讯采集技术,通过增加节点设备,对多台物联网终端统一采集数据,对采集的多台数据进行重新编码处理后,一次性上传到云端,该方法通过减少并发量的方式实现了数据的并行接入能力;中国移动陕西公司[6]通过综合考虑物联网终端位置的网络情况、不同业务终端对时延敏感度的要求以及终端发起接入的等待时延,将物联网终端进行聚类处理,分为不同的接入优先级后,将可用随机接入前导及NPRACH资源优先分配给高接入等级的终端,进行随机接入请求,有效提高了终端首次接入成功率和系统的容量;Kafka是一个分布式、多订阅者、分区的、多副本的,基于zookeeper协调的分布式系统,该系统具有消息解耦、数据多副本安全、数据传输容量可扩展、较灵活的峰值处理、稳定的系统可恢复、有效的数据缓冲以及极优的异步数据通行等优点与能力,马跃[7]等对基于Kafka集群分布式,根据用户位置、终端接入数据量以及处理时间进行研究,根据研究结果设置的终端数据接入模式具有数据占空间较小、数据接入后切换时延短等特点,证明Kafka系统能够有效提高物联网的并发数据接入能力。
2.原理分析
海量物联网接入系统中,在可接收的时间内无数据积压,是物联网数据接入与解析系统成功应用的关键。基于文献[1,2],实现接收与处理分离,通过缓冲与并行处理实现高并发的物联网数据接入与解析能力。
分配一个CPU专门处理数据,设一个CPU专门处理一条数据的时间为t1,则一个CPU每秒处理数据量SN可由公式(1)计算得到。
每一个分布式节点分配一个CPU专门处理解析数据,则分布式物联网需要的数据处理并发节点数可以由公式(2)计算得到。
其中,M是系统接入与解析的能力,单位是条/秒,SN是一个CPU每秒处理数据量,NodeN是分布式物联网需要的数据处理并发节点数。
结合公式(1)、(2),推导得到公式(4)。
其中,M是系统接入与解析的能力,单位是条/秒,t1为一个CPU专门处理一条数据的时间,NodeN是分布式物联网需要的数据处理并发节点数。
3.系统设计
基于本文第2部分的原理分析,系统设计的关键主要考虑如下两点:
(1)海量物联网数据接收不阻塞;
(2)阻塞的数据能够在规定的时间内处理完成。
基于文献[1,2],结合本文第2部分原理分析,设计一种物联网分布式高并发数据接入与解析系统,系统逻辑结构如图1。
图1 系统逻辑结构
数据接收单元使用Netty框架,负责接收物联网数据,通过把接收的数据简单转换后放入Kafka,利用Kafka进行数据传输,数据处理单元基于Apache Nifi开发,从Kafka中拉取数据进行并行数据解析处理,实现分布式数据解析与处理能力。
Netty框架基于TCP/IP通信,利用Socket进行异步事件驱动,使用I/O复用模型与线程处理模型提供高效的数据处理能力,使用它,企业可以快速开发高可靠性、高性能的网络客户端和服务器程序。
I/O复用模型如图2。
图2 I/O复用模型
Kafka是一个多订阅者、分区的、多副本的,基于zookeeper协调的分布式系统,该系统具有消息解耦、数据多副本安全、数据传输容量可扩展、较灵活的峰值处理、稳定的系统可恢复、有效的数据缓冲以及极优的异步数据通行等能力。
Apache NiFi是一个数据拉取、数据处理和分发系统,用于自动化管理系统间的数据流,它具有高可配置、从头到尾跟踪数据流、易扩展的特性。
4.实验验证
表1 实验环境
使用apache JMeter发送模拟物联网数据,进行性能测试,数据符合Modbus RTU协议格式,详细数据如下:
此数据是连接32个压力和温度传感器后由32通道数据采集器采集的数据,Apache JMeter将此数据发送到数据接收单元, 数据接收单元直接封装数据,添加应用程序标头后,它将数据放入Kafka。 数据处理单元从Kafka读取并解析数据,以获得32个压力传感器的数据值。
10个数据发送节点,每个节点启动10个Apache JMeter进程,每个JMeter进程启动1000个数据发送线程;两个数据接收节点;利用Docker容器技术搭建数据处理单元集群,Apache Nifi基于Docker容器进行集群部署。
5.结语
本文基于接收与处理分离的思想、高并发的数据处理算法及海量数据处理方法,设计了一种物联网分布式高并发数据接入与解析系统,并进行了原理分析。该系统由数据接收单元、数据传输单元、数据处理单元构成。数据接收单元是基于Netty框架编写的多线程服务程序,数据传输单元由Kafka负责,数据处理单元利用Apache Nifi承担。实验结果表明,该系统具有较高并行接入与处理能力。