丁煦航,奚維斌,謝 杰,陳子鳴
(1.中國科學(xué)院 合肥物質(zhì)科學(xué)研究院,合肥 230031;2.中國科學(xué)技術(shù)大學(xué)研究生院 科學(xué)島分院,合肥 230026)
EAST 超導(dǎo)托卡馬克裝置是我國設(shè)計(jì)的國際上第一個(gè)全超導(dǎo)托卡馬克裝置[1],安全運(yùn)行至今十幾年取得了顯著的成績,2021年實(shí)現(xiàn)了1.2 億攝氏度百秒等離子體運(yùn)行和1056 s 長脈沖高參數(shù)等離子體運(yùn)行,均打破了世界紀(jì)錄。隨著實(shí)驗(yàn)邁向更高階段,對EAST 裝置安全運(yùn)行的要求越來越高,目前EAST 安全運(yùn)行通過關(guān)鍵運(yùn)行參數(shù)閾值保護(hù)、計(jì)算機(jī)連鎖保護(hù)和各子系統(tǒng)值班人員的監(jiān)控來保障[2],其中工程數(shù)據(jù)在裝置運(yùn)行安全分析中起著至關(guān)重要的作用。
工程數(shù)據(jù)主要是由各個(gè)子系統(tǒng)采集的工程信號(hào)組成,包括溫度、壓強(qiáng)、真空度等2500 多路,對聚變實(shí)驗(yàn)分析有重要的分析價(jià)值。目前主要存儲(chǔ)實(shí)時(shí)值于MySQL 工程數(shù)據(jù)庫中并部分重構(gòu)于MDSplus診斷數(shù)據(jù)庫中[3],此外還有部分?jǐn)?shù)據(jù)存儲(chǔ)在其他子系統(tǒng)數(shù)據(jù)庫中。異構(gòu)多數(shù)據(jù)源導(dǎo)致數(shù)據(jù)孤島的形成,現(xiàn)有系統(tǒng)缺乏手段對歷史數(shù)據(jù)、異源數(shù)據(jù)等進(jìn)行多維度計(jì)算分析且檢索效率不高,無法進(jìn)一步保護(hù)EAST 裝置運(yùn)行安全。除了現(xiàn)有的工程數(shù)據(jù)外,應(yīng)力應(yīng)變、絕緣性能等裝置采集數(shù)據(jù)和基于原始數(shù)據(jù)實(shí)時(shí)計(jì)算的結(jié)果也需要進(jìn)行統(tǒng)一管理,因此建立一個(gè)EAST 工程數(shù)據(jù)監(jiān)控系統(tǒng)對裝置運(yùn)行實(shí)驗(yàn)分析至關(guān)重要。
本文提出基于TDengine+Flink 流處理+Grafana可視化工具,將工程信號(hào)的數(shù)據(jù)特點(diǎn)和TDengine 存儲(chǔ)結(jié)構(gòu)相結(jié)合,利用Flink 流式管道將海量散落在各個(gè)子系統(tǒng)中的工程數(shù)據(jù)實(shí)時(shí)計(jì)算清洗到數(shù)據(jù)庫中,建立一個(gè)中心化的工程數(shù)據(jù)倉庫,打破數(shù)據(jù)孤島,規(guī)范數(shù)據(jù)格式和提升數(shù)據(jù)質(zhì)量,通過Grafana 的可視化模塊實(shí)時(shí)監(jiān)控[4],對超出閾值信號(hào)及時(shí)報(bào)警,挖掘信號(hào)之間內(nèi)在關(guān)聯(lián)以對裝置運(yùn)行狀況有更深入地了解。
EAST 裝置有診斷系統(tǒng)、電源系統(tǒng)、加熱系統(tǒng)等大量子系統(tǒng),部分?jǐn)?shù)據(jù)孤立且存儲(chǔ)格式各異形成一個(gè)個(gè)信息孤島,而工程數(shù)據(jù)作為裝置運(yùn)行安全分析的重要數(shù)據(jù)來源,更是面向整機(jī)全鏈路分析的重要依據(jù),需要重新建立一個(gè)統(tǒng)一格式的中心化數(shù)據(jù)倉庫并通過可視化模塊來滿足實(shí)際實(shí)驗(yàn)分析需要。EAST 實(shí)驗(yàn)流程一般包括降溫冷卻、穩(wěn)態(tài)運(yùn)行、回溫、系統(tǒng)維護(hù)4 個(gè)階段,以早期5 輪實(shí)驗(yàn)運(yùn)行時(shí)間為例,總運(yùn)行天數(shù)為345 天[5],整個(gè)階段都需要對幾千路工程信號(hào)進(jìn)行采集監(jiān)控以保證滿足放電實(shí)驗(yàn)要求和實(shí)時(shí)了解裝置運(yùn)行現(xiàn)狀。且工程數(shù)據(jù)一般為秒級采集頻率,單日采集可達(dá)千萬條數(shù)據(jù),還需要對歷史數(shù)據(jù)進(jìn)行存儲(chǔ)和原始數(shù)據(jù)二次計(jì)算挖掘,幫助實(shí)驗(yàn)人員對實(shí)驗(yàn)進(jìn)行進(jìn)一步調(diào)整。因此整個(gè)實(shí)驗(yàn)運(yùn)行周期的數(shù)據(jù)規(guī)模十分龐大,需要對存儲(chǔ)結(jié)構(gòu)進(jìn)行優(yōu)化。
綜上所述,系統(tǒng)需要提供面向工程數(shù)據(jù)的數(shù)據(jù)服務(wù),通過Flink 流式ETL 實(shí)時(shí)清洗計(jì)算數(shù)據(jù),建立工程數(shù)據(jù)倉庫以滿足聚變實(shí)驗(yàn)對于數(shù)據(jù)的分析需求,根據(jù)實(shí)際場景提供毫秒級的檢索能力和多樣的可視化監(jiān)控報(bào)警模塊。
EAST 工程數(shù)據(jù)具有明顯的物聯(lián)網(wǎng)數(shù)據(jù)特點(diǎn),大多都是時(shí)序型且具有明顯的結(jié)構(gòu)化特點(diǎn),實(shí)際場景中很少有更新和刪除操作,查詢分析主要基于時(shí)間序列和信號(hào)名稱,且數(shù)據(jù)流量較為平穩(wěn)不會(huì)出現(xiàn)某段時(shí)間的劇增情況,實(shí)際實(shí)驗(yàn)分析中實(shí)驗(yàn)人員更關(guān)注的是一段時(shí)間的數(shù)據(jù)趨勢和當(dāng)前實(shí)時(shí)數(shù)值而非過去某一特定時(shí)間點(diǎn)的數(shù)值。
TDengine 是一個(gè)專為物聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)設(shè)計(jì)和優(yōu)化的全棧時(shí)序數(shù)據(jù)處理引擎,采用了兩大技術(shù)創(chuàng)新極大的優(yōu)化存取效率[6]。第一大創(chuàng)新是單采集點(diǎn)對應(yīng)單表,保證數(shù)據(jù)存儲(chǔ)的連續(xù)性,大幅減少隨機(jī)讀取操作。同時(shí)每張表對應(yīng)一個(gè)信號(hào)避免了信號(hào)名等固定的靜態(tài)信息重復(fù)存儲(chǔ)。且對應(yīng)的工程信號(hào)數(shù)值范圍一般會(huì)固定在一個(gè)大致范圍中,通過列式存儲(chǔ)結(jié)構(gòu)和壓縮算法既提高了數(shù)據(jù)壓縮率,又優(yōu)化了實(shí)際查詢更關(guān)注某一列數(shù)據(jù)或少數(shù)幾列場景下行式存儲(chǔ)逐行讀取導(dǎo)致讀取效率低下的問題,大幅度提高了檢索效率。第二大創(chuàng)新利用超級表對多個(gè)數(shù)據(jù)采集點(diǎn)進(jìn)行高效聚合,將靜態(tài)標(biāo)簽單獨(dú)k-v 存儲(chǔ),多維聚合分析時(shí)先過濾標(biāo)簽大幅減少聚合的數(shù)據(jù)量,根據(jù)靜態(tài)標(biāo)簽進(jìn)行高效多維檢索。且可以繼承超級表結(jié)構(gòu)快速創(chuàng)建普通表,簡化了新表創(chuàng)建復(fù)雜度并建立了血緣聯(lián)系。
綜上所述,根據(jù)EAST 工程信號(hào)的數(shù)據(jù)特點(diǎn)和應(yīng)用場景,TDengine 無論是列存儲(chǔ)、單信號(hào)單表的特殊存儲(chǔ)設(shè)計(jì)還是超級表和標(biāo)簽對于聚合檢索的優(yōu)化,都十分適合作為EAST 工程數(shù)據(jù)監(jiān)控系統(tǒng)的底層數(shù)據(jù)庫。
整個(gè)系統(tǒng)主要包括數(shù)據(jù)源、傳輸存儲(chǔ)層、應(yīng)用層、顯示層4 層,整體架構(gòu)如圖1所示。
圖1 系統(tǒng)整體架構(gòu)Fig.1 Overall system architecture
數(shù)據(jù)源主要包括散落在各個(gè)子系統(tǒng)中的工程信號(hào)數(shù)據(jù),無論是原MySQL 工程數(shù)據(jù)庫還是其他子系統(tǒng)的應(yīng)力應(yīng)變、絕緣性能等工程信號(hào),對整機(jī)安全分析、歷史數(shù)據(jù)分析、異源關(guān)聯(lián)分析等都非常重要,需要通過傳輸存儲(chǔ)層進(jìn)行清洗整合。
傳輸存儲(chǔ)層負(fù)責(zé)將各數(shù)據(jù)源數(shù)據(jù)通過Flink 流式ETL 實(shí)時(shí)寫入到數(shù)據(jù)庫中,按照規(guī)定的數(shù)據(jù)結(jié)構(gòu)清洗,并通過各種轉(zhuǎn)換算子和自定義函數(shù)對數(shù)據(jù)進(jìn)行計(jì)算轉(zhuǎn)化?;赥Dengine 單采集點(diǎn)單表的設(shè)計(jì)思路,根據(jù)設(shè)計(jì)好的超級表結(jié)構(gòu)按時(shí)間順序存儲(chǔ)各個(gè)信號(hào)點(diǎn)的數(shù)值到對應(yīng)的普通表中。
應(yīng)用層主要基于建立的工程數(shù)據(jù)庫向用戶提供數(shù)據(jù)服務(wù),根據(jù)實(shí)際實(shí)驗(yàn)場景需求,提供Busline進(jìn)出口監(jiān)控、縱場電流溫度對比等監(jiān)控模塊。此外對關(guān)鍵工程信號(hào)設(shè)置閾值,通過報(bào)警規(guī)則和SMTP協(xié)議進(jìn)行郵件報(bào)警并將報(bào)警信息寫入到數(shù)據(jù)庫中,實(shí)驗(yàn)人員還可以進(jìn)行即席查詢和自定義可視化模塊。
顯示層基于B/S 架構(gòu)和Grafana 可視化工具給實(shí)驗(yàn)人員提供工程數(shù)據(jù)的監(jiān)控檢索界面,在EAST局域網(wǎng)環(huán)境中通過瀏覽器和權(quán)限控制訪問系統(tǒng),提供各個(gè)模塊靈活直觀的顯示界面,并支持手機(jī)、電腦等多端設(shè)備訪問。
首先設(shè)計(jì)超級表的數(shù)據(jù)結(jié)構(gòu),如圖2所示,新數(shù)據(jù)結(jié)構(gòu)下數(shù)據(jù)列由采集時(shí)間和信號(hào)數(shù)值組成,將信號(hào)ID 等工程信號(hào)基本信息設(shè)置為靜態(tài)標(biāo)簽,降低了存儲(chǔ)空間占用。根據(jù)超級表結(jié)構(gòu)采用多列模型存儲(chǔ),實(shí)驗(yàn)人員可以根據(jù)靜態(tài)信息進(jìn)行多維度聚合查詢,比如對某個(gè)子系統(tǒng)特定時(shí)間段的溫度數(shù)據(jù)變化進(jìn)行排序等分析,更好地輔助聚變實(shí)驗(yàn)進(jìn)行安全性分析以便及時(shí)發(fā)現(xiàn)隱患信息。
圖2 存儲(chǔ)模型變化Fig.2 Storage model changes
接下來通過Flink 的DataStream Api 接口編寫數(shù)據(jù)源(Source)、轉(zhuǎn)換操作(Transformation)、結(jié)果接收(Sink)算子,根據(jù)各個(gè)子系統(tǒng)的數(shù)據(jù)存儲(chǔ)情況編寫計(jì)算傳輸作業(yè),實(shí)時(shí)讀取各子系統(tǒng)中的數(shù)據(jù)并使用TDengine 提供的JDBC 接口根據(jù)超級表數(shù)據(jù)結(jié)構(gòu)以信號(hào)名為表名自動(dòng)創(chuàng)建普通表并寫入,如圖3所示。
圖3 數(shù)據(jù)清洗設(shè)計(jì)Fig.3 Data cleaning design
如圖4所示,系統(tǒng)通過上傳的Flink 作業(yè)來將不同子系統(tǒng)中的工程數(shù)據(jù)不斷傳輸?shù)皆O(shè)計(jì)好的數(shù)據(jù)庫中并計(jì)算流量、熱負(fù)荷等關(guān)鍵參數(shù)。實(shí)驗(yàn)人員通過工程數(shù)據(jù)監(jiān)控系統(tǒng)提供的可視化模塊實(shí)時(shí)了解裝置運(yùn)行狀況,比如監(jiān)控關(guān)鍵進(jìn)出口溫度并通過波形圖和閾值線分析有安全隱患的工程信號(hào)。監(jiān)控報(bào)警模塊對海量工程信號(hào)設(shè)定閾值并實(shí)時(shí)自動(dòng)監(jiān)控,郵件告警并記錄到數(shù)據(jù)庫中,彌補(bǔ)了實(shí)驗(yàn)人員人力監(jiān)控的不足。
圖4 系統(tǒng)工作流程Fig.4 System work flow chart
工程數(shù)據(jù)基本以結(jié)構(gòu)化數(shù)據(jù)為主,TDengine 采用的是關(guān)系存儲(chǔ)模型[7],由于其獨(dú)有的單采集點(diǎn)對應(yīng)單表設(shè)計(jì)和超級表概念,首先根據(jù)工程數(shù)據(jù)模型建立超級表engine_data 來代表工程數(shù)據(jù)采集點(diǎn)的集合、時(shí)間和數(shù)據(jù)值作為數(shù)據(jù)列,信號(hào)名稱等靜態(tài)信息作為標(biāo)簽,結(jié)構(gòu)如表1所示。
表1 超級表engine_data 存儲(chǔ)模型字段Tab.1 Storage model field of super table engine_data
其次EAST 裝置相同表結(jié)構(gòu)的工程數(shù)據(jù)多達(dá)幾千路,如果每次手動(dòng)創(chuàng)建新表十分繁瑣,系統(tǒng)根據(jù)超級表結(jié)構(gòu)自動(dòng)建表,提高構(gòu)建效率。通過針對不同子系統(tǒng)數(shù)據(jù)編寫不同流處理作業(yè),根據(jù)不同的存儲(chǔ)結(jié)構(gòu)如MySQL,MongoDB 等自定義數(shù)據(jù)源Source,將讀取的數(shù)據(jù)流經(jīng)過Transformation 轉(zhuǎn)換輸出到數(shù)據(jù)接收器Sink 中,利用JDBC 接口將數(shù)據(jù)從源子系統(tǒng)清洗計(jì)算到數(shù)據(jù)庫中,根據(jù)超級表結(jié)構(gòu)自動(dòng)創(chuàng)建新表,將信號(hào)名作為子表名,具體語法為
insert into <子表名>using <超級表名>tags(<tag1
value>,…)values(value1,…)(value2,…)…;
本文對工程數(shù)據(jù)庫性能進(jìn)行分析,通過對比TDengine,MySQL 分區(qū)有索引和MySQL 不分區(qū)無索引三者存取性能進(jìn)行對比,因查詢場景主要以1~2個(gè)月時(shí)間為主,所以數(shù)據(jù)測試范圍取最近2 個(gè)月進(jìn)行對比分析。TDengine 版本為2.0,測試場景為官方提供的docker 環(huán)境,MySQL 版本為8.0.22,在Windows Server2012 環(huán)境下進(jìn)行測試。針對常用的查詢場景MySQL 基于工程信號(hào)名稱和信號(hào)采集時(shí)間建立索引,并以周為跨度時(shí)間分區(qū),性能對比如表2所示。
表2 三種環(huán)境下性能對比Tab.2 Performance comparison in three environments
由性能對比可知,TDengine 通過列式存儲(chǔ)特性和靜態(tài)信息以鍵值對形式存儲(chǔ)的方式,將工程數(shù)據(jù)的存儲(chǔ)占用壓縮到MySQL 的近二十分之一,并通過連續(xù)存放相同采集點(diǎn)數(shù)據(jù)、列存儲(chǔ)等特性優(yōu)化了查詢性能,與建立索引和設(shè)置分區(qū)后的MySQL 性能相近,甚至在時(shí)間跨度更大的情況下性能更好。
系統(tǒng)基于搭建的數(shù)據(jù)庫使用Grafana 實(shí)現(xiàn)監(jiān)控可視化,通過折線圖、餅狀圖等可視化模塊[8]完成數(shù)據(jù)庫中實(shí)驗(yàn)數(shù)據(jù)和計(jì)算數(shù)據(jù)的顯示,以實(shí)際實(shí)驗(yàn)場景為背景搭建不同的監(jiān)控界面,比如關(guān)鍵信號(hào)進(jìn)出口溫度實(shí)時(shí)監(jiān)控如圖5所示,實(shí)時(shí)刷新并通過顏色顯示根據(jù)閾值判定的危險(xiǎn)程度,直觀顯示信號(hào)情況。并配置SMTP 協(xié)議設(shè)置發(fā)件服務(wù)器,超出閾值后通過郵件傳輸協(xié)議和告警郵件規(guī)則發(fā)送信息給監(jiān)控人員,通過Webhook 配置的URL 發(fā)送報(bào)警信息,后端接收到請求后記錄到報(bào)警日志數(shù)據(jù)表中并顯示在圖表中。
圖5 關(guān)鍵進(jìn)出口溫度監(jiān)控模塊Fig.5 Inlet & outlet temperature monitoring module
EAST 縱場超導(dǎo)磁體是約束等離子體使其穩(wěn)態(tài)運(yùn)行的重要裝置,其中縱場電流對于裝置安全分析十分重要[9]。系統(tǒng)通過對比縱場電流和其他工程信號(hào)如TF_BLineO 溫度波形圖,如圖6所示,幫助實(shí)驗(yàn)人員進(jìn)行異源數(shù)據(jù)分析,探索工程信號(hào)關(guān)聯(lián)性。
圖6 縱場電流和其他工程信號(hào)對比監(jiān)控模塊Fig.6 TF current and other engineering signal comparison monitoring module
除了以上兩個(gè)模塊,系統(tǒng)基于建立的工程數(shù)據(jù)庫還開發(fā)了大量實(shí)驗(yàn)分析模塊,如信號(hào)波形監(jiān)控、歷史降溫對比等,既滿足了日常實(shí)驗(yàn)對于工程信號(hào)的監(jiān)控需求又幫助實(shí)驗(yàn)人員對數(shù)據(jù)進(jìn)行多維度計(jì)算分析,從中摸索異源工程數(shù)據(jù)潛在的關(guān)聯(lián)性,進(jìn)而幫助實(shí)驗(yàn)人員挖掘聚變實(shí)驗(yàn)數(shù)據(jù)價(jià)值。
系統(tǒng)基于EAST 工程信號(hào)的數(shù)據(jù)特點(diǎn)和實(shí)際實(shí)驗(yàn)監(jiān)控分析場景,結(jié)合TDengine 特殊的存儲(chǔ)結(jié)構(gòu)和Flink 流處理優(yōu)勢,整合多源異構(gòu)的工程信號(hào)數(shù)據(jù),建立EAST 工程信號(hào)數(shù)據(jù)倉庫,解決了目前工程數(shù)據(jù)之間相互孤立、格式不統(tǒng)一的現(xiàn)象,高效支撐實(shí)驗(yàn)對歷史數(shù)據(jù)、異源數(shù)據(jù)等多維度分析需求。經(jīng)過驗(yàn)證通過列存儲(chǔ)、單信號(hào)單表、超級表等數(shù)據(jù)存儲(chǔ)優(yōu)化措施,既降低了存儲(chǔ)空間成本又提高了檢索效率。同時(shí)使用Grafana 提供了一套EAST 工程信號(hào)監(jiān)控系統(tǒng),滿足了聚變實(shí)驗(yàn)中的數(shù)據(jù)監(jiān)控可視化和告警推送需求,并通過豐富的可視化模塊挖掘工程信號(hào)之間潛在關(guān)聯(lián)和數(shù)據(jù)價(jià)值。目前系統(tǒng)已成功部署并應(yīng)用在EAST 最近一輪工程實(shí)驗(yàn)中,證明了系統(tǒng)的可行性。