陶 鑫 杜 宇 關(guān) 虹
(1.內(nèi)蒙古自治區(qū)氣象數(shù)據(jù)中心,內(nèi)蒙古 呼和浩特 010010;2.內(nèi)蒙古電力(集團(tuán))有限責(zé)任公司信息通信分公司,內(nèi)蒙古 呼和浩特 010000)
氣象大數(shù)據(jù)云平臺(天擎)于2020年7月完成了國省部署運行,形成1+31的業(yè)務(wù)布局,成為了全國各省級核心氣象業(yè)務(wù)系統(tǒng)。天擎1.0具備海量數(shù)據(jù)存儲、全業(yè)務(wù)貫通和數(shù)據(jù)應(yīng)用高效的能力,足夠開放,可直接支撐天氣、氣候、探測、公服以及人影等各類氣象應(yīng)用的云化融入[1]。到2022年完成天擎2.0建設(shè),全面支撐氣象“云+端”的應(yīng)用生態(tài)。其中數(shù)據(jù)處理中心子系統(tǒng)DPC(Data Processing Center)是天擎的重要環(huán)節(jié),所有的數(shù)據(jù)由數(shù)據(jù)收集與分發(fā)子系統(tǒng)CTS(CMA domestic Telecommunication System)收集分發(fā)后,經(jīng)過DPC系統(tǒng)的解碼處理并入庫。因此DPC是保障數(shù)據(jù)及時處理并入庫的核心系統(tǒng),穩(wěn)定運行非常重要。
天擎DPC系統(tǒng)負(fù)責(zé)解碼入庫的資料分為結(jié)構(gòu)化資料、非結(jié)構(gòu)化資料、半結(jié)構(gòu)化資料、雷達(dá)流資料和消息體等。不同資料對應(yīng)的解碼程序框架也有區(qū)別,即結(jié)構(gòu)化資料需要處理解析文件內(nèi)容并入庫,非結(jié)構(gòu)化資料僅入文件索引,實體文件存儲在NAS存儲;半結(jié)構(gòu)化資料則需夭對其存儲的格點場進(jìn)行多場多要素拆分存儲;消息體數(shù)據(jù)則采用strom框架完成解碼存儲。
根據(jù)資料類別DPC系統(tǒng)分別部署在18臺服務(wù)器,每類資料都有特定的消息轉(zhuǎn)發(fā)配置、解碼程序配置和入庫策略配置等各不相同的配置文件,當(dāng)程序僵死或出現(xiàn)異常,運維非常復(fù)雜,因此天擎DPC子系統(tǒng)配置文件查看器的開發(fā)具有實際意義,可以提高運維效率。
天擎DPC子系統(tǒng)配置文件查看器總體設(shè)計包括數(shù)據(jù)層、交互層、存儲層及應(yīng)用層4部分,總體架構(gòu)如圖1所示。
圖1 總體架構(gòu)
DPC子系統(tǒng)數(shù)據(jù)解碼服務(wù)器共15臺服務(wù)器,結(jié)構(gòu)化資料包括地面、高空、海洋、輻射、酸雨以及農(nóng)氣等數(shù)據(jù)的處理;非結(jié)構(gòu)化和半結(jié)構(gòu)化資料包括雷達(dá)、衛(wèi)星、數(shù)據(jù)模式和其他服務(wù)產(chǎn)品等數(shù)據(jù)處理;消息拆分與轉(zhuǎn)發(fā)處理服務(wù)器負(fù)責(zé)實時監(jiān)聽通知消息到達(dá),把打包消息拆分為單條消息,然后根據(jù)文件的重命名策略進(jìn)行重命名后保存到數(shù)據(jù)存儲目錄,發(fā)向數(shù)據(jù)處理的RabbitMQ轉(zhuǎn)發(fā)消息[2]。所有的配置文件和解碼程序均存儲在制定的服務(wù)器,交互層通過信息采集模塊讀取數(shù)據(jù)層的配置信息。
應(yīng)用層向交互層發(fā)送配置文件信息獲取請求,交互層信息采集模塊接收到指令后主動連接數(shù)據(jù)層對應(yīng)服務(wù)器,然后搜索配置文件,進(jìn)行解析,提取用戶請求的配置信息。采集的消息轉(zhuǎn)發(fā)配置信息包括服務(wù)器IP、配置文件名稱、存儲路徑、資料的名稱、資料的CTS四級編碼及資料對應(yīng)的消息對列名稱等;采集的解碼程序配置信息包括服務(wù)器IP、資料入庫腳本名稱、資料配置文件、資料使用端口號等;采集的資料入庫策略配置信息包括服務(wù)器IP、配置文件名稱、資料的名稱、資料的CTS四級編碼和SOD四級編碼、存儲方式、入庫的表名及是否發(fā)送DI狀態(tài)等。最后將讀取到的配置文件信息存儲至內(nèi)存數(shù)據(jù)庫中,為應(yīng)用層提供數(shù)據(jù)支撐。
圍繞運維人員查看需求,以輕計算、重連接,前臺操作、后臺分析為要求,實現(xiàn)天擎DPC子系統(tǒng)配置文件查看需求。初次使用,運維人員需要先對DPC集群的節(jié)點、數(shù)據(jù)庫連接信息進(jìn)行配置,然后將消息轉(zhuǎn)發(fā)配置、解碼程序配置和入庫策略配置獲取請求提交至交互層即可查看。
天擎DPC子系統(tǒng)配置文件查看器采用采用的是B/S的架構(gòu),瀏覽器端程序采用JavaScript語言開發(fā),服務(wù)器端程序采用Java和python混合方式開發(fā);開發(fā)工具使Eclipse 4.8.0;Web服務(wù)器使用Apache-tomcat-8.0.33 Web Server。
天擎DPC子系統(tǒng)配置文件查看器是基于Maven倉庫和Nutz開源框架搭建的。Maven是一個項目管理和綜合工具,Maven項目的結(jié)構(gòu)和內(nèi)容在一個XML文件(pom.xml)中聲明,搭建一個Web項目非常便捷。Nutz框架具有輕、全、活、整等特點,整個jar文件共910kB,提供了Dao、Ioc、Aop、Mvc和Json解析等必要功能,開發(fā)人員只需把精力集中在核心算法開發(fā)即可。
Java是一種完全獨立的語言,可在任何平臺上運行,擁有大量的第三方庫和框架,如Spring、Nutz、Hibernate和Apache Kafka等,可以滿足各種開發(fā)需求,Web應(yīng)用開發(fā)具有明顯的優(yōu)勢。Python是一種解釋型語言,語法簡單明了、功能類庫豐富,程序?qū)懞煤鬅o須編譯即可運行。系統(tǒng)總體框架用Java搭建,其中信息采集模塊核心算法采用Python語言開發(fā)。Ganymed SSH-2 for Java是用純Java實現(xiàn)SSH-2協(xié)議包,通過該包可以遠(yuǎn)程登錄到遠(yuǎn)程服務(wù)器執(zhí)行Python程序請求的算法實現(xiàn)信息采集,完成天擎DPC子系統(tǒng)配置文件查看器的設(shè)計和功能實現(xiàn)。
數(shù)據(jù)庫主要包括傳統(tǒng)的數(shù)據(jù)庫和內(nèi)存數(shù)據(jù)庫,傳統(tǒng)的數(shù)據(jù)庫是將數(shù)據(jù)庫存儲到磁盤上,而內(nèi)存數(shù)據(jù)庫則是將整個數(shù)據(jù)庫放進(jìn)內(nèi)存中。內(nèi)存數(shù)據(jù)庫和傳統(tǒng)數(shù)據(jù)庫相比數(shù)據(jù)部署便捷、維護(hù)簡單且處理速度更快,非常適用于庫表結(jié)構(gòu)簡單,數(shù)據(jù)量小的應(yīng)用場景[3]。常用的內(nèi)存數(shù)據(jù)有SQLite、Altibase、H2、Derby和HSQLDB等。系統(tǒng)選用的是H2內(nèi)存數(shù)據(jù)庫,是Thomas Mueller提供的一個開源的、純Java實現(xiàn)的關(guān)系數(shù)據(jù)庫,支持JDBC和ODBC API,支持SQL,并支持提供基于瀏覽器的管理控制臺[4]。
Bootstrap-table表格插件提供了非常豐富的屬性設(shè)置,可以實現(xiàn)查詢、分頁、排序、復(fù)選框、設(shè)置顯示列、Card view視圖、主從表顯示以及合并列等處理功能,而且該插件同時也提供了一些不錯的擴展功能,如移動行、移動列位置等一些特殊的功能[5]。將數(shù)據(jù)顯示到表格的方式有客戶端(client)和服務(wù)器(server)2種模式??蛻舳四J绞侵冈诜?wù)器中把要顯示到表格的數(shù)據(jù)轉(zhuǎn)換成JSON格式一次性加載顯示的界面中,該模式適合數(shù)據(jù)量較少的場景。數(shù)據(jù)量很大時,為了節(jié)省資源,則用服務(wù)器模式,根據(jù)設(shè)定的每頁記錄數(shù)和當(dāng)前要顯示的頁碼,發(fā)送數(shù)據(jù)到服務(wù)器進(jìn)行查詢,然后再顯示到界面中。系統(tǒng)選用的是客戶端模式顯示數(shù)據(jù)。
基于Nutz-MVC的DPC子系統(tǒng)配置文件查看器包括服務(wù)器信息配置模塊、配置文件信息采集模塊、配置文件信息存儲模塊和配置文件信息查看模塊,其中配置文件信息采集模塊采用Python語言開發(fā),各模塊設(shè)計實現(xiàn)如下。
該模塊主要用來配置DPC各節(jié)點的基本信息和服務(wù)類型,信息采集模塊通過讀取配置信息遠(yuǎn)程連接到服務(wù)器調(diào)用對應(yīng)程序接口。DPC服務(wù)器信息設(shè)置模板格式:DPC節(jié)點IP,SSH用戶,SSH密碼,SSH端口,節(jié)點服務(wù)類型。節(jié)點服務(wù)類型可以為一個或多個,多個類型用(;)分割,格式如下。
10.*.*.25,usr,pwd,port,DecoderConf_Frename;
FrenameTables
10.*.*.26,,usr,pwd,port,DecoderConf_Frename;
FrenameTables
10.*.*.27,,usr,pwd,port,DecoderConf_Grib;GribTables
10.*.*.28,,usr,pwd,port,DecoderConf_Grib;GribTables
10.*.*.31,,usr,pwd,port,DataRouteConf
10.*.*.34,,usr,pwd,port,DataRouteConf
10.*.*.35,,usr,pwd,port,DecoderConf_Decode
10.*.*.36,,usr,pwd,port,DecoderConf_Decode
其中,DecoderConf_Frename表示非結(jié)構(gòu)化資料解碼程序配置信息獲取,F(xiàn)renameTables表示非結(jié)構(gòu)化資料入庫策略配置信息獲取,DecoderConf_Grib半結(jié)構(gòu)化資料解碼程序配置信息獲取,GribTables表示半結(jié)構(gòu)化資料入庫策略配置信息獲取,DataRouteConf表示消息轉(zhuǎn)發(fā)配置信息獲取,DecoderConf_Decode表示結(jié)構(gòu)化資料解碼程序配置信息獲取,將該信息存儲至service.csv文件中。
配置文件信息采集模塊是由Python語言開發(fā)并封裝的算法包,Java主程序讀取service.csv文件,獲取各個服務(wù)器的ssh登錄信息及各節(jié)點服務(wù)類型,通過使用Ganymed SSH-2 for Java工具包,完成遠(yuǎn)程服務(wù)器的連接,并將Pyhton程序名和服務(wù)類型傳遞至接口execPythonScript實現(xiàn)Java-Python的跨語言調(diào)用,主要代碼如下。
配置文件信息存儲模塊采用的是Nutz框架的dao接口,創(chuàng)建實體類和實體表,主要包括DataRouteConf.java、DecoderConf.java、FrenameTables.java、GribTables.java共4個實體類,對應(yīng)的表名是datarouteconf、decoderConf、frenameTables和gribTables,分別存儲消息轉(zhuǎn)發(fā)配置信息、解碼程序配置文件信息、非結(jié)構(gòu)化資料入庫策略和半結(jié)構(gòu)化資料入庫策略等信息。Nutz.dao的使用節(jié)省了insert語句的編寫,只需一條語句即可完成數(shù)據(jù)的存儲,主要代碼如下。
db-driver=org.h2.Driver
db-url=jdbc:h2:file:~/.data/overviewerdb;MODE=MYSQL;D ATABASE_TO_UPPER=
db-username=db-username
db-password=db-password
db-validationQuery=select 1
private Dao dao = Mvcs.getIoc().get(Dao.class,"dao");
result = JSONObject.parseArray(str,DataRouteConf.class);
dao.insert(result);
信息查看模塊以標(biāo)簽頁的方式綜合展示天擎DPC子系統(tǒng)配置文件,當(dāng)有信息變更時點擊“重新獲取”按鈕更新。運維人員在頁面發(fā)起請求后,通過ajax方式將請求提交至后臺獲取數(shù)據(jù),然后利用Bootstrap-table插件在頁面顯示。
天擎DPC子系統(tǒng)配置文件查看器部署方便,只需要程序包overviewer.jar上傳至能訪問DPC服務(wù)器的任意臺機器,執(zhí)行nohup java -jar overviewer.jar &,即可完成部署。部署完成后需要訪問網(wǎng)站進(jìn)行DPC節(jié)點和數(shù)據(jù)庫連接初始化設(shè)置。
自2021年系統(tǒng)上線以來,已經(jīng)在實際業(yè)務(wù)中開展應(yīng)用,應(yīng)用效果總結(jié)如下:1)功能性方面,從運維人員運維角度出發(fā),提供了多個維度的配置文件檢索功能,業(yè)務(wù)人員可以很快獲取到有效信息,滿足業(yè)務(wù)求。2)穩(wěn)定性方面,自運行以來,每個功能和模塊都運行穩(wěn)定可靠,未出現(xiàn)任何故障。3)安全性方面,軟件包部署在DPC集群服務(wù)器,讀取解碼入庫程序的核心算法只能在DPC集群訪問,網(wǎng)頁端只提供查看功能,保證了系統(tǒng)的安全性,符合相關(guān)網(wǎng)絡(luò)安全的要求和規(guī)范[6]。4)系統(tǒng)擴展性方面,擴展性是系統(tǒng)應(yīng)對業(yè)務(wù)變更的能力,擴展性優(yōu)良可以減少系統(tǒng)開發(fā)運維的成本,系統(tǒng)相關(guān)參數(shù)可通過頁面配置修改,核心算法包采用python腳本,修改后項目無須部署即可實現(xiàn)迭代更新。
為保障“天擎”實時業(yè)務(wù)系統(tǒng)穩(wěn)定運行,為各業(yè)務(wù)單位提供強有力的數(shù)據(jù)支撐,設(shè)計了天擎DPC子系統(tǒng)配置文件查看器,實現(xiàn)了對DPC集群各服務(wù)器的解碼入庫程序配置文件快速查找,保障了“天擎”數(shù)據(jù)環(huán)境的數(shù)據(jù)穩(wěn)定、及時。系統(tǒng)投入業(yè)務(wù)運行之后,運維人員遇到故障后,能非常高效地查找到對應(yīng)進(jìn)程所在,顯著地提高了運維能力,對氣象信息化高質(zhì)量可持續(xù)發(fā)展具有重要的保障意義,改系統(tǒng)遷移方便,僅需要修改對應(yīng)省份的服務(wù)器IP即可完成本地化部署應(yīng)用,后續(xù)將繼續(xù)根據(jù)實際業(yè)務(wù)需要擴充、完善系統(tǒng)功能。