劉陽 杜文良
隨著廣西高速公路的快速發(fā)展,高速公路上的機(jī)電設(shè)備的安裝數(shù)量大幅增長,依賴傳統(tǒng)人工方法對機(jī)電設(shè)備巡檢、維護(hù)已顯得力不從心,因此迫切需要構(gòu)建高速公路機(jī)電運(yùn)維管理系統(tǒng)對高速公路上的機(jī)電設(shè)備進(jìn)行智能化管理。而該系統(tǒng)的機(jī)電設(shè)備數(shù)據(jù)分析、設(shè)備告警等功能依賴于數(shù)據(jù)采集系統(tǒng),所以構(gòu)建一套穩(wěn)定、可擴(kuò)展性強(qiáng)的高速公路機(jī)電設(shè)備運(yùn)維數(shù)據(jù)采集系統(tǒng)尤為重要。文章闡述了如何應(yīng)用Elasticsearch數(shù)據(jù)庫、Nginx-Tomcat集群技術(shù)、Kafka消息中間件開發(fā)運(yùn)維數(shù)據(jù)采集系統(tǒng),并介紹了該系統(tǒng)實際運(yùn)行效果。
高速公路;機(jī)電設(shè)備;智能化管理;設(shè)備監(jiān)控;運(yùn)維數(shù)據(jù)采集
U412.36+6-A-40-140-3
0?引言
隨著高速公路交通管理的信息化、智能化發(fā)展,機(jī)電設(shè)備在高速公路上應(yīng)用越來越多,地位越來越重要,對機(jī)電設(shè)備的養(yǎng)護(hù)要求也越來越高。為了實現(xiàn)機(jī)電設(shè)備的全生命周期管理,需要將機(jī)電設(shè)備的靜態(tài)信息(設(shè)備的類型、品牌、型號、數(shù)量、金額、采購時間等)和維護(hù)動態(tài)信息(設(shè)備的維護(hù)時間、地點、內(nèi)容、維護(hù)人員、巡檢、維護(hù)記錄、維護(hù)檔案等)以及實時狀態(tài)信息(如設(shè)備的工作電壓、電流、環(huán)境溫度、濕度、接口狀態(tài)、通信鏈路狀態(tài)等)通過數(shù)據(jù)采集系統(tǒng)進(jìn)行采集和存儲,為高速公路運(yùn)維系統(tǒng)的數(shù)據(jù)分析和業(yè)務(wù)應(yīng)用模塊提供數(shù)據(jù)依據(jù)。通過運(yùn)維系統(tǒng)的專家診斷模塊對故障進(jìn)行預(yù)警與精確判斷,智能派單,可以有效縮短機(jī)電設(shè)備的故障發(fā)現(xiàn)及修復(fù)時間,提高養(yǎng)護(hù)效率,改變傳統(tǒng)高速公路機(jī)電運(yùn)維被動、落后的局面。
1?系統(tǒng)架構(gòu)
系統(tǒng)由前端采集服務(wù)器與后端中心平臺組成。分布在前端采集點的前端采集模塊負(fù)責(zé)從各機(jī)電設(shè)備采集狀態(tài)數(shù)據(jù),匯總到采集匯總模塊,再通過http協(xié)議上傳至采集接收服務(wù)模塊。由于采集前端訪問并發(fā)量大,因此數(shù)據(jù)接收模塊采用服務(wù)器集群提供負(fù)載均衡,接收到數(shù)據(jù)后再由采集接收服務(wù)模塊推送到消息隊列中。數(shù)據(jù)預(yù)處理模塊從消息隊列中消費(fèi)消息,并按照指定格式規(guī)整數(shù)據(jù),將數(shù)據(jù)同時推送給Elasticsearch數(shù)據(jù)庫和專家系統(tǒng)。專家研判模塊根據(jù)規(guī)則分析實時數(shù)據(jù)和Elasticsearch數(shù)據(jù)庫中的數(shù)據(jù),生成輸出結(jié)果,存儲到MySql數(shù)據(jù)庫中。展示模塊從Mysql數(shù)據(jù)庫中讀取專家研判模塊的輸出結(jié)果,并展示到用戶界面中。其具體功能結(jié)構(gòu)如圖1所示。
2?前端數(shù)據(jù)采集模塊
在各個高速公路路段設(shè)置數(shù)據(jù)采集節(jié)點,該采集節(jié)點負(fù)責(zé)按照各機(jī)電設(shè)備的通信協(xié)議,定時采集本路段的所有可監(jiān)控的機(jī)電設(shè)備的狀態(tài)信息,并推送到中心平臺的消息中間件。采集節(jié)點負(fù)責(zé)向接收模塊發(fā)送心跳信息,報告本采集點的狀態(tài)。設(shè)定為每2 min向接收模塊發(fā)送心跳信息,接收模塊3次沒有收到心跳信息,會將該采集節(jié)點的狀態(tài)設(shè)置為連接中斷,直至再次接收到該節(jié)點的心跳消息后,將狀態(tài)設(shè)置為正常。一旦采集節(jié)點與中心平臺的通信連接斷開,中心平臺需要把該采集節(jié)點負(fù)責(zé)采集的區(qū)域設(shè)置為不可采集狀態(tài),并產(chǎn)生告警信息。
采集的規(guī)則必須事先在后臺定義,采集節(jié)點訂閱消息隊列的規(guī)則消息。采集節(jié)點在第一次啟動時,向中心平臺采集接收服務(wù)模塊請求下載采集規(guī)則數(shù)據(jù),然后將接收到的采集規(guī)則數(shù)據(jù)保存到指定目錄,以便采集模塊讀取。一旦采集中心的采集規(guī)則配置有變化,配置信息模塊需要實時將采集規(guī)則和采集范圍下發(fā)到采集模塊。在采集數(shù)據(jù)過程中,當(dāng)前端采集節(jié)點與平臺中心通信中斷時,應(yīng)當(dāng)把采集數(shù)據(jù)保存到緩存中,待通信恢復(fù)后再上傳。上傳數(shù)據(jù)要根據(jù)時間順序,優(yōu)先把離當(dāng)前時間最近的數(shù)據(jù)上傳,上傳成功后,再把該數(shù)據(jù)從數(shù)據(jù)庫中刪除。這樣可以保證采集機(jī)和中心平臺斷線的情況下,采集的設(shè)備信息不丟失。當(dāng)緩存的歷史數(shù)據(jù)量過大時,還能保證系統(tǒng)數(shù)據(jù)反映的是當(dāng)前的設(shè)備狀態(tài)。
系統(tǒng)前端采用SQLite實現(xiàn)數(shù)據(jù)緩存,他是一款簡單的數(shù)據(jù)庫,占用資源非常少,只需要幾百K的內(nèi)存,支持Windows/Linux/Unix等主流的操作系統(tǒng),同時能夠和很多程序語言相結(jié)合[1]。
3?采集接收服務(wù)模塊
由于高速公路上機(jī)電設(shè)備數(shù)量龐大,需要支持的并發(fā)請求量大,采集服務(wù)數(shù)據(jù)接收接口會產(chǎn)生單點故障,如果只采用一臺采集接收服務(wù)器且壞掉了,中心平臺就無法接收數(shù)據(jù)。因此采用服務(wù)器集群提供負(fù)載均衡,擴(kuò)展服務(wù)性能,提高吞吐量,可使得系統(tǒng)數(shù)據(jù)處理得到增強(qiáng),提高后端系統(tǒng)的靈活性和穩(wěn)定性。
設(shè)計采用Nginx-Tomcat負(fù)載均衡。Tomcat是一個免費(fèi)、開源代碼的Web應(yīng)用服務(wù)器,他具有部署簡單、支持多種平臺、可實現(xiàn)負(fù)載均衡等特點。Nginx作為反向代理服務(wù)器,實現(xiàn)負(fù)載均衡[2],具有高并發(fā)、消耗資源少、配置簡單、高穩(wěn)定性等優(yōu)點。采集節(jié)點發(fā)送的http請求由Nginx轉(zhuǎn)發(fā)到相應(yīng)的采集接收服務(wù)器,最后把返回的請求結(jié)果轉(zhuǎn)發(fā)給采集節(jié)點。
4?狀態(tài)數(shù)據(jù)存儲
采集前端采集到的設(shè)備狀態(tài)數(shù)據(jù)以JSON格式存入Elasticsearch。ELasticsearch是一個高度可擴(kuò)展的開源全文搜索和分析引擎,具有分布式、高擴(kuò)展、高實時的特點。高速公路機(jī)電設(shè)備的狀態(tài)數(shù)據(jù)具有種類多、結(jié)構(gòu)復(fù)雜的特點。設(shè)備狀態(tài)數(shù)據(jù)結(jié)構(gòu)的設(shè)計,以交換機(jī)設(shè)備為例,設(shè)計如下:
{
“設(shè)備類型”:“交換機(jī)”,
“設(shè)備編號”:“×××”,
“Ip地址”:“192.168.100.1”,
“端口速率”:[{
“序號”:“01”,
“數(shù)據(jù)”:100
},{
“序號”:“×××”,
“數(shù)據(jù)”:10
},…],
“端口狀態(tài)”:[{
“序號”:“01”,
“數(shù)據(jù)”:“關(guān)閉”
},{
“序號”:“×××”,
“數(shù)據(jù)”:“啟用”
},…]
}
該狀態(tài)數(shù)據(jù)具有多層對象嵌套和復(fù)雜數(shù)組的結(jié)構(gòu)。為了支持設(shè)備狀態(tài)的分析和故障智能診斷的應(yīng)用,以及表現(xiàn)層對設(shè)備狀態(tài)數(shù)據(jù)的展示,數(shù)據(jù)存儲架構(gòu)要能支持檢索任何設(shè)備的所有信息;支持結(jié)構(gòu)化檢索,如查找端口速率為1 000 Mbps以上的交換機(jī);支持用設(shè)備的關(guān)鍵字進(jìn)行全文檢索,找到相關(guān)設(shè)備的信息,并且能高亮顯示關(guān)鍵字;要能支持設(shè)備故障率、設(shè)備性能負(fù)荷等統(tǒng)計數(shù)據(jù)的分析。而利用Elasticsearch,這些要求都能夠比較簡單的實現(xiàn),但是如果要在關(guān)系型數(shù)據(jù)庫中表達(dá)這樣的數(shù)據(jù)結(jié)構(gòu)并實現(xiàn)同樣的功能要復(fù)雜得多。
由于要采集狀態(tài)數(shù)據(jù)的高速公路機(jī)電設(shè)備眾多,為了滿足快速增長的數(shù)據(jù)存儲和系統(tǒng)橫向擴(kuò)展需求,采用Elasticsearch集群構(gòu)建高可用、可擴(kuò)展的系統(tǒng),在存儲空間不足時,通過動態(tài)增加節(jié)點來實現(xiàn)系統(tǒng)擴(kuò)容?;贓lasticsearch的特性,使得系統(tǒng)具有海量數(shù)據(jù)存儲的水平伸縮性及搜索、分析的能力,并且隨時可用和按需擴(kuò)容。
5?消息隊列
采集節(jié)點上傳的狀態(tài)數(shù)據(jù)以及需要的規(guī)則數(shù)據(jù),由消息系統(tǒng)負(fù)責(zé)傳遞。系統(tǒng)使用Kafka作為消息中間件。Kafka是一個分布式流平臺,他可以構(gòu)建實時流數(shù)據(jù)管道,在系統(tǒng)或應(yīng)用程序之間可靠地獲取數(shù)據(jù),構(gòu)建轉(zhuǎn)換或響應(yīng)數(shù)據(jù)流的實時流應(yīng)用程序。應(yīng)用Kafka可將系統(tǒng)的消息中間件作為一個集群運(yùn)行于多個服務(wù)器上,這些服務(wù)器可以跨越多個數(shù)據(jù)中心,使系統(tǒng)更具有可擴(kuò)展、可靠、容錯高并發(fā)等特性。
在某些高速公路路段采集節(jié)點斷線一段時間后,再恢復(fù)連接時,因為節(jié)點的緩存積累了大量歷史數(shù)據(jù),會造成訪問量突然增高。為了保證這種突發(fā)流量劇增的情況下(這種情況比較少見),系統(tǒng)仍然能夠提供服務(wù),則假設(shè)以處理峰值時候的標(biāo)準(zhǔn)來構(gòu)建系統(tǒng),但這勢必會造成巨大的資源浪費(fèi)。而采用kafka作為中間件,可以在流量高峰期緩存消息,在訪問量恢復(fù)正常時,對消息進(jìn)行消費(fèi),可以用較低的代價解決突發(fā)流量劇增的情況。
本方案將kafka部署在linux系統(tǒng)上,由于Kafka服務(wù)依賴zookeeper,因此也需要在環(huán)境中部署zookeeper,為每個主題建立多個分區(qū),消費(fèi)組建立多個消費(fèi)者對分區(qū)進(jìn)行消費(fèi)操作,提高系統(tǒng)的并發(fā)性。為了實現(xiàn)多個消費(fèi)進(jìn)程消費(fèi)同一個主題,可以在創(chuàng)建主題時,指定分區(qū)數(shù)量和復(fù)制因子,或者在server.properties文件中設(shè)置num.partitions(分區(qū)數(shù))和default.replication.factor(默認(rèn)復(fù)制因子)參數(shù)。
6?系統(tǒng)應(yīng)用測試
目前實際部署的運(yùn)維系統(tǒng)中列入監(jiān)控的設(shè)備達(dá)3萬個,每個設(shè)備的狀態(tài)數(shù)據(jù)采集間隔是1 min,平均每秒有500個并發(fā)連接。我們在中心平臺部署兩臺nginx接入服務(wù)器和兩臺tomcat應(yīng)用服務(wù)器,實現(xiàn)數(shù)據(jù)接收服務(wù)負(fù)載均衡。部署兩臺kafka服務(wù)器集群,實現(xiàn)消息中間件服務(wù),為每個消息主題設(shè)置4個分區(qū),實現(xiàn)每組4個消費(fèi)線程對消息進(jìn)行消費(fèi)。經(jīng)過6個月時間的實際測試,系統(tǒng)能夠在高并發(fā)量的情況下穩(wěn)定運(yùn)行,期間偶爾因為網(wǎng)絡(luò)問題造成前端采集服務(wù)器斷線,積累的大量未上傳的數(shù)據(jù)在通信恢復(fù)時造成一段網(wǎng)絡(luò)流量高峰期,但經(jīng)過kafka的消息緩存,后端也可以平穩(wěn)地處理接收到的狀態(tài)數(shù)據(jù)。
隨著監(jiān)控路段的增加,受監(jiān)控的設(shè)備數(shù)還會不斷增長,可以在系統(tǒng)中添加服務(wù)器以實現(xiàn)系統(tǒng)性能的橫向擴(kuò)展。
7?結(jié)語
本文針對日益增長的高速公路機(jī)電設(shè)備運(yùn)行狀態(tài)的監(jiān)測需求,設(shè)計了高可擴(kuò)展性、可靠的系統(tǒng)架構(gòu)。該設(shè)計方案具有機(jī)電設(shè)備的靜態(tài)信息、維護(hù)動態(tài)信息、實時狀態(tài)信息,支持智能和非智能機(jī)電設(shè)備監(jiān)控,提供統(tǒng)一的機(jī)電設(shè)備終端信息交換和匯聚平臺。管理人員可以通過互聯(lián)網(wǎng)、移動端隨時隨地獲取機(jī)電設(shè)備的運(yùn)行狀態(tài)信息,降低運(yùn)維成本,提高高速公路養(yǎng)護(hù)效率,具有巨大的經(jīng)濟(jì)和社會效益,可有效支撐“數(shù)字廣西”建設(shè)。
參考文獻(xiàn):
[1]焦?娜,邵?羽,陳?軍,等.基于Android平臺的惡意文件(夾)隔離箱試驗系統(tǒng)[J].信息網(wǎng)絡(luò)安全,2012(9):32-34.
[2]朱建杰.高性能網(wǎng)絡(luò)社區(qū)的設(shè)計與實現(xiàn)[D].重慶:重慶大學(xué),2011.