彭建華
(南京工業(yè)職業(yè)技術大學,江蘇 南京 210023)
高吞吐量、低延時是大規(guī)模物聯(lián)網(wǎng)系統(tǒng)數(shù)據(jù)接入的關鍵,當海量物聯(lián)網(wǎng)感知設備發(fā)送數(shù)據(jù)時,低并發(fā)的數(shù)據(jù)接入與處理能力將導致大量終端數(shù)據(jù)積壓,進而導致數(shù)據(jù)丟失,同時數(shù)據(jù)采集程序也將耗費巨量計算機資源,從而導致服務器異常,因此設計高并發(fā)的分布式物聯(lián)網(wǎng)數(shù)據(jù)解析系統(tǒng)具有重要的實踐意義與應用價值,是物聯(lián)網(wǎng)數(shù)據(jù)接入系統(tǒng)研究的重點。
數(shù)據(jù)解析能力是高并發(fā)物聯(lián)網(wǎng)數(shù)據(jù)接入的關鍵因素之一,接收與處理分離的思想[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]在仔細分析研究Netty與Kafka技術后,通過結Kafka的通行能力,利用Netty優(yōu)良的多線程功能,通過解決Netty網(wǎng)絡程序應用框架的NIO線程與業(yè)務處理線程間的耦合,提出了一種基于Netty和Kafka的終端服務系統(tǒng)設計方案,實現(xiàn)了較高的物聯(lián)網(wǎng)數(shù)據(jù)并行接入能力;天合云能源[5]設計了一種CAN總線通訊采集技術,通過增加節(jié)點設備,對多臺物聯(lián)網(wǎng)終端統(tǒng)一采集數(shù)據(jù),對采集的多臺數(shù)據(jù)進行重新編碼處理后,一次性上傳到云端,該方法通過減少并發(fā)量的方式實現(xiàn)了數(shù)據(jù)的并行接入能力;中國移動陜西公司[6]通過綜合考慮物聯(lián)網(wǎng)終端位置的網(wǎng)絡情況、不同業(yè)務終端對時延敏感度的要求以及終端發(fā)起接入的等待時延,將物聯(lián)網(wǎng)終端進行聚類處理,分為不同的接入優(yōu)先級后,將可用隨機接入前導及NPRACH資源優(yōu)先分配給高接入等級的終端,進行隨機接入請求,有效提高了終端首次接入成功率和系統(tǒng)的容量;Kafka是一個分布式、多訂閱者、分區(qū)的、多副本的,基于zookeeper協(xié)調的分布式系統(tǒng),該系統(tǒng)具有消息解耦、數(shù)據(jù)多副本安全、數(shù)據(jù)傳輸容量可擴展、較靈活的峰值處理、穩(wěn)定的系統(tǒng)可恢復、有效的數(shù)據(jù)緩沖以及極優(yōu)的異步數(shù)據(jù)通行等優(yōu)點與能力,馬躍[7]等對基于Kafka集群分布式,根據(jù)用戶位置、終端接入數(shù)據(jù)量以及處理時間進行研究,根據(jù)研究結果設置的終端數(shù)據(jù)接入模式具有數(shù)據(jù)占空間較小、數(shù)據(jù)接入后切換時延短等特點,證明Kafka系統(tǒng)能夠有效提高物聯(lián)網(wǎng)的并發(fā)數(shù)據(jù)接入能力。
海量物聯(lián)網(wǎng)接入系統(tǒng)中,在可接收的時間內無數(shù)據(jù)積壓,是物聯(lián)網(wǎng)數(shù)據(jù)接入與解析系統(tǒng)成功應用的關鍵。基于文獻[1,2],實現(xiàn)接收與處理分離,通過緩沖與并行處理實現(xiàn)高并發(fā)的物聯(lián)網(wǎng)數(shù)據(jù)接入與解析能力。
分配一個CPU專門處理數(shù)據(jù),設一個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ù)。
結合公式(1)、(2),推導得到公式(4)。

其中,M是系統(tǒng)接入與解析的能力,單位是條/秒,t1為一個CPU專門處理一條數(shù)據(jù)的時間,NodeN是分布式物聯(lián)網(wǎng)需要的數(shù)據(jù)處理并發(fā)節(jié)點數(shù)。
基于本文第2部分的原理分析,系統(tǒng)設計的關鍵主要考慮如下兩點:
(1)海量物聯(lián)網(wǎng)數(shù)據(jù)接收不阻塞;
(2)阻塞的數(shù)據(jù)能夠在規(guī)定的時間內處理完成。
基于文獻[1,2],結合本文第2部分原理分析,設計一種物聯(lián)網(wǎng)分布式高并發(fā)數(shù)據(jù)接入與解析系統(tǒng),系統(tǒng)邏輯結構如圖1。

圖1 系統(tǒng)邏輯結構
數(shù)據(jù)接收單元使用Netty框架,負責接收物聯(lián)網(wǎng)數(shù)據(jù),通過把接收的數(shù)據(jù)簡單轉換后放入Kafka,利用Kafka進行數(shù)據(jù)傳輸,數(shù)據(jù)處理單元基于Apache Nifi開發(fā),從Kafka中拉取數(shù)據(jù)進行并行數(shù)據(jù)解析處理,實現(xiàn)分布式數(shù)據(jù)解析與處理能力。
Netty框架基于TCP/IP通信,利用Socket進行異步事件驅動,使用I/O復用模型與線程處理模型提供高效的數(shù)據(jù)處理能力,使用它,企業(yè)可以快速開發(fā)高可靠性、高性能的網(wǎng)絡客戶端和服務器程序。
I/O復用模型如圖2。

圖2 I/O復用模型
Kafka是一個多訂閱者、分區(qū)的、多副本的,基于zookeeper協(xié)調的分布式系統(tǒng),該系統(tǒng)具有消息解耦、數(shù)據(jù)多副本安全、數(shù)據(jù)傳輸容量可擴展、較靈活的峰值處理、穩(wěn)定的系統(tǒng)可恢復、有效的數(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ù),進行性能測試,數(shù)據(jù)符合Modbus RTU協(xié)議格式,詳細數(shù)據(jù)如下:

此數(shù)據(jù)是連接32個壓力和溫度傳感器后由32通道數(shù)據(jù)采集器采集的數(shù)據(jù),Apache JMeter將此數(shù)據(jù)發(fā)送到數(shù)據(jù)接收單元, 數(shù)據(jù)接收單元直接封裝數(shù)據(jù),添加應用程序標頭后,它將數(shù)據(jù)放入Kafka。 數(shù)據(jù)處理單元從Kafka讀取并解析數(shù)據(jù),以獲得32個壓力傳感器的數(shù)據(jù)值。
10個數(shù)據(jù)發(fā)送節(jié)點,每個節(jié)點啟動10個Apache JMeter進程,每個JMeter進程啟動1000個數(shù)據(jù)發(fā)送線程;兩個數(shù)據(jù)接收節(jié)點;利用Docker容器技術搭建數(shù)據(jù)處理單元集群,Apache Nifi基于Docker容器進行集群部署。
本文基于接收與處理分離的思想、高并發(fā)的數(shù)據(jù)處理算法及海量數(shù)據(jù)處理方法,設計了一種物聯(lián)網(wǎng)分布式高并發(fā)數(shù)據(jù)接入與解析系統(tǒng),并進行了原理分析。該系統(tǒng)由數(shù)據(jù)接收單元、數(shù)據(jù)傳輸單元、數(shù)據(jù)處理單元構成。數(shù)據(jù)接收單元是基于Netty框架編寫的多線程服務程序,數(shù)據(jù)傳輸單元由Kafka負責,數(shù)據(jù)處理單元利用Apache Nifi承擔。實驗結果表明,該系統(tǒng)具有較高并行接入與處理能力。