秦 磊 林希佳 周 軒 郭 磊 王 路 吳成慶 王 娜
(江蘇金陵智造研究院有限公司,江蘇 南京 210001)
近年來(lái),隨著信息化水平的不斷提升,不同類型的智能設(shè)備已經(jīng)廣泛應(yīng)用于智能制造領(lǐng)域、智慧園區(qū)領(lǐng)域中,企業(yè)管理者對(duì)這兩大領(lǐng)域內(nèi)現(xiàn)場(chǎng)狀況的掌控要求越來(lái)越高。尤其是隨著工業(yè)互聯(lián)網(wǎng)、大數(shù)據(jù)及物聯(lián)網(wǎng)的蓬勃發(fā)展,迫切要求生產(chǎn)車(chē)間、工業(yè)園區(qū)提升信息化管理水平,為管理者掌控現(xiàn)場(chǎng)綜合情況提供助益。以工業(yè)園區(qū)為例,園區(qū)內(nèi)設(shè)備種類較多,但缺乏人與物、物與物間的智能聯(lián)動(dòng),且分散在各個(gè)地方,缺乏有效的狀態(tài)數(shù)據(jù)采集渠道,用戶無(wú)法直接與園區(qū)進(jìn)行交互,缺乏有效的用戶體驗(yàn)反饋渠道。對(duì)于工業(yè)園區(qū)行業(yè)的管理者來(lái)說(shuō),如何快速定位設(shè)備位置,如何查看設(shè)備使用情況,設(shè)備故障后如何快速定位設(shè)備故障點(diǎn)從而第一時(shí)間進(jìn)行維修等,這些問(wèn)題的深入研究及解決方法都需要以從設(shè)備采集大量實(shí)時(shí)數(shù)據(jù)為基礎(chǔ)。
工業(yè)園區(qū)現(xiàn)場(chǎng),一般都會(huì)有來(lái)自不同廠商品牌的設(shè)備,且設(shè)備類型多元化,例如有各類傳感器、攝像頭、巡檢小車(chē)等等,通信方式各不相同,各種因素給園區(qū)信息化之路帶來(lái)不小的阻力。
針對(duì)這一現(xiàn)狀,本文研究探討一種多源設(shè)備大數(shù)據(jù)量實(shí)時(shí)數(shù)據(jù)采集存儲(chǔ)的方法。該方法結(jié)合我司項(xiàng)目實(shí)際情況開(kāi)展,借助于互聯(lián)網(wǎng),實(shí)現(xiàn)物聯(lián)網(wǎng)平臺(tái)與數(shù)千臺(tái)設(shè)備間的通信,設(shè)備大多數(shù)為模具狀態(tài)監(jiān)控設(shè)備,另含一部分傳感器、攝像頭及小車(chē),遠(yuǎn)程采集設(shè)備的相關(guān)坐標(biāo)位置、耗電量、故障信息等數(shù)據(jù),并實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)穩(wěn)定存儲(chǔ),為后續(xù)借助互聯(lián)網(wǎng)平臺(tái)實(shí)現(xiàn)大數(shù)據(jù)分析提供數(shù)據(jù)支撐。
物聯(lián)網(wǎng)平臺(tái)類型繁多,主要包括以下四類:第一類是提供連接性管理的物聯(lián)網(wǎng)平臺(tái);第二類是以提供云服務(wù)為主的應(yīng)用開(kāi)發(fā)平臺(tái);第三類是以接入智能裝置為主的應(yīng)用開(kāi)發(fā)平臺(tái);第四類是以大數(shù)據(jù)分析和機(jī)器學(xué)習(xí)為主的物聯(lián)網(wǎng)平臺(tái)?;诒疚难芯康膶?shí)際情況,以第三類物聯(lián)網(wǎng)平臺(tái)為依托,接入多源設(shè)備進(jìn)行實(shí)時(shí)采集存儲(chǔ),為大數(shù)據(jù)分析提供數(shù)據(jù)支撐。數(shù)據(jù)采集方式主要分為以下兩類。
1.1 間接接入?,F(xiàn)場(chǎng)設(shè)備種類較多時(shí),使用工業(yè)數(shù)據(jù)采集網(wǎng)關(guān)將設(shè)備按適配協(xié)議接入,網(wǎng)關(guān)使用Mqtt 服務(wù)進(jìn)行數(shù)據(jù)傳輸,物聯(lián)網(wǎng)平臺(tái)端啟用Mqtt 服務(wù)端組件讀取網(wǎng)關(guān)傳輸?shù)臄?shù)據(jù),數(shù)據(jù)流如圖1 所示。
圖1 間接接入方式
1.2 直接接入。直接接入方法使用現(xiàn)場(chǎng)設(shè)備通訊協(xié)議比較簡(jiǎn)單且單一的情況,現(xiàn)場(chǎng)設(shè)備與物聯(lián)網(wǎng)平臺(tái)通過(guò)網(wǎng)線連接,以以太網(wǎng)方式傳輸數(shù)據(jù)至平臺(tái)端,平臺(tái)端開(kāi)啟通信協(xié)議服務(wù)組件接收設(shè)備傳遞的數(shù)據(jù),并利用Kafka 進(jìn)行數(shù)據(jù)接收處理,數(shù)據(jù)流如圖2 所示。
圖2 直接接入方式
對(duì)于實(shí)時(shí)采集的數(shù)據(jù),以1s 的采集周期采集所需數(shù)據(jù)。對(duì)于更新速率較慢的數(shù)據(jù),例如設(shè)備耗電量等數(shù)據(jù),可采用15min的采集周期。
采集的數(shù)據(jù)確保與實(shí)際狀態(tài)數(shù)據(jù)一一對(duì)應(yīng),保證傳輸數(shù)據(jù)的準(zhǔn)確性;穩(wěn)定性方面,采集的數(shù)據(jù)日丟失率不高于0.1%;安全性方面,通過(guò)鏈路加密協(xié)議等確保數(shù)據(jù)的安全。
多類型設(shè)備數(shù)據(jù)采集,主要采集的設(shè)備類型如下所述:
2.2.1 國(guó)標(biāo)/非國(guó)標(biāo)攝像頭;
2.2.2 傳感器,例如溫濕度、壓力傳感器等;
2.2.3 其他類型設(shè)備,例如巡檢小車(chē)、模具狀態(tài)監(jiān)控設(shè)備等。
支持PB 級(jí)以上數(shù)據(jù)存儲(chǔ),可使用非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行設(shè)備實(shí)時(shí)消息存儲(chǔ),該類數(shù)據(jù)庫(kù)且支持行列混合存儲(chǔ)。
為滿足大數(shù)據(jù)實(shí)時(shí)采集、存儲(chǔ),本文使用一種響應(yīng)式編程框架,提升數(shù)據(jù)采集性能,具體技術(shù)架構(gòu)如圖3 所示。采集到的數(shù)據(jù)通過(guò)網(wǎng)關(guān)進(jìn)行接收、推送、實(shí)時(shí)處理,最終存儲(chǔ)至數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)采用redis+Elasticsearch+mysql 相結(jié)合的方式進(jìn)行。
圖3 技術(shù)架構(gòu)圖
Project Reactor 是一個(gè)運(yùn)行在JVM上的反應(yīng)式編程基礎(chǔ)庫(kù),以“背壓”的形式管理數(shù)據(jù)處理,提供了可組合的異步序列API Flux 和Mono。Reactor 大大降低了異步編碼難度,Reactor 反應(yīng)庫(kù)擁有如下特點(diǎn):
3.1.1 可組合性和可讀性;
3.1.2 以流的形式進(jìn)行數(shù)據(jù)處理,為流中每個(gè)節(jié)點(diǎn)提供了豐富的操作性;
3.1.3 在Subscribe 之前,不會(huì)有任何事情發(fā)生;
3.1.4 支持背壓,消費(fèi)者可以向生產(chǎn)者發(fā)出信號(hào)表面排放率過(guò)高;
3.1.5 支持兩種反應(yīng)序列:hot 和cold。
多源化設(shè)備接入及大數(shù)據(jù)量設(shè)備消息實(shí)時(shí)采集、存儲(chǔ)是本課題實(shí)現(xiàn)的核心,業(yè)務(wù)框架如圖4 所示。
圖4 業(yè)務(wù)架構(gòu)設(shè)計(jì)圖
使用網(wǎng)絡(luò)組件管理各種網(wǎng)絡(luò)服務(wù)(MQTT、TCP 等),只負(fù)責(zé)接收/發(fā)送報(bào)文,不處理邏輯;使用接口協(xié)議進(jìn)行自定義消息解析,處理報(bào)文數(shù)據(jù);使用設(shè)備網(wǎng)關(guān)將設(shè)備接入,并將設(shè)備消息推送至事件總線;使用事件總線進(jìn)行進(jìn)程內(nèi)的數(shù)據(jù)轉(zhuǎn)發(fā),可將數(shù)據(jù)轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù)或進(jìn)行微信等消息推送。
協(xié)議主要由認(rèn)證器(Authenticator)、消息編解碼器(DeviceMessageCodec)、消息發(fā)送攔截器(DeviceMessageSenderInt erceptor)組成。
3.3.1 認(rèn)證器
不同網(wǎng)絡(luò)協(xié)議使用不同認(rèn)證器,主要用于設(shè)備認(rèn)證,接口定義如圖5 所示。
圖5 認(rèn)證器接口設(shè)計(jì)
3.3.2 消息編解碼器
設(shè)備網(wǎng)關(guān)從網(wǎng)絡(luò)組件中接收到報(bào)文后,會(huì)調(diào)用對(duì)應(yīng)協(xié)議包的消息編解碼器進(jìn)行處理,接口定義如圖6 所示。
圖6 編解碼器接口設(shè)計(jì)
3.3.3 消息發(fā)送攔截器
使用攔截器攔截消息發(fā)送和返回的動(dòng)作,通過(guò)修改參數(shù)等操作實(shí)現(xiàn)自定義邏輯,如:當(dāng)設(shè)備離線時(shí),將消息緩存到設(shè)備配置中,等設(shè)備上線時(shí)再重發(fā),如圖7 所示。
圖7 消息發(fā)送攔截器接口設(shè)計(jì)
本課題利用一套使用SQL 進(jìn)行實(shí)時(shí)數(shù)據(jù)處理的工具包,通過(guò)將SQL 翻譯為reactor 來(lái)進(jìn)行數(shù)據(jù)處理,主要應(yīng)用場(chǎng)景包括處理實(shí)時(shí)數(shù)據(jù)、聚合計(jì)算實(shí)時(shí)數(shù)據(jù)及跨數(shù)據(jù)源聯(lián)合數(shù)據(jù)處理。
例如,處理多個(gè)型號(hào)的設(shè)備數(shù)據(jù),如圖8 所示。
圖8 數(shù)據(jù)處理
本課題使用關(guān)系型及非關(guān)系型數(shù)據(jù)庫(kù)結(jié)合的方式進(jìn)行實(shí)時(shí)大數(shù)據(jù)采集存儲(chǔ),其中關(guān)系型數(shù)據(jù)庫(kù)MySQL 中存儲(chǔ)設(shè)備基礎(chǔ)信息,非關(guān)系型數(shù)據(jù)庫(kù)Elasticsearch 存儲(chǔ)設(shè)備消息,緩存及熱點(diǎn)數(shù)據(jù)存儲(chǔ)于redis。
3.5.1 MySQL 數(shù)據(jù)庫(kù)設(shè)計(jì)
其中設(shè)備實(shí)例信息存儲(chǔ)在dev_device_instance,設(shè)備產(chǎn)品存儲(chǔ)在dev_product, 協(xié)議存儲(chǔ)在dev_protocal,設(shè)備網(wǎng)關(guān)存儲(chǔ)在device_gateway,網(wǎng)絡(luò)組件配置存儲(chǔ)在network_config。
3.5.2 Elasticsearch 數(shù)據(jù)庫(kù)設(shè)計(jì)
本課題提供兩種Elasticsearch 存儲(chǔ)方案,默認(rèn)使用行式存儲(chǔ)方案。
方案一:使用elasticsearch 行式存儲(chǔ)方案存儲(chǔ)設(shè)備數(shù)據(jù),設(shè)備每一個(gè)屬性值都保存為一條索引記錄,其典型應(yīng)用場(chǎng)景是設(shè)備每次只會(huì)上報(bào)一部分屬性,同時(shí)支持讀取部分屬性數(shù)據(jù)的時(shí)候,優(yōu)點(diǎn)在于幾乎滿足任意場(chǎng)景下的屬性數(shù)據(jù)存儲(chǔ),缺點(diǎn)在于設(shè)備屬性個(gè)數(shù)較多時(shí),數(shù)據(jù)量指數(shù)增長(zhǎng),可能會(huì)影響性能。
方案二:使用elasticsearch 列式存儲(chǔ)方案存儲(chǔ)設(shè)備數(shù)據(jù),一個(gè)屬性作為一列,一條屬性消息作為一條索引記錄進(jìn)行存儲(chǔ),適合設(shè)備每次都上報(bào)所有的屬性值的場(chǎng)景,優(yōu)點(diǎn)是在屬性個(gè)數(shù)較多,且設(shè)備每次都會(huì)上報(bào)全部屬性時(shí),系統(tǒng)性能更高,缺點(diǎn)是設(shè)備必須上報(bào)全部屬性。
本課題接入多源設(shè)備,采集各類型設(shè)備數(shù)據(jù),并監(jiān)控設(shè)備接入量對(duì)系統(tǒng)性能的影響以及內(nèi)存消耗情況。
通過(guò)使用兩個(gè)本地Linux 虛擬機(jī),一個(gè)作為服務(wù)端,另一個(gè)作為壓力測(cè)試客戶端,服務(wù)器選用ThinkSystem ST558,64G 內(nèi)存;服務(wù)器虛擬機(jī):6 核30G 內(nèi)存,centOS;客戶端虛擬機(jī):4 核10G 內(nèi)存,centOS;初始數(shù)據(jù):200W 設(shè)備實(shí)例,使用模具狀態(tài)監(jiān)控設(shè)備作為物模型,進(jìn)行設(shè)備連接數(shù)以及設(shè)備消息處理速度壓力測(cè)試。
4.2.1 10W 設(shè)備連接,1000 并發(fā)請(qǐng)求連接,總計(jì)10W 連接,第一次CPU 平均使用率44%,JVM內(nèi)存4.58G;第二次CPU 平均使用率72%,JVM內(nèi)存4.89G;
4.2.2 30W 設(shè)備連接,1000 并發(fā)請(qǐng)求連接,總計(jì)30W 連接,第一次CPU 平均使用率64%,JVM內(nèi)存5.42G,第二次CPU 平均使用率78%,JVM內(nèi)存4.99G;
4.2.3 50W 設(shè)備連接,1000 并發(fā)請(qǐng)求連接,總計(jì)50W 連接,第一次CPU 平均使用率59%,JVM內(nèi)存5.46G,第二次CPU 平均使用率83%,JVM內(nèi)存7.92G。
設(shè)備接入流程如圖9 所示,本文以模具狀態(tài)監(jiān)控設(shè)備為例,描述其接入流程。
模具狀態(tài)監(jiān)控設(shè)備使用TCP 協(xié)議進(jìn)行數(shù)據(jù)傳輸,因此針對(duì)TCP 報(bào)文類型進(jìn)行自定義解析協(xié)議開(kāi)發(fā),解析完成打成jar 包導(dǎo)入平臺(tái)端,創(chuàng)建產(chǎn)品基本信息即可完成數(shù)據(jù)展示,部分核心代碼如圖10 所示。
模具狀態(tài)監(jiān)控設(shè)備根據(jù)TCP 協(xié)議報(bào)文創(chuàng)建對(duì)應(yīng)的實(shí)例信息并進(jìn)行數(shù)據(jù)展示,如圖11 所示。
圖11 模具狀態(tài)監(jiān)控設(shè)備
本文為滿足多類型、大數(shù)據(jù)量設(shè)備數(shù)據(jù)采集存儲(chǔ),設(shè)計(jì)并實(shí)現(xiàn)了一套大數(shù)據(jù)采集的架構(gòu),在進(jìn)行數(shù)據(jù)采集的基礎(chǔ)上增加了可行的緩存機(jī)制,實(shí)現(xiàn)了大數(shù)據(jù)實(shí)時(shí)監(jiān)控以及設(shè)備數(shù)據(jù)穩(wěn)定存儲(chǔ)的功能,為智能智造領(lǐng)域及智慧園區(qū)相關(guān)大數(shù)據(jù)分析和設(shè)備監(jiān)控提供了重要的數(shù)據(jù)依據(jù),也為以后的信息化建設(shè)鋪平了道路。