洪語晨,郁毅明,王 曄,董啟文
(華東師范大學(xué) 數(shù)據(jù)科學(xué)與工程學(xué)院,上海 200062)
隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,以及數(shù)據(jù)被國家列為生產(chǎn)要素,數(shù)據(jù)應(yīng)用的重要性已受到了企業(yè)的重視,數(shù)據(jù)應(yīng)用成為推動(dòng)企業(yè)高速發(fā)展、提高企業(yè)工作效能的重要手段[1].在當(dāng)下的大數(shù)據(jù)時(shí)代,數(shù)字化顯然已成為各行各業(yè)新商業(yè)模式的“標(biāo)配”,數(shù)字化轉(zhuǎn)型也是各個(gè)企業(yè)的首要戰(zhàn)略目標(biāo)[2-3].材料領(lǐng)域的信息化建設(shè)起步較晚,同時(shí),相關(guān)的數(shù)據(jù)也更為復(fù)雜,涉及研發(fā)、生產(chǎn)、管理、運(yùn)維、服務(wù)等多個(gè)環(huán)節(jié).材料行業(yè)需要一個(gè)集工業(yè)數(shù)據(jù)采集、匯聚、流通、分析、應(yīng)用于一體的數(shù)據(jù)應(yīng)用系統(tǒng),實(shí)現(xiàn)“內(nèi)增效、外增值”的數(shù)據(jù)內(nèi)外雙循環(huán),推動(dòng)應(yīng)用的創(chuàng)新發(fā)展.
現(xiàn)階段材料領(lǐng)域數(shù)據(jù)管理手段相對(duì)落后,多以紙質(zhì)或單獨(dú)的文件存放數(shù)據(jù),同時(shí)存在多個(gè)相互隔離的系統(tǒng),面臨嚴(yán)重的數(shù)據(jù)孤島問題,并且各個(gè)系統(tǒng)產(chǎn)生的數(shù)據(jù)類型多樣.同時(shí),研發(fā)數(shù)據(jù)存儲(chǔ)在不同部門系統(tǒng)和書面材料中,使用者需要跨多個(gè)平臺(tái)進(jìn)行數(shù)據(jù)收集,該流程復(fù)雜且需要人工進(jìn)行審批匯總,工作效率難以提升,數(shù)據(jù)資產(chǎn)的價(jià)值得不到充分利用.
本文針對(duì)材料研發(fā)單位現(xiàn)階段面臨的數(shù)據(jù)難以采集以及數(shù)據(jù)價(jià)值難以得到充分利用的問題,構(gòu)建了數(shù)據(jù)應(yīng)用系統(tǒng),從材料研發(fā)業(yè)務(wù)出發(fā),采取“管理材料研發(fā)數(shù)據(jù)、匯聚各系統(tǒng)數(shù)據(jù)、實(shí)現(xiàn)數(shù)據(jù)流通”的三步方針,打造集數(shù)據(jù)采集、數(shù)據(jù)流通、數(shù)據(jù)挖掘?yàn)橐惑w的數(shù)據(jù)管理系統(tǒng),推動(dòng)產(chǎn)業(yè)的創(chuàng)新變革.
本文的組織結(jié)構(gòu)包括研究現(xiàn)狀、材料研發(fā)數(shù)據(jù)應(yīng)用系統(tǒng)設(shè)計(jì)、材料研發(fā)數(shù)據(jù)應(yīng)用系統(tǒng)實(shí)現(xiàn)、數(shù)據(jù)應(yīng)用實(shí)例和總結(jié)5 個(gè)部分.其中研究現(xiàn)狀介紹了目前材料研發(fā)部門數(shù)據(jù)應(yīng)用的現(xiàn)狀,系統(tǒng)設(shè)計(jì)章節(jié)介紹了數(shù)據(jù)應(yīng)用系統(tǒng)的業(yè)務(wù)流程設(shè)計(jì)以及軟件架構(gòu)設(shè)計(jì),系統(tǒng)實(shí)現(xiàn)章節(jié)從數(shù)據(jù)采集、數(shù)據(jù)處理和日志管理部分介紹了數(shù)據(jù)應(yīng)用系統(tǒng)的具體實(shí)現(xiàn)方案,數(shù)據(jù)應(yīng)用實(shí)例章節(jié)介紹了在此平臺(tái)框架下實(shí)現(xiàn)的數(shù)據(jù)應(yīng)用工具與實(shí)例.
隨著材料研發(fā)試驗(yàn)任務(wù)的不斷增多,數(shù)據(jù)規(guī)模不斷增大,試驗(yàn)系統(tǒng)不同,數(shù)據(jù)格式各異,過去大量的試驗(yàn)數(shù)據(jù)、實(shí)測數(shù)據(jù)分開存放在不同系統(tǒng)或以紙質(zhì)形式存儲(chǔ)備份,難以應(yīng)用到實(shí)際的材料設(shè)計(jì)研發(fā)上,難以對(duì)歷史數(shù)據(jù)進(jìn)行整理分析,嚴(yán)重缺乏對(duì)各個(gè)系統(tǒng)的數(shù)據(jù)收集和管理應(yīng)用能力.企業(yè)過去一直采用完成試驗(yàn)后,負(fù)責(zé)人員對(duì)單次試驗(yàn)數(shù)據(jù)進(jìn)行記錄與整理,項(xiàng)目完成后,進(jìn)行項(xiàng)目數(shù)據(jù)的整理與歸檔,數(shù)據(jù)多以紙質(zhì)文件或電子文檔的形式進(jìn)行存儲(chǔ),該過程需要消耗大量的人力和時(shí)間.數(shù)據(jù)存儲(chǔ)分散,數(shù)據(jù)難以收集整理,導(dǎo)致了數(shù)據(jù)價(jià)值無法得到充分利用的缺陷.
目前,對(duì)材料研發(fā)數(shù)據(jù)的采集、處理、分析進(jìn)行“一站式”的處理方案,已有的工作主要是針對(duì)材料編碼映射功能進(jìn)行系統(tǒng)設(shè)計(jì)[4],或是針對(duì)某一特定材料領(lǐng)域進(jìn)行具體的數(shù)據(jù)庫設(shè)計(jì)以及數(shù)據(jù)應(yīng)用實(shí)現(xiàn)[5].現(xiàn)有的數(shù)據(jù)采集工具,如sqoop[6]、DataX[7]等,適用于大數(shù)據(jù)量下異構(gòu)數(shù)據(jù)的采集同步,與目前缺乏多個(gè)數(shù)據(jù)系統(tǒng)數(shù)據(jù)采集方式的需求匹配度較低;現(xiàn)有的機(jī)器學(xué)習(xí)、數(shù)據(jù)分析系統(tǒng),如H2O[8],是將各模型參數(shù)以可視化界面提供給用戶進(jìn)行設(shè)置,數(shù)據(jù)分析學(xué)習(xí)門檻較高,且數(shù)據(jù)來源單一,無法解決目前數(shù)據(jù)分析的需求.
數(shù)據(jù)應(yīng)用系統(tǒng)建設(shè)的目標(biāo)是匯集整合各類業(yè)務(wù)系統(tǒng)數(shù)據(jù),有效解決各業(yè)務(wù)系統(tǒng)間存在的信息孤島、信息壁壘等問題,構(gòu)建形成一套上下級(jí)聯(lián)合、橫向貫通、邏輯一體化的數(shù)據(jù)服務(wù)體系[9].
現(xiàn)階段各材料研發(fā)部門僅僅實(shí)現(xiàn)了單個(gè)業(yè)務(wù)部門各項(xiàng)目數(shù)據(jù)的統(tǒng)一管理,數(shù)據(jù)間蘊(yùn)含的價(jià)值無法體現(xiàn);各種類型數(shù)據(jù)間關(guān)系無法進(jìn)行關(guān)聯(lián),整個(gè)數(shù)據(jù)循環(huán)無法達(dá)到閉環(huán)傳輸利用的效果;缺乏從海量數(shù)據(jù)中快速、可配置化挖掘有效信息,以及利用已有數(shù)據(jù)提高材料研發(fā)效率的能力.基于上述情況,本文提出了材料研發(fā)數(shù)據(jù)管理系統(tǒng)的設(shè)計(jì)方案,希望對(duì)解決材料領(lǐng)域數(shù)據(jù)管理中存在的諸多問題能起到借鑒作用.
根據(jù)材料研發(fā)行業(yè)的業(yè)務(wù)需要,數(shù)據(jù)應(yīng)用系統(tǒng)需要匯集各類業(yè)務(wù)系統(tǒng)的數(shù)據(jù),涉及性能計(jì)算數(shù)據(jù)、仿真模擬數(shù)據(jù)、試驗(yàn)數(shù)據(jù)、試驗(yàn)流程、人員管理、材料庫存價(jià)格管理、系統(tǒng)日志信息等各類數(shù)據(jù).
為滿足材料研發(fā)行業(yè)對(duì)數(shù)據(jù)的應(yīng)用需求,將材料研發(fā)數(shù)據(jù)應(yīng)用系統(tǒng)分為4 個(gè)主要模塊,分別為數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)存儲(chǔ)及數(shù)據(jù)應(yīng)用(圖1).數(shù)據(jù)采集模塊用于匯集各類業(yè)務(wù)系統(tǒng)的數(shù)據(jù),提供日志采集、數(shù)據(jù)全量抽取、數(shù)據(jù)增量抽取、數(shù)據(jù)接口導(dǎo)入,以及文件上傳等方式導(dǎo)入數(shù)據(jù).數(shù)據(jù)處理模塊負(fù)責(zé)將采集的數(shù)據(jù)進(jìn)行清洗、標(biāo)記、分類及過濾等預(yù)處理流程,并最終匯入數(shù)據(jù)資源池中.數(shù)據(jù)存儲(chǔ)模塊負(fù)責(zé)存儲(chǔ)數(shù)據(jù)資源池中的數(shù)據(jù),并向用戶提供分類分級(jí)的功能,根據(jù)不同數(shù)據(jù)的類型和特征以及業(yè)務(wù)的需求,將其存儲(chǔ)在分布式文件系統(tǒng)或數(shù)據(jù)庫中.最終整合得到的數(shù)據(jù),通過數(shù)據(jù)應(yīng)用模塊,為用戶提供數(shù)據(jù)挖掘、數(shù)據(jù)統(tǒng)計(jì)、專題數(shù)據(jù)歸檔、預(yù)測分析、可視化展示等業(yè)務(wù)功能.
圖1 數(shù)據(jù)應(yīng)用系統(tǒng)業(yè)務(wù)流程框架Fig.1 Framework of data application system business process
數(shù)據(jù)應(yīng)用系統(tǒng)的軟件設(shè)計(jì)模式采用廣泛使用的 Model-View-Controller (MVC) 模型,即業(yè)務(wù)模型、用戶界面和控制器[10].MVC 設(shè)計(jì)模式的目的是將業(yè)務(wù)邏輯和用戶界面的實(shí)現(xiàn)進(jìn)行分離,從而使得應(yīng)用該程序可以有不同的表現(xiàn)形式.當(dāng)需要改變交互界面時(shí),只需要關(guān)注用戶界面模塊的代碼,而不用修改業(yè)務(wù)模型.
基于MVC 模型,數(shù)據(jù)應(yīng)用系統(tǒng)的軟件架構(gòu)采用3 層架構(gòu)(圖2),即客戶端表示層 (Web 層)、業(yè)務(wù)邏輯服務(wù)層 (Service 層)、數(shù)據(jù)訪問層 (dao 層)[11-12].各層包含的模塊描述作如下描述.
圖2 數(shù)據(jù)應(yīng)用系統(tǒng)軟件架構(gòu)Fig.2 Framework of data application system software architecture
表示層: 用戶看到的主界面,數(shù)據(jù)應(yīng)用系統(tǒng)中主要包括日志展示頁面、數(shù)據(jù)接入頁面、數(shù)據(jù)處理頁面、數(shù)據(jù)挖掘頁面、專題庫頁面、數(shù)據(jù)可視化頁面.
服務(wù)層: 根據(jù)業(yè)務(wù)模型實(shí)現(xiàn)的各類服務(wù)功能,通常調(diào)用數(shù)據(jù)庫來實(shí)現(xiàn)數(shù)據(jù)的獲取.根據(jù)材料研發(fā)系統(tǒng)的具體業(yè)務(wù)需求,數(shù)據(jù)應(yīng)用系統(tǒng)中實(shí)現(xiàn)了9 種主要的服務(wù)邏輯,包括日志獲取、日志分析、數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)共享、數(shù)據(jù)清洗、專題庫、數(shù)據(jù)挖掘和配方預(yù)測.
數(shù)據(jù)訪問層: 存放實(shí)體類并支持對(duì)實(shí)體的訪問,也就是對(duì)數(shù)據(jù)庫的增、刪、改、查等操作.數(shù)據(jù)應(yīng)用系統(tǒng)的實(shí)體包括材料研發(fā)庫、專題倉庫、數(shù)據(jù)信息庫、日志操作庫.根據(jù)數(shù)據(jù)實(shí)體的數(shù)據(jù)量及其業(yè)務(wù)模型,將這些數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫系統(tǒng)或者Hadoop[13]的分布式存儲(chǔ)中.數(shù)據(jù)處理流進(jìn)行數(shù)據(jù)跨系統(tǒng)、跨平臺(tái)的操作流處理.
由于數(shù)據(jù)的指數(shù)增長趨勢,多個(gè)已有系統(tǒng)間的數(shù)據(jù)難以流通和集中管理處理,材料研發(fā)企業(yè)面臨著數(shù)據(jù)孤島、數(shù)據(jù)價(jià)值難以充分利用的問題.本章將介紹數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)挖掘、日志管理在當(dāng)前業(yè)務(wù)場景下的實(shí)現(xiàn).
數(shù)據(jù)采集模塊的目的是將不同數(shù)據(jù)來源、不同數(shù)據(jù)格式的數(shù)據(jù)匯集到數(shù)據(jù)湖中,打通數(shù)據(jù)系統(tǒng)之間的數(shù)據(jù)鏈路,實(shí)現(xiàn)跨系統(tǒng)的數(shù)據(jù)融合,并最終為上層的應(yīng)用業(yè)務(wù)提供統(tǒng)一的數(shù)據(jù)服務(wù),是數(shù)據(jù)應(yīng)用系統(tǒng)中數(shù)據(jù)集成的重要部分,是數(shù)據(jù)管理的基礎(chǔ).
數(shù)據(jù)采集模塊的設(shè)計(jì)主要面臨以下挑戰(zhàn): 首先,數(shù)據(jù)應(yīng)用系統(tǒng)包括各式各樣的數(shù)據(jù)來源,例如用戶直接通過業(yè)務(wù)應(yīng)用系統(tǒng)上傳的文件數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)系統(tǒng)定期產(chǎn)生的生產(chǎn)數(shù)據(jù)等,因此,數(shù)據(jù)采集模塊需要支持從各種數(shù)據(jù)源獲取數(shù)據(jù);其次,不同場景的數(shù)據(jù)采集任務(wù)具有不同的性能需求,例如在線的業(yè)務(wù)系統(tǒng)需要低延遲的數(shù)據(jù)同步,而從現(xiàn)有系統(tǒng)遷移歷史數(shù)據(jù)時(shí)則需要高吞吐的數(shù)據(jù)拷貝,因此,數(shù)據(jù)采集模塊需要為不同應(yīng)用場景提供不同的數(shù)據(jù)采集方式.
為了解決以上問題,如圖3 所示,數(shù)據(jù)采集模塊提供了以全量抽取、增量抽取、接口接入及文件上傳4 種形式為主的多種數(shù)據(jù)采集方式,滿足不同數(shù)據(jù)源、不同應(yīng)用場景的數(shù)據(jù)采集.目前在材料應(yīng)用系統(tǒng)中,全量抽取方式主要用于對(duì)已有的存放在不同系統(tǒng)中的數(shù)據(jù)進(jìn)行采集時(shí),一次性批量收集到大量歷史數(shù)據(jù),實(shí)現(xiàn)高吞吐的數(shù)據(jù)拷貝,如外部新接入系統(tǒng)的數(shù)據(jù)收集;增量抽取方式用于數(shù)據(jù)實(shí)時(shí)性要求不高的場景,對(duì)數(shù)據(jù)進(jìn)行定期收集,如性能模擬平臺(tái)所產(chǎn)生的模擬數(shù)據(jù);文件上傳適用于用戶加工篩選后的數(shù)據(jù)進(jìn)行數(shù)據(jù)匯總,以及需要批量上傳本地非結(jié)構(gòu)化文件(如圖片、文檔)的情況;接口接入主要提供給其他正在開發(fā)中的系統(tǒng),提供其主動(dòng)進(jìn)行數(shù)據(jù)匯集上傳的功能,實(shí)現(xiàn)低延遲的數(shù)據(jù)同步,如外部的協(xié)同平臺(tái)產(chǎn)生的科室、項(xiàng)目人員分配數(shù)據(jù),以及材料應(yīng)用系統(tǒng)中新錄入的材料數(shù)據(jù).這4 種接入方式彼此互補(bǔ),適用不同來源與不同性能需求的場景.
圖3 數(shù)據(jù)采集流程Fig.3 Workflow of data acquisition
全量抽取是通過數(shù)據(jù)庫全量同步的方式,將現(xiàn)有系統(tǒng)中數(shù)據(jù)庫的數(shù)據(jù)保存到統(tǒng)一平臺(tái)中的方法,目前主流數(shù)據(jù)庫都提供了數(shù)據(jù)批量導(dǎo)入導(dǎo)出的功能,因此,在功能實(shí)現(xiàn)中主要是提供數(shù)據(jù)備份傳輸?shù)墓ぞ?全量抽取涉及的數(shù)據(jù)量通常都較大,對(duì)整個(gè)表乃至整個(gè)庫的拷貝需要操作的時(shí)間較長,采用的方法往往是通過批處理操作.即在對(duì)方服務(wù)器上建立 Shell 腳本,將所需數(shù)據(jù)庫數(shù)據(jù)通過SQL(Structured Query Language)備份,并進(jìn)行壓縮后,通過SFTP (Secure File Transfer Protocol)將數(shù)據(jù)批量打包發(fā)回到集成平臺(tái),集成平臺(tái)收到數(shù)據(jù)后,將數(shù)據(jù)解壓,并存儲(chǔ)到數(shù)據(jù)湖中.
增量抽取是不同于全量抽取的一種數(shù)據(jù)采集方式,通過對(duì)原有數(shù)據(jù)的增加、刪除、修改,保持和最新數(shù)據(jù)的同步.框架通過使用定時(shí)程序獲取日志的方式,對(duì)目標(biāo)數(shù)據(jù)庫進(jìn)行Binlog 獲取[14-15],獲取后的Binlog 進(jìn)行壓縮后,將其發(fā)送到集成平臺(tái),同時(shí)在目標(biāo)數(shù)據(jù)庫所在節(jié)點(diǎn),保存日志讀取起點(diǎn)偏移量.集成平臺(tái)中一個(gè)線程負(fù)責(zé)接收不同目標(biāo)數(shù)據(jù)庫發(fā)送的同步數(shù)據(jù),并將其保存在本地文件中,另一個(gè)線程將本地的日志文件加載到數(shù)據(jù)庫中.通過規(guī)定每隔一定時(shí)間將操作發(fā)送到集成平臺(tái),并在集成平臺(tái)執(zhí)行,以保證集成平臺(tái)中數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫保持同步.通過對(duì)全量抽取和增量抽取的實(shí)現(xiàn),可以看出對(duì)目標(biāo)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)采集的原則,即不干擾原有數(shù)據(jù)庫的運(yùn)行、不對(duì)原有系統(tǒng)運(yùn)行邏輯進(jìn)行修改.
接口接入是通過讓數(shù)據(jù)采集模塊開放一定格式的接口,對(duì)方系統(tǒng)在完成業(yè)務(wù)邏輯或需要對(duì)數(shù)據(jù)進(jìn)行同步時(shí),對(duì)對(duì)應(yīng)接口進(jìn)行調(diào)用,以傳遞最新的數(shù)據(jù).其中接口需要包含目標(biāo)導(dǎo)入數(shù)據(jù)庫、數(shù)據(jù)表,按照預(yù)先定義好的數(shù)據(jù)格式進(jìn)行數(shù)據(jù)傳輸.數(shù)據(jù)采集模塊完成對(duì)請(qǐng)求參數(shù)的解析,并將其轉(zhuǎn)換成對(duì)應(yīng)的文件系統(tǒng)或者數(shù)據(jù)庫的操作.接口接入的方式主要是提供給仍有程序員維護(hù)或者還未實(shí)現(xiàn)的系統(tǒng)進(jìn)行調(diào)用的.
文件上傳方式則是通過構(gòu)建一個(gè)文件上傳服務(wù),用戶將文件發(fā)送到系統(tǒng),然后數(shù)據(jù)應(yīng)用系統(tǒng)通過對(duì)文件進(jìn)行解析,將數(shù)據(jù)保存到數(shù)據(jù)庫中.其中,針對(duì)結(jié)構(gòu)化數(shù)據(jù)及存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)應(yīng)用系統(tǒng)根據(jù)已有的數(shù)據(jù)表生成對(duì)應(yīng)的模板文件,完善模板文件內(nèi)容后,根據(jù)表結(jié)構(gòu)對(duì)文件進(jìn)行解析,批量進(jìn)行數(shù)據(jù)庫添加操作.同時(shí),支持通過文件上傳的方式采集非結(jié)構(gòu)化數(shù)據(jù),如音頻、圖片等,將非結(jié)構(gòu)化數(shù)據(jù)存放在文件系統(tǒng)或分布式文件系統(tǒng)中.
數(shù)據(jù)應(yīng)用系統(tǒng)中收集的數(shù)據(jù)來自多個(gè)外部系統(tǒng),包含結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)的規(guī)范性難以保證,且存在不同數(shù)據(jù)源數(shù)據(jù)編號(hào)編碼不統(tǒng)一等問題.因此,在數(shù)據(jù)采集后,需要提供統(tǒng)一的數(shù)據(jù)檢查與處理模塊,最后將處理好的數(shù)據(jù)存入數(shù)據(jù)湖中.針對(duì)接口導(dǎo)入的數(shù)據(jù)和以文件上傳、增量或批量獲取的半結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù),分別采用了消息隊(duì)列和文件系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ).針對(duì)數(shù)據(jù)量大、數(shù)據(jù)批量獲取的場景,提供了定時(shí)任務(wù)進(jìn)行數(shù)據(jù)處理;針對(duì)數(shù)據(jù)量小、數(shù)據(jù)流式進(jìn)入平臺(tái)的場景,采用流式任務(wù)進(jìn)行數(shù)據(jù)處理.
數(shù)據(jù)處理模塊功能的基本架構(gòu)如圖4 所示,主要包括數(shù)據(jù)獲取、數(shù)據(jù)處理、數(shù)據(jù)存儲(chǔ)3 個(gè)部分.
圖4 數(shù)據(jù)處理模塊架構(gòu)Fig.4 Architecture of data processing module
數(shù)據(jù)獲取途徑主要分為接口接入和文件上傳兩種方式,其中文件上傳包含數(shù)據(jù)庫增量、全量數(shù)據(jù)變更,以及通過API (Application Programming Interface)批量導(dǎo)入數(shù)據(jù).
通過文件上傳的數(shù)據(jù)會(huì)根據(jù)對(duì)應(yīng)的具體模塊,將數(shù)據(jù)庫變更文件以及用戶上傳的文件保存在相應(yīng)的目錄下.大量數(shù)據(jù)的存放使得數(shù)據(jù)的查看以及檢索效率低,因此采用數(shù)據(jù)索引來加速數(shù)據(jù)查詢,常見有的Elastic Search 及Solr[16]工具.其中,Solr 能夠?qū)Ω喔袷降臄?shù)據(jù)、文件建立索引,而不僅僅是json 格式,且提供了查詢語句,因此選用了Solr 來加速數(shù)據(jù)查詢.而半結(jié)構(gòu)化的數(shù)據(jù)主要為從數(shù)據(jù)庫中抽取得到的數(shù)據(jù)及批量上傳的csv、Excel 數(shù)據(jù),以及從其他系統(tǒng)中獲取的json、xml 等格式的歷史數(shù)據(jù),這些數(shù)據(jù)獲取后存放在對(duì)應(yīng)模塊的文件目錄下,為后續(xù)數(shù)據(jù)處理做準(zhǔn)備.
通過接口導(dǎo)入的數(shù)據(jù)主要來自其他內(nèi)部系統(tǒng),在接收到接口導(dǎo)入的數(shù)據(jù)后,將數(shù)據(jù)放到Kafka[17]中對(duì)應(yīng)的topic 內(nèi),等待后續(xù)進(jìn)行數(shù)據(jù)處理.
文件上傳的數(shù)據(jù)保存在本地后,通過定時(shí)任務(wù)去執(zhí)行對(duì)應(yīng)的數(shù)據(jù)解析、數(shù)據(jù)過濾、數(shù)據(jù)轉(zhuǎn)換操作,處理完成后的數(shù)據(jù)存放至hive[18]中,而沒有對(duì)應(yīng)數(shù)據(jù)處理操作的數(shù)據(jù),以文件的形式存儲(chǔ)在底層文件系統(tǒng)中.
對(duì)于接口導(dǎo)入的數(shù)據(jù),通過事件通知的模式,當(dāng)對(duì)應(yīng)隊(duì)列不為空時(shí),喚醒相應(yīng)的數(shù)據(jù)處理服務(wù)進(jìn)行處理.
數(shù)據(jù)處理時(shí)采用Airflow[19]作為數(shù)據(jù)流處理的調(diào)度和監(jiān)控工具,根據(jù)各個(gè)任務(wù)的流量不同,設(shè)置相應(yīng)的任務(wù)時(shí)間間隔,批量將數(shù)據(jù)進(jìn)行處理后存入底層數(shù)據(jù)存儲(chǔ)系統(tǒng)中.如果在處理過程中發(fā)現(xiàn)數(shù)據(jù)不符合預(yù)先規(guī)定的格式,則記錄錯(cuò)誤日志,并將數(shù)據(jù)歸檔至輸入錯(cuò)誤的數(shù)據(jù)中.
針對(duì)材料研發(fā)部門的具體需求,數(shù)據(jù)應(yīng)用系統(tǒng)提供了一系列數(shù)據(jù)處理功能,包括: 配方類別編號(hào)、成藥編號(hào)和試驗(yàn)編號(hào)是否符合規(guī)范;采集到的數(shù)據(jù)是否符合對(duì)應(yīng)類型與閾值;根據(jù)測試性能、試驗(yàn)性能等數(shù)據(jù)對(duì)配方進(jìn)行預(yù)分類;自動(dòng)對(duì)缺失數(shù)據(jù)值進(jìn)行填充;將計(jì)算軟件、仿真軟件的數(shù)據(jù)進(jìn)行聚合,篩選過濾不符合要求的數(shù)據(jù)等.
針對(duì)數(shù)據(jù)應(yīng)用系統(tǒng)中包含多個(gè)子系統(tǒng),數(shù)據(jù)庫日志、應(yīng)用日志、網(wǎng)關(guān)日志分散存儲(chǔ)在不同機(jī)器和不同地址下,用戶和運(yùn)維人員難以通過零散大量的數(shù)據(jù)進(jìn)行系統(tǒng)使用情況、系統(tǒng)出錯(cuò)原因診斷,因此提供了日志管理模塊,對(duì)系統(tǒng)中的日志進(jìn)行收集、處理,和相應(yīng)的展示功能.
日志管理模塊的基本架構(gòu)如圖5 所示,主要包括日志數(shù)據(jù)源、日志采集、日志處理和日志展示.
圖5 日志管理模塊架構(gòu)Fig.5 Architecture of log management module
日志數(shù)據(jù)來源主要有系統(tǒng)日志、網(wǎng)關(guān)日志、應(yīng)用日志、數(shù)據(jù)庫日志.日志采集支持對(duì)Windows和Linux 系統(tǒng)日志進(jìn)行采集,采用了Filebeat 和Winlogbeat 進(jìn)行數(shù)據(jù)采集,兩個(gè)工具都是elastic[20]社區(qū)提供的輕量級(jí)日志收集工具.其中,winlogbeat 通過windows API 獲取事件日志,如硬件日志、安全日志、系統(tǒng)日志,并進(jìn)行過濾.Filebeat 能從系統(tǒng)中收集日志,并將其進(jìn)行上報(bào),同時(shí)具備資源占用少,侵入性小的優(yōu)點(diǎn).
在日志采集至日志存儲(chǔ)到日志服務(wù)器的過程中,為了支持海量日志收集處理的高并發(fā)場景,以及做到日志來源與不同類型日志處理服務(wù)器的解耦,在日志采集與日志處理之間,添加了消息中間件Kafka,使用消息中間件將相同類型的日志流交給不同日志處理器進(jìn)行處理[21].同時(shí),Kafka 集群所支持的高吞吐及可持久化的特性,降低了數(shù)據(jù)丟失及高并發(fā)量下日志處理的壓力.
日志清洗部分采用了Logstash.Logstash 包含input、filter、output 三部分.其中,input 是Logstash可以通過過濾器解析各個(gè)事件,識(shí)別已命名的字段以構(gòu)建結(jié)構(gòu),并將它們轉(zhuǎn)換成通用格式,以便后續(xù)對(duì)日志進(jìn)行分析和可視化等.
日志存儲(chǔ)在ElasticSearch (ES)集群中.ES 是一個(gè)基于Apache Lucene 的全文搜索引擎,提供了分布式的實(shí)時(shí)文件存儲(chǔ),支持應(yīng)用通過RESTful API 等多種方式進(jìn)行交互.
采用Kibana 和Zabbix 向用戶提供日志查看分析和可視化功能.Kibana[22]支持通過Lucene 語句或Query DSL (Domain Specific Language)語句檢索ES 中的數(shù)據(jù)來進(jìn)行數(shù)據(jù)可視化構(gòu)建,并且內(nèi)置柱狀圖、餅圖、條形圖、熱力地圖等多種類型的圖表,用戶容易上手,可以配置數(shù)據(jù)展示大盤,能夠進(jìn)行分時(shí)段的數(shù)據(jù)展示.Zabbix 是一個(gè)能夠監(jiān)控各種網(wǎng)絡(luò)參數(shù)以及服務(wù)器健康性和完整性的軟件,Zabbix 使用靈活的通知機(jī)制,允許用戶為幾乎任何事件配置基于郵件的告警.通過配置被動(dòng)監(jiān)控項(xiàng)以及對(duì)應(yīng)的觸發(fā)器,將Logstash 處理中包含報(bào)錯(cuò)信息的數(shù)據(jù)發(fā)送至Zabbix,通過Zabbix 分析報(bào)錯(cuò)信息并提供報(bào)警機(jī)制.
數(shù)據(jù)采集和數(shù)據(jù)處理模塊解決了數(shù)據(jù)孤島、數(shù)據(jù)彼此獨(dú)立和無法關(guān)聯(lián)的問題,在此基礎(chǔ)上需要進(jìn)一步對(duì)整合的數(shù)據(jù)提供數(shù)據(jù)應(yīng)用方法,充分利用數(shù)據(jù)輔助決策,挖掘數(shù)據(jù)價(jià)值.在數(shù)據(jù)整合的基礎(chǔ)上,提供了專題數(shù)據(jù)庫、配方綜合排序、數(shù)據(jù)挖掘3 個(gè)數(shù)據(jù)應(yīng)用實(shí)例.
針對(duì)數(shù)據(jù)規(guī)模大,數(shù)據(jù)列多,研究人員對(duì)數(shù)據(jù)的分析、查看等操作,多基于課題、科室等對(duì)數(shù)據(jù)進(jìn)行劃分的問題,提供了專題數(shù)據(jù)庫功能.
專題數(shù)據(jù)庫構(gòu)建功能提供查看多個(gè)相關(guān)聯(lián)的數(shù)據(jù)表,以及只查看部分列,并且能對(duì)數(shù)據(jù)進(jìn)行簡單的篩選.方便不同的課題組和科室,構(gòu)建不同的專題數(shù)據(jù)庫來更好地進(jìn)行數(shù)據(jù)分析、數(shù)據(jù)可視化等工作.
專題數(shù)據(jù)庫中提供用戶選擇多個(gè)表進(jìn)行連接的功能,支持用戶選擇一個(gè)表的指定列作為連接列,選擇另一個(gè)表時(shí),能夠自動(dòng)過濾,顯示出與連接列類型相同的屬性列.完成設(shè)置后,專題數(shù)據(jù)庫服務(wù)進(jìn)行數(shù)據(jù)表創(chuàng)建,提供用戶根據(jù)專題數(shù)據(jù)庫表名進(jìn)行數(shù)據(jù)分析處理的功能.
根據(jù)用戶提供的表名、列名、待顯示列、待連接的表名、連接的列名信息,生成多表連接語句,并在提供可連接列時(shí),自動(dòng)篩選符合條件的列信息,最后根據(jù)表名、列名進(jìn)行去重,避免因?yàn)橹貜?fù)選擇導(dǎo)致一個(gè)列出現(xiàn)多次.專題數(shù)據(jù)庫的實(shí)現(xiàn)流程如圖6 所示.
圖6 專題數(shù)據(jù)庫流程Fig.6 Workflow of thematic database
材料配方數(shù)據(jù)多為列數(shù)多的稀疏矩陣,包含重要信息的屬性分散,難以通過傳統(tǒng)的數(shù)據(jù)處理工具快速進(jìn)行多功能排序,數(shù)據(jù)應(yīng)用系統(tǒng)提供了對(duì)數(shù)據(jù)中可枚舉、可數(shù)值計(jì)算的屬性設(shè)置加權(quán)打分的功能,計(jì)算輸出各屬性列的得分情況以及根據(jù)規(guī)則加權(quán)計(jì)算后的綜合得分.具體綜合排序規(guī)則定義方式參見表1.
表1 排序規(guī)則定義Tab.1 Definition of collation
用戶提交打分規(guī)則后,將打分規(guī)則存儲(chǔ)到數(shù)據(jù)庫中,然后逐行對(duì)該表的數(shù)據(jù)進(jìn)行處理,對(duì)每一行數(shù)據(jù),對(duì)規(guī)則表中的每條規(guī)則進(jìn)行遍歷,符合要求的則按照該規(guī)則的分類和計(jì)算方式對(duì)該行數(shù)據(jù)的總分進(jìn)行累加.最后根據(jù)得分由高到低進(jìn)行輸出,同時(shí)支持導(dǎo)出功能.
該功能的流程如圖7 所示,在用戶提交一個(gè)打分規(guī)則后,將所有行的得分初始化,并逐行處理數(shù)據(jù)表,然后判斷是否滿足制定的規(guī)則.如果滿足,則對(duì)得分進(jìn)行更新,直到所有規(guī)則都處理完成,將最終得分進(jìn)行排序后返回給用戶.用戶也可以選擇完排序規(guī)則后,將排序規(guī)則進(jìn)行保存,再次訪問同一個(gè)配方表的排序界面時(shí)能在已有保存規(guī)則的基礎(chǔ)上進(jìn)行修改.
圖7 配方綜合排序流程Fig.7 Flowchart of formula comprehensive sorting
材料研發(fā)領(lǐng)域的歷史研究數(shù)據(jù)量大,數(shù)據(jù)間的關(guān)系難以通過傳統(tǒng)的觀察、推測的方式總結(jié)出來,且相關(guān)從業(yè)人員缺乏運(yùn)用機(jī)器學(xué)習(xí)等工具進(jìn)行數(shù)據(jù)分析的經(jīng)驗(yàn).數(shù)據(jù)應(yīng)用系統(tǒng)提供了部分?jǐn)?shù)據(jù)挖掘功能,輔助科研人員決策.
數(shù)據(jù)應(yīng)用系統(tǒng)提供了標(biāo)簽系統(tǒng)、配方組分推薦、配方性能預(yù)測、相關(guān)性分析、大小規(guī)模預(yù)測等功能,幫助用戶進(jìn)行數(shù)據(jù)分析.
根據(jù)數(shù)據(jù)應(yīng)用系統(tǒng)收集到的配方數(shù)據(jù)、實(shí)驗(yàn)數(shù)據(jù)、模擬數(shù)據(jù)和實(shí)測數(shù)據(jù),提供用戶對(duì)配方、性能數(shù)據(jù)進(jìn)行批量設(shè)置標(biāo)簽的功能,方便用戶對(duì)數(shù)據(jù)進(jìn)行篩選.在標(biāo)簽系統(tǒng)的支撐下,能夠?qū)?shù)據(jù)進(jìn)行多種分析.其中,配方組分推薦功能為: 根據(jù)性能數(shù)據(jù),預(yù)測配方的類型標(biāo)簽,輔助進(jìn)行得到目標(biāo)性能的材料組成判斷.配方性能預(yù)測功能為: 根據(jù)配方組分信息,預(yù)測其對(duì)應(yīng)的性能數(shù)據(jù).大小規(guī)模預(yù)測功能為: 根據(jù)小規(guī)模的實(shí)驗(yàn)數(shù)據(jù),預(yù)測更改數(shù)據(jù)量后的配方性能數(shù)據(jù).這些功能的具體實(shí)現(xiàn)結(jié)構(gòu)見圖8.
圖8 數(shù)據(jù)挖掘模塊架構(gòu)Fig.8 Architecture of data mining module
本文所搭建的多數(shù)據(jù)源數(shù)據(jù)采集、數(shù)據(jù)處理與數(shù)據(jù)應(yīng)用為一體的系統(tǒng),解決了目前材料研發(fā)單位的現(xiàn)有數(shù)據(jù)使用問題,該數(shù)據(jù)應(yīng)用平臺(tái)有如下優(yōu)點(diǎn).
數(shù)據(jù)采集: 提供了4 種采集方式,用于不同場景下的數(shù)據(jù)采集,包括數(shù)據(jù)全量抽取、增量抽取、接口接入、文件上傳,能夠針對(duì)數(shù)據(jù)來源不同,使用相應(yīng)的解決方案進(jìn)行數(shù)據(jù)采集.
數(shù)據(jù)處理: 數(shù)據(jù)收集后需要進(jìn)行處理和索引,且提供了定時(shí)任務(wù)和流式任務(wù)方式,對(duì)數(shù)據(jù)進(jìn)行處理,包括數(shù)據(jù)缺失值填充、數(shù)據(jù)過濾、數(shù)據(jù)格式轉(zhuǎn)換等,并將半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行統(tǒng)一存儲(chǔ)和構(gòu)建索引,加速查詢.
日志收集: 不同系統(tǒng)日志和應(yīng)用日志收集,輔助使用人員和運(yùn)維人員快速定位錯(cuò)誤,以及實(shí)時(shí)了解系統(tǒng)運(yùn)行情況.
數(shù)據(jù)應(yīng)用: 針對(duì)材料研發(fā)的具體需求,提供了專題數(shù)據(jù)庫、數(shù)據(jù)綜合排序、數(shù)據(jù)挖掘等一系列功能,屏蔽了底層模型、數(shù)據(jù)處理的復(fù)雜問題,降低數(shù)據(jù)應(yīng)用的難度.
系統(tǒng)功能測試主要是從用戶的角度出發(fā),對(duì)數(shù)據(jù)應(yīng)用系統(tǒng)相關(guān)的各項(xiàng)功能進(jìn)行測試,從而確保每個(gè)功能的可用性.本次功能測試采用等價(jià)類劃分法和邊界值分析法設(shè)計(jì)測試用例.表2 展示了系統(tǒng)基本功能測試的部分典型用例.
表2 系統(tǒng)功能測試用例表Tab.2 System function test case
系統(tǒng)在數(shù)據(jù)應(yīng)用實(shí)例中提供了多種數(shù)據(jù)挖掘功能輔助研發(fā),相關(guān)功能的時(shí)延對(duì)用戶系統(tǒng)使用體驗(yàn)影響較大.本文對(duì)常用的數(shù)據(jù)應(yīng)用功能性能,包括配方性能預(yù)測和配方組分推薦及相關(guān)性分析功能等,相應(yīng)時(shí)長進(jìn)行了測試與統(tǒng)計(jì).統(tǒng)計(jì)結(jié)果如表3 所示,各個(gè)功能在數(shù)據(jù)量1 000 左右時(shí),都能保證在1 s 內(nèi)完成模型訓(xùn)練,能夠滿足日常材料研發(fā)人員根據(jù)已有樣本數(shù)據(jù)對(duì)新材料配方快速模擬測試的需求.
表3 數(shù)據(jù)應(yīng)用性能測試結(jié)果Tab.3 Data application test results
本文以國內(nèi)某材料研發(fā)單位的內(nèi)部數(shù)據(jù)平臺(tái)項(xiàng)目為背景,設(shè)計(jì)開發(fā)了適用于該單位的數(shù)據(jù)應(yīng)用系統(tǒng).該系統(tǒng)整體框架靈活、支持跨平臺(tái),提高了數(shù)據(jù)管理、數(shù)據(jù)收集流程的效率,能以較少的人工和時(shí)間成本完成數(shù)據(jù)管理.該數(shù)據(jù)應(yīng)用系統(tǒng)提供了數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)分析、日志管理等功能,解決了傳統(tǒng)材料研發(fā)單位數(shù)據(jù)孤島及數(shù)據(jù)價(jià)值難以充分挖掘的問題,提高了材料研發(fā)信息化發(fā)展水平.
本文所使用的數(shù)據(jù)應(yīng)用系統(tǒng)架構(gòu)以及系統(tǒng)收集數(shù)據(jù)、處理數(shù)據(jù)、數(shù)據(jù)挖掘的技術(shù),主要針對(duì)于材料研發(fā)單位所面臨的數(shù)據(jù)難以收集、材料研發(fā)配方性能數(shù)據(jù)量大、數(shù)據(jù)價(jià)值難以充分利用的場景.增強(qiáng)系統(tǒng)數(shù)據(jù)的安全性、可靠性,以及數(shù)據(jù)管理系統(tǒng)所采集的大量日志數(shù)據(jù)的利用,將成為后續(xù)數(shù)據(jù)管理系統(tǒng)的研究重心.