高雪 臧金環(huán)
(中汽信息科技(天津)有限公司,天津 300000)
近年來,大數(shù)據(jù)技術(shù)發(fā)展迅速,車輛運(yùn)行數(shù)據(jù)采集和積累也達(dá)到了大數(shù)據(jù)的應(yīng)用水平。在此背景下,汽車行業(yè)開始數(shù)字化轉(zhuǎn)型,向人工智能邁進(jìn)。汽車主機(jī)廠也開始借助大數(shù)據(jù)技術(shù)來研究車輛監(jiān)控系統(tǒng)[1-8]。目前行業(yè)內(nèi)對(duì)車輛的監(jiān)控已經(jīng)不滿足于簡(jiǎn)單的數(shù)據(jù)監(jiān)控,對(duì)大數(shù)據(jù)分析也有更高的要求,實(shí)現(xiàn)車輛更智能化的全面監(jiān)控是目前汽車行業(yè)的主流需求。
從技術(shù)層面來看,Java 作為面向?qū)ο缶幊陶Z言的代表,已經(jīng)是應(yīng)用系統(tǒng)的主流開發(fā)語言[9-10],目前已在互聯(lián)網(wǎng)(WEB)應(yīng)用開發(fā)領(lǐng)域得到廣泛應(yīng)用。Python語言在實(shí)現(xiàn)面向?qū)ο缶幊掏瑫r(shí),還提供了高效的高級(jí)數(shù)據(jù)結(jié)構(gòu),具有豐富和強(qiáng)大的類型庫[11-12]。結(jié)合2 種編程語言各自優(yōu)勢(shì),對(duì)2者進(jìn)行整合開發(fā),既滿足了車輛監(jiān)控系統(tǒng)設(shè)計(jì)功能要求,又提高了開發(fā)靈活性和開發(fā)效率。但是經(jīng)過調(diào)研發(fā)現(xiàn),目前整車企業(yè)所應(yīng)用的車輛監(jiān)控系統(tǒng)還處于起步、不斷更新階段,有很多可優(yōu)化空間。
本文提出了基于融合模型的車輛監(jiān)控系統(tǒng),實(shí)現(xiàn)了在車輛監(jiān)控系統(tǒng)中集成業(yè)務(wù)平臺(tái)與算法平臺(tái)的功能,并且在運(yùn)維、部署時(shí)互相解耦、互不影響,保證在滿足需求的前提下,對(duì)融合模型的技術(shù)方案做了創(chuàng)新優(yōu)化。融合模型的研究具有行業(yè)重要價(jià)值,實(shí)時(shí)數(shù)據(jù)和模型分析相結(jié)合才真正起到了車輛運(yùn)行監(jiān)控的目的和意義;營(yíng)銷數(shù)據(jù)和數(shù)據(jù)分析相結(jié)合的銷量監(jiān)控是汽車行業(yè)銷售市場(chǎng)上提高競(jìng)爭(zhēng)力的有力工具。
車輛監(jiān)控系統(tǒng)架構(gòu)主要是由業(yè)務(wù)平臺(tái)和算法平臺(tái)融合而成。車輛運(yùn)行數(shù)據(jù)由車載通信終端(Telematics Box, T-Box)實(shí)時(shí)上傳,數(shù)據(jù)報(bào)文通過卡夫卡(Kafka)接入服務(wù)器,報(bào)文分為2路:
(1)與重型車排放遠(yuǎn)程監(jiān)控平臺(tái)(以下簡(jiǎn)稱:國家平臺(tái))交互進(jìn)行備案轉(zhuǎn)發(fā);
(2)解析入庫到大數(shù)據(jù)集群中,抽取到關(guān)系型數(shù)據(jù)庫和遠(yuǎn)程字典服務(wù)(Remote Dictionary Server,Redis)緩存中,供平臺(tái)進(jìn)行數(shù)據(jù)讀取。
實(shí)時(shí)數(shù)據(jù)既做業(yè)務(wù)平臺(tái)實(shí)時(shí)監(jiān)控展示,又輸入到算法平臺(tái)中進(jìn)行數(shù)據(jù)統(tǒng)計(jì)分析,并將算法模塊嵌入到監(jiān)控系統(tǒng)中,實(shí)現(xiàn)基于融合模型的車輛監(jiān)控系統(tǒng)設(shè)計(jì)開發(fā),系統(tǒng)總體技術(shù)架構(gòu)如圖1所示。
圖1 系統(tǒng)總體技術(shù)架構(gòu)
在車輛監(jiān)控系統(tǒng)技術(shù)架構(gòu)中用到了大數(shù)據(jù)存儲(chǔ)、關(guān)系型數(shù)據(jù)庫、緩存和中間件技術(shù)棧,在大數(shù)據(jù)存儲(chǔ)部分依賴于Hadoop 大數(shù)據(jù)架構(gòu),與國家平臺(tái)交互時(shí)采用消息隊(duì)列中間件(Rabbit Message Queue, Rabbit MQ)。業(yè)務(wù)平臺(tái)和算法平臺(tái)部署成2 個(gè)獨(dú)立的服務(wù),通過應(yīng)用程序接口(Application Program Interface,API)進(jìn)行通信。
圖2 所示為該系統(tǒng)的WEB 端展示。菜單中分為數(shù)據(jù)質(zhì)量監(jiān)控、車輛異常監(jiān)測(cè)、大數(shù)據(jù)分析、細(xì)分市場(chǎng)、用戶行為和系統(tǒng)監(jiān)控等共9項(xiàng),每項(xiàng)數(shù)據(jù)可以展開分析,其中“用戶行為”可以展開為11項(xiàng)分析數(shù)據(jù)。
圖2 系統(tǒng)WEB端展示
車輛監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)部分,從總體功能到分模塊進(jìn)行闡述,模塊劃分為2部分:系統(tǒng)業(yè)務(wù)平臺(tái)和系統(tǒng)算法平臺(tái)。
車輛監(jiān)控系統(tǒng)是集數(shù)據(jù)采集、數(shù)據(jù)分析、數(shù)據(jù)計(jì)算、數(shù)據(jù)展示、數(shù)據(jù)監(jiān)控和預(yù)警為一身的監(jiān)控平臺(tái)。系統(tǒng)總體功能分為業(yè)務(wù)模塊和算法模塊2大部分。系統(tǒng)總體功能架構(gòu)如圖3。
圖3 系統(tǒng)總體功能架構(gòu)
(1)業(yè)務(wù)模塊
業(yè)務(wù)模塊是由Java代碼編寫實(shí)現(xiàn),主要功能為:對(duì)車輛總體情況的監(jiān)控展示、數(shù)據(jù)監(jiān)測(cè)、報(bào)表功能和系統(tǒng)管理。
(2)算法模塊
算法模塊是由Java嵌套Python代碼來實(shí)現(xiàn),對(duì)業(yè)務(wù)模塊提供API調(diào)用,主要功能為:細(xì)分市場(chǎng)分析、加油點(diǎn)分析、電池安全預(yù)警、路況分析、載重分析等。
業(yè)務(wù)平臺(tái)采用Java 編碼實(shí)現(xiàn)。主流開發(fā)框架采用SpringBoot+VUE 架構(gòu),前后端分離部署,關(guān)系型數(shù)據(jù)庫采用MySQL,緩存采用Redis,消息隊(duì)列采用RabbitMQ,中間件采用Kafka,大數(shù)據(jù)存儲(chǔ)采用Hadoop 集群技術(shù)棧,實(shí)現(xiàn)了對(duì)車輛數(shù)據(jù)監(jiān)控與預(yù)警,系統(tǒng)與TBox和國家平臺(tái)的3方交互。技術(shù)架構(gòu)如圖4所示。
圖4 業(yè)務(wù)平臺(tái)技術(shù)架構(gòu)
算法平臺(tái)采用Java集成Python腳本的編碼實(shí)現(xiàn),這樣設(shè)計(jì)的目的是既能充分利用Python 編碼在大數(shù)據(jù)分析上的靈活性、擴(kuò)展性,又能充分利用Java 框架的外殼使其自成獨(dú)立服務(wù),并且能通過對(duì)外提供的API 和業(yè)務(wù)平臺(tái)進(jìn)行融合,達(dá)到融合模型的效果。整合方案采用的技術(shù)方式為:Python 代碼作為文件夾放到Java 框架的資源文件夾(Resource)下,通過代碼中命令行進(jìn)行調(diào)用執(zhí)行Python 腳本,技術(shù)架構(gòu)如圖5 所示。
圖5 算法平臺(tái)技術(shù)架構(gòu)
針對(duì)本研究中采用的融合模型有2 種開發(fā)語言:Java和Python。常用的融合方式主要有2種方案:
(1)Jython(直接在Java中執(zhí)行Python語句);
(2)通過命令行運(yùn)行Python代碼。
本研究采用的是第3 種開發(fā)語言方案,即將Java調(diào)取Python的代碼封裝一下,對(duì)外提供API,然后與業(yè)務(wù)平臺(tái)融合(方案(3))。
第3種封裝Python代碼算法方案和第2種方案的不同點(diǎn)在于,第3 種方案算法部分封裝了一層Java 外殼,可以作為一個(gè)單獨(dú)的算法平臺(tái)進(jìn)行獨(dú)立部署,而第2種方案是和業(yè)務(wù)平臺(tái)代碼融合在一起,耦合性更強(qiáng)[13-20]。
將3種方案從需求滿足、可維護(hù)性、技術(shù)實(shí)現(xiàn)的難易程度3個(gè)維度進(jìn)行對(duì)比,如表1所示。
表1 方案對(duì)比
經(jīng)過驗(yàn)證顯示,3種技術(shù)方案都能滿足功能需求,技術(shù)實(shí)現(xiàn)難度都不大。
但是從可維護(hù)性上考慮,Jython 和通過Python 命令直接調(diào)用的開發(fā)語言,都是將算法平臺(tái)代碼和業(yè)務(wù)模塊代碼集成在一起,不論哪一部分出現(xiàn)問題都會(huì)直接影響監(jiān)控系統(tǒng)的正常運(yùn)行。同時(shí)Jython 依賴于Python 版本,如果停止維護(hù)導(dǎo)致版本過舊,則會(huì)影響功能開發(fā)的實(shí)現(xiàn)。本文優(yōu)化方法為把調(diào)取Python 代碼算法部分封裝Java外殼,對(duì)業(yè)務(wù)平臺(tái)提供API,實(shí)現(xiàn)了代碼解耦,算法模塊出現(xiàn)故障不會(huì)影響監(jiān)控系統(tǒng)正常運(yùn)行,故采用優(yōu)化后的方案3。
通過方案對(duì)比分析后,本文提出的算法模塊封裝方案為最優(yōu)選擇,在該方案中共采用了4個(gè)API調(diào)用,如圖6所示為技術(shù)方案實(shí)現(xiàn)邏輯。
圖6 技術(shù)方案實(shí)現(xiàn)邏輯
先調(diào)用模型開始計(jì)算接口,觸發(fā)算法模型運(yùn)算。運(yùn)算過程中可以通過調(diào)用計(jì)算進(jìn)度接口來獲取運(yùn)算進(jìn)度比例,也可以通過調(diào)用停掉模型服務(wù)的接口隨時(shí)停止計(jì)算。當(dāng)模型計(jì)算進(jìn)度為100%時(shí),便可以通過獲取結(jié)果文件接口的方式獲取最終生成的運(yùn)算結(jié)果。
除了功能測(cè)試外,也對(duì)3 種技術(shù)方案分別進(jìn)行了性能測(cè)試,通過API 調(diào)用的方式實(shí)現(xiàn)了從模型計(jì)算到獲取結(jié)果文件的全過程。本小節(jié)對(duì)每部分實(shí)現(xiàn)的核心代碼進(jìn)行展示。
(1)模型開始計(jì)算
//API 調(diào)用時(shí),輸入模型計(jì)算參數(shù),體現(xiàn)了模型靈活性,參數(shù)可調(diào)節(jié)。
//更新數(shù)據(jù)庫表中計(jì)算狀態(tài)marketService.updateStatusByFileName(fileName);
(2)獲取計(jì)算進(jìn)度
//通過API 返回的字符串信息,獲取計(jì)算進(jìn)度比例
(3)停掉模型
//殺死進(jìn)程,終止模型計(jì)算過程
result=remote.callRemoteServer("/market/market/restart",null);
(4)獲取結(jié)果文件
//通過獲取文件存放路徑,并返回給前端url訪問路徑的方式來實(shí)現(xiàn)。結(jié)果文件以csv格式生成。
在大數(shù)據(jù)時(shí)代,算法模型應(yīng)用非常廣泛。本文中提出的融合模型在車輛監(jiān)控領(lǐng)域應(yīng)用廣泛,主要集中在對(duì)車輛運(yùn)行數(shù)據(jù)和車輛銷量數(shù)據(jù)的監(jiān)控[21-25],下面分別對(duì)2方面應(yīng)用做如下闡述。
基于融合模型的車輛監(jiān)控系統(tǒng)可應(yīng)用于車輛運(yùn)行數(shù)據(jù)監(jiān)控,將車輛運(yùn)行數(shù)據(jù)及算法分析結(jié)合起來。該應(yīng)用使對(duì)車輛運(yùn)行數(shù)據(jù)的監(jiān)控更智能化,滿足客戶對(duì)于車輛運(yùn)行監(jiān)控的全面要求。能夠更及時(shí)掌握車輛運(yùn)行情況,包括對(duì)運(yùn)行中的故障車輛進(jìn)行響應(yīng)。
車輛運(yùn)行數(shù)據(jù)包括的業(yè)務(wù)板塊是車輛運(yùn)行實(shí)時(shí)數(shù)據(jù)監(jiān)控,算法模塊是對(duì)車輛數(shù)據(jù)傳遞丟包率、丟條率、細(xì)分市場(chǎng)、電池狀況、路況信息、用戶畫像、油耗分析監(jiān)控。通過Kafka發(fā)布訂閱的方式接入汽車團(tuán)隊(duì)軟件過程(Team Software Process, TSP)服務(wù)器原始數(shù)據(jù)信息,按分區(qū)進(jìn)行大數(shù)據(jù)存儲(chǔ)供監(jiān)控系統(tǒng)使用。目前,包括家用乘用車在內(nèi)的汽車是很普遍的交通工具,車輛數(shù)量很多,每天產(chǎn)生的運(yùn)行數(shù)據(jù)量大。車輛故障問題、運(yùn)行問題也引起廣泛重視,人工已經(jīng)無法分析海量運(yùn)行數(shù)據(jù),所以通過車輛監(jiān)控系統(tǒng)中調(diào)用算法模型的方式能進(jìn)行海量數(shù)據(jù)分析。
基于融合模型的車輛監(jiān)控系統(tǒng)同樣適用于銷量數(shù)據(jù)監(jiān)控,對(duì)于整車企業(yè)來說,車輛運(yùn)行是一方面,車輛的銷量也同等重要。
車輛銷量數(shù)據(jù)包括的業(yè)務(wù)模塊是對(duì)車輛庫存、出庫、回款、末銷數(shù)據(jù)、存銷比、銷售目標(biāo)完成情況的監(jiān)控,算法模塊做車輛銷量的預(yù)測(cè)分析、銷量的聚集省份、城市分析??梢酝ㄟ^API 請(qǐng)求、文件導(dǎo)入方式獲取車輛品牌銷量,按月維度進(jìn)行統(tǒng)計(jì)和更新。由于營(yíng)銷數(shù)據(jù)單獨(dú)通過Excel工具進(jìn)行分析,數(shù)據(jù)量大,工作繁瑣,所以此時(shí)通過車輛監(jiān)控系統(tǒng)中調(diào)用算法模型的方式更簡(jiǎn)單、高效。
本文基于融合模型的車輛監(jiān)控系統(tǒng)是以車輛運(yùn)行數(shù)據(jù)為基礎(chǔ)的設(shè)計(jì)與實(shí)現(xiàn)。圖7 和圖8 所示,是該系統(tǒng)將算法模塊嵌入到業(yè)務(wù)系統(tǒng)后的可視化界面展示,即模型計(jì)算界面與模型列表界面。
圖7 模型計(jì)算界面
圖8 模型列表界面
本文所設(shè)計(jì)實(shí)現(xiàn)的系統(tǒng)中,通過融合模型解決方案,將業(yè)務(wù)平臺(tái)與算法平臺(tái)結(jié)合,并在WEB端做了算法模型操作的可視化界面,為用戶提供了執(zhí)行算法模型運(yùn)算的入口。如圖8 是系統(tǒng)中細(xì)分市場(chǎng)模型的展示,該部分設(shè)置了模型列表展示和模型新建功能。
在模型列表展示菜單下可以對(duì)所有操作過的運(yùn)算進(jìn)行查看,查看已保存或正在運(yùn)行模型的運(yùn)算參數(shù),并可以進(jìn)行暫停操作,也可通過點(diǎn)擊分析跳轉(zhuǎn)到模型新建頁面。列表中清晰地展示了模型名稱、創(chuàng)建人、創(chuàng)建時(shí)間和模型運(yùn)行狀態(tài),方便用戶查看。
模型新建頁面采用流程圖形式展示,可以讓用戶清晰地看出模型運(yùn)算環(huán)節(jié),并可以進(jìn)行模型參數(shù)配置,數(shù)據(jù)源選擇,點(diǎn)擊“計(jì)算”即可觸發(fā)一次模型運(yùn)算,保存后便可在模型列表中新增一條數(shù)據(jù),也可通過計(jì)算結(jié)果來查看運(yùn)行進(jìn)度,導(dǎo)出最終結(jié)果文件。
本文通過Java 開發(fā)的業(yè)務(wù)平臺(tái)和Python 開發(fā)的算法平臺(tái)進(jìn)行融合,研究出了一套通過技術(shù)方案優(yōu)化的融合模型,并基于此實(shí)現(xiàn)對(duì)車輛監(jiān)控系統(tǒng)設(shè)計(jì)。該融合模型是經(jīng)過了對(duì)汽車行業(yè)的現(xiàn)狀調(diào)研、對(duì)用戶需求收集、以及對(duì)Java和Python融合方案對(duì)比調(diào)試后提出的。從功能上、技術(shù)架構(gòu)上以及技術(shù)運(yùn)維、業(yè)務(wù)應(yīng)用方面,都實(shí)現(xiàn)了改進(jìn)和優(yōu)化,主要成果和創(chuàng)新點(diǎn)總結(jié)如下:
(1)業(yè)務(wù)需求:滿足了用戶對(duì)于監(jiān)控的需求,既能監(jiān)控車輛的實(shí)時(shí)狀態(tài)(實(shí)時(shí)運(yùn)行數(shù)據(jù)、車輛備案狀態(tài)等),又能實(shí)現(xiàn)對(duì)車輛運(yùn)行數(shù)據(jù)的統(tǒng)計(jì)分析(細(xì)分市場(chǎng)分析、工況分析、加油點(diǎn)分析等),實(shí)現(xiàn)了對(duì)車輛的全方位可視化監(jiān)控。
(2)技術(shù)實(shí)現(xiàn):充分結(jié)合了2種開發(fā)語言優(yōu)點(diǎn)。相比于直接調(diào)用Linux 命令行觸發(fā)算法執(zhí)行來說,將命令行和Python 代碼部分嵌入到Java 框架部署獨(dú)立的服務(wù),提供對(duì)外訪問API,可以實(shí)現(xiàn)代碼解耦、相互獨(dú)立、互不影響。如果算法部分出現(xiàn)問題,不影響WEB系統(tǒng)接口請(qǐng)求。不論是從功能上還是性能上都進(jìn)行了優(yōu)化。
(3)部署運(yùn)維:業(yè)務(wù)基本功能和算法部分進(jìn)行隔離開來,算法部分作為單獨(dú)服務(wù),和WEB可視化系統(tǒng)分開,便于代碼部署和后期系統(tǒng)運(yùn)行維護(hù)。
(4)應(yīng)用廣泛:本文提出的基于融合模型監(jiān)控系統(tǒng)既適用于車輛運(yùn)行數(shù)據(jù)監(jiān)控,也適用于對(duì)車輛銷量數(shù)據(jù)的監(jiān)控,應(yīng)用數(shù)據(jù)范圍廣。
(5)用戶體驗(yàn)好:該融合模型設(shè)計(jì)與實(shí)現(xiàn)給用戶提供了操作算法模型執(zhí)行的可視化管理界面,提供了控制模型開始計(jì)算、計(jì)算進(jìn)度獲取、運(yùn)行結(jié)果導(dǎo)出、停止模型運(yùn)算的可操作按鈕。這些均將算法模塊可視化,為提高用戶體驗(yàn)帶來便利。
(6)可拓展性強(qiáng):模型平臺(tái)界面做了算法模型可配置設(shè)置,用戶可以對(duì)運(yùn)算模型參數(shù)進(jìn)行調(diào)整,這個(gè)設(shè)計(jì)理念也體現(xiàn)出了該融合模型可拓展性,參數(shù)可配、可調(diào)、可修改和可查看。
綜上所述,本文所設(shè)計(jì)與實(shí)現(xiàn)的基于融合模型的車輛監(jiān)控系統(tǒng)實(shí)現(xiàn)了對(duì)車輛全面監(jiān)控功能,也在整車企業(yè)中得到應(yīng)用,具有實(shí)際參考價(jià)值與探索意義。融合模型的車輛監(jiān)控系統(tǒng)不僅能在車輛行業(yè)中得到廣泛應(yīng)用,而且可以推廣到其它領(lǐng)域,比如財(cái)務(wù)、醫(yī)學(xué)等。
致謝:
感謝在此論文編寫過程中中汽信息科技有限公司前瞻業(yè)務(wù)團(tuán)隊(duì)對(duì)作者的支持與協(xié)助,團(tuán)隊(duì)共創(chuàng)是對(duì)一項(xiàng)研究成果最好的支撐。