彭建華
(南京工業(yè)職業(yè)技術(shù)大學(xué),江蘇 南京 210023)
高吞吐量、低延時是大規(guī)模物聯(lián)網(wǎng)系統(tǒng)數(shù)據(jù)接入的關(guān)鍵,當(dāng)海量物聯(lián)網(wǎng)感知設(shè)備發(fā)送數(shù)據(jù)時,低并發(fā)的數(shù)據(jù)接入與處理能力將導(dǎo)致大量終端數(shù)據(jù)積壓,進(jìn)而導(dǎo)致數(shù)據(jù)丟失,同時數(shù)據(jù)采集程序也將耗費巨量計算機資源,從而導(dǎo)致服務(wù)器異常,因此設(shè)計高并發(fā)的分布式物聯(lián)網(wǎng)數(shù)據(jù)解析系統(tǒng)具有重要的實踐意義與應(yīng)用價值,是物聯(lián)網(wǎng)數(shù)據(jù)接入系統(tǒng)研究的重點。
數(shù)據(jù)解析能力是高并發(fā)物聯(lián)網(wǎng)數(shù)據(jù)接入的關(guān)鍵因素之一,接收與處理分離的思想[1]與高并發(fā)的數(shù)據(jù)處理算法[2]能夠提高物聯(lián)網(wǎng)數(shù)據(jù)接入的并發(fā)能力,海量數(shù)據(jù)處理方法[3]能夠加快物聯(lián)網(wǎng)數(shù)據(jù)接入后的數(shù)據(jù)處理速度,提高物聯(lián)網(wǎng)數(shù)據(jù)接入的并發(fā)能力。
張娜等[4]在仔細(xì)分析研究Netty與Kafka技術(shù)后,通過結(jié)Kafka的通行能力,利用Netty優(yōu)良的多線程功能,通過解決Netty網(wǎng)絡(luò)程序應(yīng)用框架的NIO線程與業(yè)務(wù)處理線程間的耦合,提出了一種基于Netty和Kafka的終端服務(wù)系統(tǒng)設(shè)計方案,實現(xiàn)了較高的物聯(lián)網(wǎng)數(shù)據(jù)并行接入能力;天合云能源[5]設(shè)計了一種CAN總線通訊采集技術(shù),通過增加節(jié)點設(shè)備,對多臺物聯(lián)網(wǎng)終端統(tǒng)一采集數(shù)據(jù),對采集的多臺數(shù)據(jù)進(jìn)行重新編碼處理后,一次性上傳到云端,該方法通過減少并發(fā)量的方式實現(xiàn)了數(shù)據(jù)的并行接入能力;中國移動陜西公司[6]通過綜合考慮物聯(lián)網(wǎng)終端位置的網(wǎng)絡(luò)情況、不同業(yè)務(wù)終端對時延敏感度的要求以及終端發(fā)起接入的等待時延,將物聯(lián)網(wǎng)終端進(jìn)行聚類處理,分為不同的接入優(yōu)先級后,將可用隨機接入前導(dǎo)及NPRACH資源優(yōu)先分配給高接入等級的終端,進(jìn)行隨機接入請求,有效提高了終端首次接入成功率和系統(tǒng)的容量;Kafka是一個分布式、多訂閱者、分區(qū)的、多副本的,基于zookeeper協(xié)調(diào)的分布式系統(tǒng),該系統(tǒng)具有消息解耦、數(shù)據(jù)多副本安全、數(shù)據(jù)傳輸容量可擴展、較靈活的峰值處理、穩(wěn)定的系統(tǒng)可恢復(fù)、有效的數(shù)據(jù)緩沖以及極優(yōu)的異步數(shù)據(jù)通行等優(yōu)點與能力,馬躍[7]等對基于Kafka集群分布式,根據(jù)用戶位置、終端接入數(shù)據(jù)量以及處理時間進(jìn)行研究,根據(jù)研究結(jié)果設(shè)置的終端數(shù)據(jù)接入模式具有數(shù)據(jù)占空間較小、數(shù)據(jù)接入后切換時延短等特點,證明Kafka系統(tǒng)能夠有效提高物聯(lián)網(wǎng)的并發(fā)數(shù)據(jù)接入能力。
海量物聯(lián)網(wǎng)接入系統(tǒng)中,在可接收的時間內(nèi)無數(shù)據(jù)積壓,是物聯(lián)網(wǎng)數(shù)據(jù)接入與解析系統(tǒng)成功應(yīng)用的關(guān)鍵?;谖墨I(xiàn)[1,2],實現(xiàn)接收與處理分離,通過緩沖與并行處理實現(xiàn)高并發(fā)的物聯(lián)網(wǎng)數(shù)據(jù)接入與解析能力。
分配一個CPU專門處理數(shù)據(jù),設(shè)一個CPU專門處理一條數(shù)據(jù)的時間為t1,則一個CPU每秒處理數(shù)據(jù)量SN可由公式(1)計算得到。
每一個分布式節(jié)點分配一個CPU專門處理解析數(shù)據(jù),則分布式物聯(lián)網(wǎng)需要的數(shù)據(jù)處理并發(fā)節(jié)點數(shù)可以由公式(2)計算得到。
其中,M是系統(tǒng)接入與解析的能力,單位是條/秒,SN是一個CPU每秒處理數(shù)據(jù)量,NodeN是分布式物聯(lián)網(wǎng)需要的數(shù)據(jù)處理并發(fā)節(jié)點數(shù)。
結(jié)合公式(1)、(2),推導(dǎo)得到公式(4)。
其中,M是系統(tǒng)接入與解析的能力,單位是條/秒,t1為一個CPU專門處理一條數(shù)據(jù)的時間,NodeN是分布式物聯(lián)網(wǎng)需要的數(shù)據(jù)處理并發(fā)節(jié)點數(shù)。
基于本文第2部分的原理分析,系統(tǒng)設(shè)計的關(guān)鍵主要考慮如下兩點:
(1)海量物聯(lián)網(wǎng)數(shù)據(jù)接收不阻塞;
(2)阻塞的數(shù)據(jù)能夠在規(guī)定的時間內(nèi)處理完成。
基于文獻(xiàn)[1,2],結(jié)合本文第2部分原理分析,設(shè)計一種物聯(lián)網(wǎng)分布式高并發(fā)數(shù)據(jù)接入與解析系統(tǒng),系統(tǒng)邏輯結(jié)構(gòu)如圖1。
圖1 系統(tǒng)邏輯結(jié)構(gòu)
數(shù)據(jù)接收單元使用Netty框架,負(fù)責(zé)接收物聯(lián)網(wǎng)數(shù)據(jù),通過把接收的數(shù)據(jù)簡單轉(zhuǎn)換后放入Kafka,利用Kafka進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)處理單元基于Apache Nifi開發(fā),從Kafka中拉取數(shù)據(jù)進(jìn)行并行數(shù)據(jù)解析處理,實現(xiàn)分布式數(shù)據(jù)解析與處理能力。
Netty框架基于TCP/IP通信,利用Socket進(jìn)行異步事件驅(qū)動,使用I/O復(fù)用模型與線程處理模型提供高效的數(shù)據(jù)處理能力,使用它,企業(yè)可以快速開發(fā)高可靠性、高性能的網(wǎng)絡(luò)客戶端和服務(wù)器程序。
I/O復(fù)用模型如圖2。
圖2 I/O復(fù)用模型
Kafka是一個多訂閱者、分區(qū)的、多副本的,基于zookeeper協(xié)調(diào)的分布式系統(tǒng),該系統(tǒng)具有消息解耦、數(shù)據(jù)多副本安全、數(shù)據(jù)傳輸容量可擴展、較靈活的峰值處理、穩(wěn)定的系統(tǒng)可恢復(fù)、有效的數(shù)據(jù)緩沖以及極優(yōu)的異步數(shù)據(jù)通行等能力。
Apache NiFi是一個數(shù)據(jù)拉取、數(shù)據(jù)處理和分發(fā)系統(tǒng),用于自動化管理系統(tǒng)間的數(shù)據(jù)流,它具有高可配置、從頭到尾跟蹤數(shù)據(jù)流、易擴展的特性。
表1 實驗環(huán)境
使用apache JMeter發(fā)送模擬物聯(lián)網(wǎng)數(shù)據(jù),進(jìn)行性能測試,數(shù)據(jù)符合Modbus RTU協(xié)議格式,詳細(xì)數(shù)據(jù)如下:
此數(shù)據(jù)是連接32個壓力和溫度傳感器后由32通道數(shù)據(jù)采集器采集的數(shù)據(jù),Apache JMeter將此數(shù)據(jù)發(fā)送到數(shù)據(jù)接收單元, 數(shù)據(jù)接收單元直接封裝數(shù)據(jù),添加應(yīng)用程序標(biāo)頭后,它將數(shù)據(jù)放入Kafka。 數(shù)據(jù)處理單元從Kafka讀取并解析數(shù)據(jù),以獲得32個壓力傳感器的數(shù)據(jù)值。
10個數(shù)據(jù)發(fā)送節(jié)點,每個節(jié)點啟動10個Apache JMeter進(jìn)程,每個JMeter進(jìn)程啟動1000個數(shù)據(jù)發(fā)送線程;兩個數(shù)據(jù)接收節(jié)點;利用Docker容器技術(shù)搭建數(shù)據(jù)處理單元集群,Apache Nifi基于Docker容器進(jìn)行集群部署。
本文基于接收與處理分離的思想、高并發(fā)的數(shù)據(jù)處理算法及海量數(shù)據(jù)處理方法,設(shè)計了一種物聯(lián)網(wǎng)分布式高并發(fā)數(shù)據(jù)接入與解析系統(tǒng),并進(jìn)行了原理分析。該系統(tǒng)由數(shù)據(jù)接收單元、數(shù)據(jù)傳輸單元、數(shù)據(jù)處理單元構(gòu)成。數(shù)據(jù)接收單元是基于Netty框架編寫的多線程服務(wù)程序,數(shù)據(jù)傳輸單元由Kafka負(fù)責(zé),數(shù)據(jù)處理單元利用Apache Nifi承擔(dān)。實驗結(jié)果表明,該系統(tǒng)具有較高并行接入與處理能力。