許曉偉,王西剛,林 鋒
(北京首信科技股份有限公司,北京 100015)
當(dāng)前,萬(wàn)物互聯(lián)的泛在接入[1]、物聯(lián)網(wǎng)海量的異構(gòu)信息對(duì)物聯(lián)網(wǎng)技術(shù)的發(fā)展和應(yīng)用提出了更高要求。在物聯(lián)網(wǎng)數(shù)據(jù)服務(wù)的各環(huán)節(jié)中,將終端設(shè)備數(shù)據(jù)匯聚上報(bào)到特定的邏輯節(jié)點(diǎn)[2],在邏輯節(jié)點(diǎn)上部署匯聚系統(tǒng),并對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一的處理和管理,是實(shí)現(xiàn)物聯(lián)網(wǎng)數(shù)據(jù)有效應(yīng)用的重要前提條件。傳統(tǒng)上,物聯(lián)網(wǎng)的數(shù)據(jù)匯聚方法是采用“煙囪式”的垂直模式,即終端與匯聚系統(tǒng)直接對(duì)接、獨(dú)立管理;但隨著物聯(lián)網(wǎng)終端部署規(guī)模的不斷擴(kuò)大,匯聚系統(tǒng)接入物聯(lián)網(wǎng)終端的類型和數(shù)量不斷增加,且對(duì)接的協(xié)議與上報(bào)屬性越來(lái)越多,數(shù)據(jù)個(gè)性化要求越來(lái)越高,數(shù)據(jù)上報(bào)模塊的開發(fā)工作量及維護(hù)復(fù)雜度都急劇上升,這將導(dǎo)致匯聚系統(tǒng)和眾多終端廠商上報(bào)平臺(tái)不堪重負(fù)。
因此,在日益增多的物聯(lián)網(wǎng)終端不斷接入的情況下[3],針對(duì)物聯(lián)網(wǎng)個(gè)性化數(shù)據(jù)歸一匯聚實(shí)現(xiàn)方法的研究,有著極大的現(xiàn)實(shí)需求,能夠增強(qiáng)匯聚系統(tǒng)的自適應(yīng)能力,提升對(duì)物聯(lián)網(wǎng)終端業(yè)務(wù)數(shù)據(jù)的動(dòng)態(tài)適配能力,支撐物聯(lián)網(wǎng)數(shù)據(jù)的快速匯聚。
針對(duì)物聯(lián)網(wǎng)個(gè)性化數(shù)據(jù)的歸一匯聚,本文通過(guò)設(shè)計(jì)產(chǎn)品模板定制模塊和數(shù)據(jù)上報(bào)轉(zhuǎn)換模塊進(jìn)行相關(guān)過(guò)程的處理。
物聯(lián)網(wǎng)終端廠商創(chuàng)建產(chǎn)品并基于產(chǎn)品完成上報(bào)模板的定制,如圖1所示。
圖1 產(chǎn)品模板
產(chǎn)品模板可配置的內(nèi)容包括:(1)數(shù)據(jù)上報(bào)采用的協(xié)議,如HTTP、MQTT 等[4];(2)數(shù)據(jù)上報(bào)涉及的數(shù)據(jù)類型,包括設(shè)備、告警和心跳三類;(3)不同數(shù)據(jù)類型均支持配置公有屬性和自定義屬性;(4)模板中所有屬性均支持使用“自定義簡(jiǎn)寫”,定制個(gè)性化key;(5)產(chǎn)品及產(chǎn)品模板信息將被持久化到匯聚系統(tǒng)并進(jìn)行管理。
物聯(lián)網(wǎng)終端廠商使用配置好的產(chǎn)品模板,通過(guò)下面定義的數(shù)據(jù)上報(bào)轉(zhuǎn)換過(guò)程[5],完成數(shù)據(jù)上報(bào),如圖2所示。
圖2 終端數(shù)據(jù)上報(bào)轉(zhuǎn)換過(guò)程
數(shù)據(jù)上報(bào)轉(zhuǎn)換的過(guò)程包括:(1)終端廠商基于創(chuàng)建的產(chǎn)品模板進(jìn)行數(shù)據(jù)填報(bào);(2)終端廠商使用匯聚系統(tǒng)開放的通用上報(bào)API,攜帶填報(bào)數(shù)據(jù),進(jìn)行上報(bào);(3)匯聚系統(tǒng)對(duì)上報(bào)數(shù)據(jù)接口完成認(rèn)證后,可以正常接入終端廠商上報(bào)的設(shè)備、告警、心跳等數(shù)據(jù);(4)匯聚系統(tǒng)基于上報(bào)數(shù)據(jù)對(duì)應(yīng)的產(chǎn)品模板進(jìn)行屬性key 映射、轉(zhuǎn)換,最終得到匯聚系統(tǒng)定義的歸一化數(shù)據(jù)格式;(5)匯聚系統(tǒng)完成對(duì)上報(bào)數(shù)據(jù)的持久化處理。
匯聚系統(tǒng)數(shù)據(jù)來(lái)源包括各類物聯(lián)網(wǎng)終端和第三方終端廠商平臺(tái),匯聚方式以終端或第三方應(yīng)用平臺(tái)主動(dòng)上報(bào)數(shù)據(jù)為主、匯聚系統(tǒng)調(diào)用查詢?yōu)檩o。終端上報(bào)的數(shù)據(jù)包括但不限于終端固有屬性、位置信息、電量信息、網(wǎng)絡(luò)信息、業(yè)務(wù)信息、廠商標(biāo)識(shí)、終端標(biāo)識(shí)等。
匯聚系統(tǒng)支持HTTP、MQTT 等協(xié)議,支持對(duì)終端或第三方應(yīng)用平臺(tái)的接入認(rèn)證,支持物聯(lián)網(wǎng)數(shù)據(jù)傳輸上報(bào)[6],主要的匯聚功能包括終端注冊(cè)、更新、注銷,終端告警數(shù)據(jù)接入和健康心跳數(shù)據(jù)接入等,且匯聚系統(tǒng)的上報(bào)接口具備消息稽核能力,保證垂直應(yīng)用平臺(tái)和匯聚系統(tǒng)數(shù)據(jù)一致性。
匯聚系統(tǒng)支持產(chǎn)品模板的定制,是對(duì)上報(bào)數(shù)據(jù)進(jìn)行歸一化處理、轉(zhuǎn)化為系統(tǒng)統(tǒng)一標(biāo)準(zhǔn)數(shù)據(jù)以及對(duì)不同單位或量級(jí)的數(shù)據(jù)進(jìn)行橫向匯聚處理的基礎(chǔ)。
2.1.1 行業(yè)個(gè)性化模板定制
物聯(lián)網(wǎng)感知層包含多種物聯(lián)終端設(shè)備,這些設(shè)備又歸屬于不同的行業(yè)類型[7],如煙感、地磁、水位傳感器、井蓋、紅外感知等,不同的行業(yè)具備通用和特有的屬性,通用的屬性如設(shè)備制造商、設(shè)備型號(hào)、網(wǎng)絡(luò)相關(guān)信息、設(shè)備IP、地理位置信息、經(jīng)緯度信息、操作系統(tǒng)、剩余電量、設(shè)備已運(yùn)行時(shí)間等。行業(yè)特有的屬性如煙感行業(yè)特有的煙霧濃度屬性、井蓋行業(yè)特有的水位高度屬性等。
匯聚系統(tǒng)支持行業(yè)模板配置管理能力,旨在為每個(gè)行業(yè)提供一套通用的行業(yè)模板屬性集,作為產(chǎn)品模板定義時(shí)的屬性來(lái)源。行業(yè)模板包括如下配置維度:屬性名稱、簡(jiǎn)寫、單位、類型、層級(jí)屬性、描述等。
行業(yè)模板支持動(dòng)態(tài)更新,可將多個(gè)產(chǎn)品模板中的屬性合并提升成為一個(gè)行業(yè)模板屬性,可將某個(gè)產(chǎn)品模板中的某個(gè)屬性合并到對(duì)應(yīng)行業(yè)模板已有屬性中。行業(yè)模板的配置變動(dòng)不影響已有的產(chǎn)品模板及已有的產(chǎn)品數(shù)據(jù)匯聚流程。
2.1.2 產(chǎn)品個(gè)性化模板定制
匯聚系統(tǒng)以設(shè)備歸屬的行業(yè)類型作為一級(jí)類ft(first_type),以設(shè)備來(lái)源廠商作為二級(jí)類st(second_type),二者聯(lián)合定義一個(gè)具備全局唯一性的產(chǎn)品,即一個(gè)產(chǎn)品就是某個(gè)廠商提供的某一行業(yè)類型設(shè)備的集合。
匯聚系統(tǒng)支持終端廠商通過(guò)自服務(wù)的方式創(chuàng)建所在行業(yè)的產(chǎn)品和產(chǎn)品模板。產(chǎn)品模板通過(guò)產(chǎn)品一級(jí)類(即行業(yè)類型)從該行業(yè)的行業(yè)模板中繼承獲取到設(shè)備、告警和心跳屬性集合。終端廠商創(chuàng)建產(chǎn)品模板時(shí),優(yōu)先選擇并使用行業(yè)模板屬性,當(dāng)行業(yè)模板屬性不能滿足全部業(yè)務(wù)需要時(shí),可以自定義擴(kuò)展屬性[8]。
產(chǎn)品模板可配置維度包括:屬性名稱、簡(jiǎn)寫、單位、類型、層級(jí)、自定義簡(jiǎn)寫、描述等。其中“自定義簡(jiǎn)寫”是能體現(xiàn)終端平臺(tái)上報(bào)屬性個(gè)性化的關(guān)鍵。“簡(jiǎn)寫”是匯聚系統(tǒng)對(duì)某個(gè)屬性鍵的全局統(tǒng)一定義,而終端平臺(tái)可以在對(duì)應(yīng)的自定義簡(jiǎn)寫列中使用業(yè)務(wù)含義相同但屬性鍵不同的值進(jìn)行模板填報(bào),比如匯聚系統(tǒng)的某一個(gè)設(shè)備屬性是“設(shè)備編號(hào)”,匯聚系統(tǒng)將其定義簡(jiǎn)寫為“di”,終端平臺(tái)中定義設(shè)備編號(hào)的屬性鍵假設(shè)為“device_code”,那該終端平臺(tái)在創(chuàng)建產(chǎn)品模板時(shí),對(duì)應(yīng)的“設(shè)備編碼”屬性的自定義簡(jiǎn)寫可以填報(bào)為“device_code”,實(shí)際上報(bào)時(shí)也使用“device_code”作為設(shè)備編碼屬性的key 即可。同時(shí),自定義簡(jiǎn)寫的填報(bào)值還支持按“.”劃分父子層級(jí),比如“a.b”表示終端平臺(tái)上報(bào)該屬性的實(shí)際JSON 結(jié)構(gòu)為:{“a”:{“b”:“bvalue”}}。
產(chǎn)品模板支持屬性的默認(rèn)值配置。當(dāng)某屬性在模板中被配置為必填,但上報(bào)值為空時(shí),匯聚系統(tǒng)將使用該模板的該屬性配置的默認(rèn)值作為屬性上報(bào)值。產(chǎn)品及產(chǎn)品模板創(chuàng)建成功后會(huì)被匯聚系統(tǒng)持久化存儲(chǔ)。
2.2.1 數(shù)據(jù)上報(bào)接口調(diào)用
匯聚系統(tǒng)向各終端廠商提供一套通用的數(shù)據(jù)上報(bào)API 接口,該接口基于產(chǎn)品接收并處理終端廠商的上報(bào)準(zhǔn)入認(rèn)證、終端開銷戶、告警數(shù)據(jù)上報(bào)、心跳監(jiān)控?cái)?shù)據(jù)上報(bào)等[9]。
數(shù)據(jù)上報(bào)API 接口通過(guò)負(fù)載均衡網(wǎng)關(guān)對(duì)外提供,實(shí)現(xiàn)接口高并發(fā)和高可用。終端平臺(tái)依據(jù)匯聚系統(tǒng)提供的統(tǒng)一API規(guī)范完成上報(bào)客戶端接口編程,使用定制的產(chǎn)品及產(chǎn)品模板,編制上報(bào)請(qǐng)求體,向匯聚系統(tǒng)按照先設(shè)備注冊(cè)后上報(bào)告警數(shù)據(jù)的流程操作,同時(shí)定時(shí)發(fā)起設(shè)備的心跳健康監(jiān)控?cái)?shù)據(jù)上報(bào)。
2.2.2 規(guī)則引擎過(guò)濾處理
匯聚系統(tǒng)通用上報(bào)接口接收到終端上報(bào)的數(shù)據(jù)后,通過(guò)規(guī)則引擎模塊對(duì)數(shù)據(jù)進(jìn)行合規(guī)性檢查過(guò)濾。規(guī)則列表包含:請(qǐng)求體整體格式檢查、上報(bào)數(shù)據(jù)產(chǎn)品標(biāo)識(shí)匹配檢查、產(chǎn)品模板匹配及模板數(shù)據(jù)格式合法性校驗(yàn)等。如果在規(guī)則檢測(cè)鏈中發(fā)現(xiàn)不合規(guī)則項(xiàng),直接響應(yīng)失敗消息并攜帶錯(cuò)誤碼,避免不合法數(shù)據(jù)上報(bào)[10]。
規(guī)則引擎通過(guò)增強(qiáng)分布式協(xié)同,加強(qiáng)了數(shù)據(jù)多樣性執(zhí)行,支持動(dòng)態(tài)分布式部署以降低單服務(wù)器負(fù)載壓力,為匯聚系統(tǒng)提供足夠和必要的數(shù)據(jù)處理能力。
規(guī)則引擎使用規(guī)則庫(kù)、策略處理。引入分布式部署后,設(shè)備上報(bào)數(shù)據(jù)會(huì)通過(guò)隊(duì)列分發(fā)到不同的服務(wù)器,根據(jù)規(guī)則庫(kù)、策略分配進(jìn)行篩檢處理,根據(jù)業(yè)務(wù)需要進(jìn)行推送、落地及后續(xù)流程的繼續(xù)處理。規(guī)則引擎支持分布式擴(kuò)展,當(dāng)業(yè)務(wù)量增加時(shí),匯聚系統(tǒng)對(duì)規(guī)則引擎動(dòng)態(tài)擴(kuò)展保證數(shù)據(jù)處理能力及擴(kuò)展能力。
如圖3所示,具體規(guī)則處理流程如下:(1)首先規(guī)則引擎預(yù)加載所有設(shè)備唯一標(biāo)識(shí)deviceId 與該設(shè)備掛鉤的規(guī)則表達(dá)式的對(duì)應(yīng)關(guān)系到緩存;(2)當(dāng)設(shè)備的上報(bào)數(shù)據(jù)到達(dá)規(guī)則引擎并需要進(jìn)行規(guī)則校驗(yàn)時(shí),直接獲取上報(bào)的相關(guān)屬性與預(yù)加載的相應(yīng)信息并計(jì)算出結(jié)果即可。
圖3 規(guī)則引擎處理流程
2.2.3 數(shù)據(jù)歸一化轉(zhuǎn)換處理
通過(guò)規(guī)則引擎校驗(yàn)無(wú)誤后,匯聚系統(tǒng)認(rèn)為上報(bào)數(shù)據(jù)是合法的,但該數(shù)據(jù)還不是匯聚系統(tǒng)要求的規(guī)范數(shù)據(jù),需要進(jìn)一步對(duì)上報(bào)數(shù)據(jù)進(jìn)行歸一化轉(zhuǎn)換處理。
匯聚系統(tǒng)提供數(shù)據(jù)歸一化處理能力,依據(jù)對(duì)應(yīng)的產(chǎn)品模板,對(duì)上報(bào)的個(gè)性化屬性進(jìn)行映射轉(zhuǎn)換。根據(jù)上報(bào)數(shù)據(jù)的產(chǎn)品標(biāo)識(shí)(ft、st)從匯聚系統(tǒng)獲取對(duì)應(yīng)產(chǎn)品模板及屬性列表,遍歷屬性列表,逐屬性獲取“自定義簡(jiǎn)寫”作為key 以及“簡(jiǎn)寫”作為value,生成映射關(guān)系表T1;基于T1 中的key,對(duì)上報(bào)數(shù)據(jù)進(jìn)行逐一匹配。定義T2 作為最終生成的匯聚系統(tǒng)規(guī)范JSON 對(duì)象。當(dāng)匹配到結(jié)果時(shí),使用T1 中的value 作為T2 的key,使用匹配到的上報(bào)數(shù)據(jù)值作為T2 的value,最終得到的T2 是符合匯聚系統(tǒng)統(tǒng)一數(shù)據(jù)格式規(guī)范的JSON 對(duì)象數(shù)據(jù)。匯聚系統(tǒng)將T2 按不同的數(shù)據(jù)類型(設(shè)備、告警、心跳)將上報(bào)數(shù)據(jù)歸入對(duì)應(yīng)的消息平臺(tái)隊(duì)列主題中,完成數(shù)據(jù)的歸一化匯聚。
匯聚系統(tǒng)消息隊(duì)列各主題的各訂閱服務(wù)分別產(chǎn)生消費(fèi)數(shù)據(jù),會(huì)依次完成數(shù)據(jù)匯聚持久化處理、數(shù)據(jù)統(tǒng)計(jì)分析、數(shù)據(jù)北向應(yīng)用處理等后續(xù)系列數(shù)據(jù)應(yīng)用場(chǎng)景的業(yè)務(wù)流程。
近年來(lái),物聯(lián)網(wǎng)產(chǎn)業(yè)蓬勃發(fā)展,數(shù)以億計(jì)的泛感知終端設(shè)備接入網(wǎng)絡(luò)形成海量數(shù)據(jù),物聯(lián)網(wǎng)應(yīng)用呈現(xiàn)爆發(fā)性增長(zhǎng)。在物聯(lián)網(wǎng)終端不斷增多并持續(xù)接入的場(chǎng)景下,本文所述的物聯(lián)網(wǎng)個(gè)性化數(shù)據(jù)歸一匯聚的實(shí)現(xiàn)方法,強(qiáng)化了匯聚系統(tǒng)的數(shù)據(jù)匯聚功能,增強(qiáng)了對(duì)個(gè)性化數(shù)據(jù)的歸一處理能力,有力支撐了終端廠商個(gè)性化數(shù)據(jù)的上報(bào),可促進(jìn)支持物聯(lián)網(wǎng)業(yè)務(wù)數(shù)據(jù)的匯聚接入,推動(dòng)物聯(lián)網(wǎng)應(yīng)用的發(fā)展。