黃亮,鄒鵬,曹菁菁,胡健,顏澤鋅,黃小蝶
(1. 武漢理工大學(xué)水路交通控制全國重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430063;2. 武漢理工大學(xué)國家水運(yùn)安全工程技術(shù)研究中心,湖北 武漢 430063;3. 武漢理工大學(xué)智能交通系統(tǒng)研究中心,湖北 武漢 430063;4. 武漢理工大學(xué)交通與物流工程學(xué)院,湖北 武漢 430063;5. 北京四維圖新科技股份有限公司,北京 100093)
0 引言
2019年7月25日交通運(yùn)輸部印發(fā)《數(shù)字交通發(fā)展規(guī)劃綱要》,目的是推動(dòng)交通基礎(chǔ)設(shè)施規(guī)劃、設(shè)計(jì)、建造、養(yǎng)護(hù)、運(yùn)行管理等全要素、全周期數(shù)字化。交通基礎(chǔ)設(shè)施數(shù)字化通過匯集包括物聯(lián)網(wǎng) (IoT)[1-2]、地理信息系統(tǒng)(GIS)、建筑信息模型(BIM)[3]等在內(nèi)的多種技術(shù)手段,對交通基礎(chǔ)設(shè)施進(jìn)行全方位的信息感知,從而實(shí)現(xiàn)對交通基礎(chǔ)設(shè)施中各種信息的集成處理。其中,IoT點(diǎn)位監(jiān)測數(shù)據(jù)在實(shí)時(shí)狀態(tài)感知、結(jié)構(gòu)健康監(jiān)測、安全風(fēng)險(xiǎn)評估等方面具有重要價(jià)值[4-9]。文獻(xiàn)[10]設(shè)計(jì)了一套改進(jìn)型膨脹土邊坡GNSS/多源實(shí)時(shí)監(jiān)測技術(shù),對監(jiān)測數(shù)據(jù)進(jìn)行實(shí)時(shí)采集、存儲、處理和分析,進(jìn)而實(shí)現(xiàn)對邊坡的實(shí)時(shí)狀態(tài)監(jiān)測;文獻(xiàn)[11]提出了一種基于組合載荷響應(yīng)特征融合的橋梁結(jié)構(gòu)智能損傷識別方法,利用點(diǎn)位監(jiān)測數(shù)據(jù)實(shí)現(xiàn)了對橋梁損傷的識別和定位;文獻(xiàn)[12]將航道監(jiān)測信息作為客觀評價(jià)指標(biāo),通過熵權(quán)模型進(jìn)行科學(xué)賦值,實(shí)現(xiàn)了對引航安全風(fēng)險(xiǎn)的精準(zhǔn)評估;文獻(xiàn)[13]提出了一種以監(jiān)測點(diǎn)當(dāng)前變化量、累計(jì)變化量和變化率3個(gè)指標(biāo)為基礎(chǔ)的隧道風(fēng)險(xiǎn)數(shù)學(xué)模型和智能預(yù)警方法,該方法能夠及時(shí)有效地進(jìn)行風(fēng)險(xiǎn)預(yù)警。
監(jiān)測數(shù)據(jù)在數(shù)字化應(yīng)用中扮演著重要角色,然而,交通基礎(chǔ)設(shè)施涵蓋了道路、橋梁、隧道、軌道、航道等多種設(shè)施,涉及多種傳感器,產(chǎn)生的監(jiān)測數(shù)據(jù)存在數(shù)據(jù)結(jié)構(gòu)、傳輸協(xié)議和采樣頻率各不相同的問題[14-15]。此外,交通基礎(chǔ)設(shè)施數(shù)字化需要綜合應(yīng)用多種點(diǎn)位監(jiān)測數(shù)據(jù),這些數(shù)據(jù)往往又具有數(shù)量龐大、多源異構(gòu)且實(shí)時(shí)性強(qiáng)的特點(diǎn),給實(shí)時(shí)數(shù)據(jù)的快速接入帶來了一系列挑戰(zhàn)。
目前,主流的物聯(lián)網(wǎng)監(jiān)測數(shù)據(jù)接入方法主要包括基于Netty的數(shù)據(jù)接入[16-17]、基于Kafka的接入[18]、基于云平臺的接入等[19]。在這些技術(shù)的基礎(chǔ)上,國內(nèi)外學(xué)者進(jìn)行了多項(xiàng)與數(shù)據(jù)接入相關(guān)的研究。文獻(xiàn)[20]提出了一種由Flink和Kafka集成的工業(yè)大數(shù)據(jù)平臺,能夠?qū)崿F(xiàn)工業(yè)數(shù)據(jù)的接入、查詢與預(yù)警,但是仍存在接入速度慢、接入數(shù)據(jù)類型少的問題。文獻(xiàn)[21]基于Netty和Kafka開發(fā)了一個(gè)支持高并發(fā)、低延遲的數(shù)據(jù)接入平臺,能夠在萬級連接下實(shí)現(xiàn)快速響應(yīng),但是其系統(tǒng)較為簡單,整體性能不足以滿足實(shí)際需求。盡管上述技術(shù)在某些情況下能夠?qū)崿F(xiàn)交通設(shè)施監(jiān)測數(shù)據(jù)的部分接入,但是無法兼顧多源數(shù)據(jù)統(tǒng)一接入和高效大規(guī)模數(shù)據(jù)接入的要求,對超大規(guī)模全生命周期交通基礎(chǔ)設(shè)施多源異構(gòu)數(shù)據(jù)的實(shí)時(shí)接入以及存儲能力較弱,這對未來構(gòu)建交通基礎(chǔ)設(shè)施全要素?cái)?shù)字模型帶來極大的挑戰(zhàn)。
本文通過使用Netty高性能網(wǎng)絡(luò)框架和Kafka消息隊(duì)列[22-23],實(shí)現(xiàn)交通基礎(chǔ)設(shè)施監(jiān)測數(shù)據(jù)的高效大規(guī)模接入,并結(jié)合微服務(wù)的高可擴(kuò)展性,設(shè)計(jì)一種微服務(wù)+Netty+Kafka架構(gòu)的智能虛擬網(wǎng)關(guān)。針對交通基礎(chǔ)設(shè)施數(shù)據(jù)大規(guī)模傳輸?shù)奶攸c(diǎn),采用一種自定義的二進(jìn)制報(bào)文編碼格式,縮短數(shù)據(jù)報(bào)文所需的字節(jié)長度,提高網(wǎng)絡(luò)傳輸效率,進(jìn)一步使系統(tǒng)性能得到提升。最后,通過對系統(tǒng)接入速度、存儲速度和溯源速度進(jìn)行測試,以驗(yàn)證系統(tǒng)的數(shù)據(jù)接入性能。
1 交通設(shè)施監(jiān)測數(shù)據(jù)接入需求分析
部分燈浮監(jiān)測數(shù)據(jù)如表1所示,隧道圍巖拱頂變形監(jiān)測數(shù)據(jù)如表2所示。

表1 燈浮監(jiān)測數(shù)據(jù)示例Table 1 Buoy light monitoring data sample

表2 隧道圍巖變形監(jiān)測數(shù)據(jù)示例Table 2 Tunnel surrounding rock deformation monitoring data sample
從表1和表2可以看出,交通基礎(chǔ)設(shè)施監(jiān)測數(shù)據(jù)涵蓋位置、時(shí)間、電壓、電流、沉降等多種信息,這些數(shù)據(jù)在格式、內(nèi)容、精度和采樣頻率方面存在顯著差異,呈現(xiàn)出明顯的異構(gòu)性。隨著監(jiān)測數(shù)據(jù)持續(xù)產(chǎn)生,數(shù)據(jù)會不斷累積,數(shù)據(jù)中每個(gè)時(shí)間戳都記錄了最新的監(jiān)測信息,反映了設(shè)施的實(shí)時(shí)狀態(tài)。因此,時(shí)效性和逐步累積性是交通基礎(chǔ)設(shè)施監(jiān)測數(shù)據(jù)的兩大特征。上述數(shù)據(jù)特征對數(shù)據(jù)接入框架提出以下需求:
1)多源異構(gòu)監(jiān)測數(shù)據(jù)的統(tǒng)一接入需求。
數(shù)字交通基礎(chǔ)設(shè)施感知設(shè)備的數(shù)據(jù)呈現(xiàn)多源性,這一多源性不僅體現(xiàn)在數(shù)據(jù)來自不同的采集系統(tǒng),還在于數(shù)據(jù)源覆蓋多個(gè)地域。當(dāng)前主流數(shù)據(jù)傳輸系統(tǒng)采用了多種網(wǎng)絡(luò)通信協(xié)議,如超文本傳輸協(xié)議(HTTP)、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)、傳輸控制協(xié)議(TCP)等[24]。因此,接入框架需要具備對各種數(shù)據(jù)來源接入請求的支持和處理多協(xié)議、多節(jié)點(diǎn)并發(fā)操作的能力。
2)數(shù)據(jù)接入效率高的需求。
交通基礎(chǔ)設(shè)施監(jiān)測設(shè)備種類繁多,它們不斷產(chǎn)生龐大的數(shù)據(jù)量,并且數(shù)據(jù)持續(xù)上傳到數(shù)據(jù)接入系統(tǒng)。這一巨大的數(shù)據(jù)體量如果不能及時(shí)處理,就會導(dǎo)致數(shù)據(jù)積壓,可能會造成系統(tǒng)的阻塞。因此,需要高效、迅速地處理數(shù)據(jù)接入的請求。
3)數(shù)據(jù)接入規(guī)模大的需求。
交通基礎(chǔ)設(shè)施數(shù)量龐大,產(chǎn)生的監(jiān)測數(shù)據(jù)規(guī)模也相應(yīng)增大。為了應(yīng)對這種規(guī)模化的數(shù)據(jù),數(shù)據(jù)接入系統(tǒng)需要具備同時(shí)處理大規(guī)模數(shù)據(jù)的能力。
2 基于虛擬網(wǎng)關(guān)的點(diǎn)位數(shù)據(jù)接入
2.1 虛擬網(wǎng)關(guān)架構(gòu)
本文提出一個(gè)基于微服務(wù)+Netty+Kafka的智能虛擬網(wǎng)關(guān)架構(gòu)。該架構(gòu)整合了Netty框架,能夠支持HTTP、TCP、UDP這3種協(xié)議,使得多源異構(gòu)數(shù)據(jù)能夠按照相應(yīng)協(xié)議高效傳入系統(tǒng)。傳入的數(shù)據(jù)會被快速寫入Kafka集群,并通過該集群分發(fā)至其他存儲組件,以實(shí)現(xiàn)持久化存儲。同時(shí),微服務(wù)結(jié)合Kafka集群的使用,能夠應(yīng)對大規(guī)模數(shù)據(jù)的處理需求,實(shí)現(xiàn)系統(tǒng)的橫向擴(kuò)展能力。
本文交通基礎(chǔ)設(shè)施數(shù)據(jù)接入智能虛擬網(wǎng)關(guān)的整體結(jié)構(gòu)如圖1所示,其涵蓋了Web端網(wǎng)關(guān)配置界面、Nacos注冊服務(wù)以及核心處理等多個(gè)關(guān)鍵模塊。各個(gè)模塊的核心功能分別如下:

圖1 交通基礎(chǔ)設(shè)施數(shù)據(jù)接入智能虛擬網(wǎng)關(guān)結(jié)構(gòu)Fig.1 Traffic infrastructure data access intelligent virtual gateway structure
1)Web端網(wǎng)關(guān)配置界面:配置服務(wù)器,選擇Docker鏡像包,配置Kafka地址、端口、主題,增/刪/改數(shù)據(jù)字段,生成數(shù)據(jù)接收服務(wù)地址。
2)Nacos注冊服務(wù):注冊服務(wù),提供服務(wù)清單。
3)核心處理模塊:讀取配置,分配端口,拉取鏡像,啟動(dòng)容器,監(jiān)聽Nacos注冊,發(fā)現(xiàn)、修改Nginx配置,平滑重啟Nginx,驗(yàn)證服務(wù)可用性。
2.2 虛擬網(wǎng)關(guān)配置
本文設(shè)計(jì)并開發(fā)一種智能虛擬網(wǎng)關(guān)平臺[25],為用戶提供一套可視化監(jiān)測點(diǎn)位配置界面。通過智能網(wǎng)關(guān)配置界面,用戶能夠設(shè)定接入數(shù)據(jù)的類型、接入?yún)f(xié)議、字段名稱、字段類型、字段說明等關(guān)鍵信息,這些配置信息規(guī)定了監(jiān)測點(diǎn)位的配置方式。
在選擇服務(wù)器和鏡像后,系統(tǒng)會自動(dòng)在對應(yīng)服務(wù)器上拉取鏡像,并根據(jù)配置的Kafka地址啟動(dòng)相應(yīng)的后端服務(wù),這些服務(wù)會發(fā)布數(shù)據(jù)發(fā)送接口,按照接口規(guī)范進(jìn)行數(shù)據(jù)傳輸,實(shí)現(xiàn)與Kafka集群的接入。此外,系統(tǒng)可以根據(jù)網(wǎng)絡(luò)情況針對性地對Kafka進(jìn)行動(dòng)態(tài)配置,充分利用網(wǎng)絡(luò)本地特性,就近部署Kafka集群,能夠有效減輕網(wǎng)絡(luò)傳輸對系統(tǒng)性能的影響。為了滿足服務(wù)的橫向擴(kuò)展,當(dāng)單個(gè)集群網(wǎng)關(guān)達(dá)到性能瓶頸時(shí),也可以通過搭建多集群的方式[26],同時(shí)啟動(dòng)多網(wǎng)關(guān)分配服務(wù),設(shè)置一定的分配規(guī)則,比如:
1)基于hash的分配規(guī)則。根據(jù)客戶端IP地址進(jìn)行hash計(jì)算,將同一客戶端的請求分配給相同的服務(wù)器;根據(jù)請求的URL信息進(jìn)行hash計(jì)算,將相同URL的請求分配給相同服務(wù)器。
2)基于負(fù)載均衡的分配規(guī)則。將請求依次分配給不同的服務(wù)器,確保每臺服務(wù)器都有機(jī)會處理請求,或?qū)⒄埱蠓峙浣o當(dāng)前連接數(shù)最少的服務(wù)器,以達(dá)到負(fù)載均衡。
3)基于權(quán)重的分配規(guī)則。為每臺服務(wù)器分配一個(gè)權(quán)重,高權(quán)重的服務(wù)器獲得更多的請求,這在服務(wù)器性能不同時(shí)比較適用。
4)基于地理位置的分配規(guī)則。根據(jù)客戶端的地理位置信息,將請求分配給最近的服務(wù)器,降低網(wǎng)絡(luò)延遲,提高訪問速度。
圖2是智能網(wǎng)關(guān)的數(shù)據(jù)接入配置頁面,能夠顯示鐵路、港航、公路、民航的不同交通基礎(chǔ)設(shè)施感知設(shè)備類別,如信號設(shè)備、供電設(shè)備、RSU設(shè)備、路面監(jiān)測設(shè)備、氣象監(jiān)測設(shè)備、攝像頭、AIS設(shè)備、閘壩監(jiān)測設(shè)備、機(jī)場風(fēng)力傳感器等,此外,還可以選擇服務(wù)器、鏡像名、Kafka地址、Nginx路由等。每個(gè)交通基礎(chǔ)設(shè)施感知設(shè)備有默認(rèn)的數(shù)據(jù)字段,根據(jù)實(shí)際需要可以通過配置頁面進(jìn)行刪除、修改、增加,保存后就可以啟動(dòng)后臺數(shù)據(jù)接收服務(wù)并生成數(shù)據(jù)接收接口,提供給數(shù)據(jù)發(fā)送方進(jìn)行數(shù)據(jù)傳輸。

圖2 虛擬網(wǎng)關(guān)數(shù)據(jù)接入配置頁面Fig.2 Virtual gateway data access configuration page
2.3 多終端多協(xié)議數(shù)據(jù)接入
2.3.1 數(shù)據(jù)接入流程
數(shù)據(jù)接入流程如圖3所示。系統(tǒng)的數(shù)據(jù)輸入涵蓋各類交通基礎(chǔ)設(shè)施信息數(shù)據(jù)源,主要包括道路、鐵路、航標(biāo)等相關(guān)設(shè)施的點(diǎn)位監(jiān)測數(shù)據(jù)。原始數(shù)據(jù)通過HTTP/TCP/UDP協(xié)議與網(wǎng)關(guān)集群相連接,從而啟動(dòng)數(shù)據(jù)接入過程。根據(jù)不同連接協(xié)議和數(shù)據(jù)包類型,網(wǎng)關(guān)將數(shù)據(jù)分發(fā)至相應(yīng)的HTTP服務(wù)集群、TCP服務(wù)集群以及UDP服務(wù)集群,這些服務(wù)集群擁有可伸縮和可擴(kuò)展的特性。通過標(biāo)識(Topic),服務(wù)集群將經(jīng)過處理的數(shù)據(jù)傳輸至Kafka數(shù)據(jù)總線,進(jìn)而流入大數(shù)據(jù)存儲系統(tǒng)進(jìn)行有效的存儲和管理。同時(shí),數(shù)據(jù)也會被寫入Redis集群,其中庫名與Topic相匹配,而時(shí)間戳加上分區(qū)(PARTITION)則成為KEY,設(shè)置一定的超時(shí)時(shí)間以滿足數(shù)據(jù)回溯的需求。

圖3 數(shù)據(jù)接入流程Fig.3 Data access process
2.3.2 數(shù)據(jù)接入?yún)f(xié)議
虛擬網(wǎng)關(guān)支持HTTP、TCP、UDP這3種數(shù)據(jù)接入?yún)f(xié)議,對于每種協(xié)議下的數(shù)據(jù)格式做出相關(guān)定義,如下:
1)HTTP接入?yún)f(xié)議(傳感器使用最多)。
HTTP是基于TCP協(xié)議的一種應(yīng)用層傳輸協(xié)議,是一種使用最廣泛的協(xié)議類型。HTTP接入需要解析數(shù)據(jù)實(shí)體,數(shù)據(jù)正文形式如表3所示。

表3 HTTP數(shù)據(jù)正文形式Table 3 HTTP data body format
數(shù)據(jù)示例如下:
目前,綜合考慮性價(jià)比、可靠性和測速性能,基于傳感器的測速方法仍是普通環(huán)境下測速應(yīng)用的首選方法。由于測速傳感器的精度與價(jià)格成正比,高精度、高性能測速傳感器高昂的價(jià)格讓普通用戶望而卻步。因此針對常規(guī)精度測速傳感器,設(shè)計(jì)一種能保證高、中轉(zhuǎn)速區(qū)測速精度,并能有效改善低速區(qū)測速精度的寬范圍、實(shí)時(shí)濾波測速算法,對拓寬普通測速傳感器的應(yīng)用范圍具有重要的工程意義。
{
"lcp": "topic1",
"list":[
{"time":"2023-07-11_10:48:54","lng":109.093,"lat":21.498,"U":15.5,"I":0,"temperature":2.0,"humidity":52,"motor_nums":3,"Light_Intensity":5.0},
{"time":"2023-07-11_11:00:53","lng":109.092,"lat":21.498,"U":15.7,"I":0,"temperature":1.8,"humidity":46,"motor_nums":3,"Light_Intensity":5.0},
...
]}
2)TCP接入?yún)f(xié)議(大規(guī)模數(shù)據(jù)接入)。
在TCP協(xié)議下以二進(jìn)制形式封裝數(shù)據(jù)報(bào)文,如圖4所示,該報(bào)文采用big-endian字節(jié)順序。

圖4 TCP協(xié)議下的報(bào)文格式參考Fig.4 Message format reference under TCP protocol
(1)魔數(shù):占用4個(gè)字節(jié),固定為WHUT,用于在二進(jìn)制數(shù)據(jù)流中區(qū)分?jǐn)?shù)據(jù)報(bào)文。
(2)CRC32校驗(yàn)碼:占用4個(gè)字節(jié),對數(shù)據(jù)報(bào)文中的報(bào)文長度、命令I(lǐng)D以及協(xié)議報(bào)文字段3個(gè)部分的字節(jié)流求取CRC32校驗(yàn)碼。
(3)報(bào)文長度:占用4個(gè)字節(jié),包括命令I(lǐng)D以及協(xié)議報(bào)文字段的字節(jié)流長度。
(4)命令I(lǐng)D:占用4個(gè)字節(jié),從1開始編號,用以標(biāo)識報(bào)文所對應(yīng)的平臺業(yè)務(wù)。
(5)協(xié)議報(bào)文:占用可變字節(jié)長度,根據(jù)命令I(lǐng)D的不同,它所包含的字段也不一樣,其中心跳報(bào)文命令I(lǐng)D取值為1,無協(xié)議報(bào)文。
(6)String類型:字符串長度,占用4個(gè)字節(jié),字符串內(nèi)容以“