周啟凡,郭迎清,趙萬里,王 昆,孫 浩,陶欣昕
(1.西北工業大學 動力與能源學院,陜西 西安 710129; 2.西安現代控制技術研究所,陜西 西安 710065)
高空臺是國家戰略性資源,高空模擬是自主研制先進航空發動機必不可少的重要手段和工具,一個國家的高空模擬能力和技術水平已成為該國自主研制先進航空發動機能力和水平的一個重要標志[1]。高空模擬試驗過程中,會利用各類傳感器測量試驗設備參數數據信息,這些參數信息最終會存儲于歷史數據庫中(Oracle數據庫)[2]。為了供試驗人員查看分析數據所蘊含的內在聯系和價值,需要將存儲于底層數據庫中的數據進行數據挖掘與可視化展示,將各類傳感器測量參數直觀地呈現于前端界面中,供試驗人員進行對應的技術操作;且為了不破壞歷史數據庫的封裝性和完整性,需要將后續用于各類算法的數據源從歷史數據庫中遷移至本地數據庫中進行數據處理,因此數據的可視化展示和數據流遷移技術的研究具有重要意義。
目前,我國某型高空臺能夠對多種型號的發動機進行試驗驗證,但高空臺各個試驗設備采集的原始數據僅存儲于歷史數據庫中,在需要用到的時候對數據庫進行檢索,查詢相應的數據信息,可視化、智能化水平不高[3],其深層利用價值并未得到開發。具體來說其數據價值利用的瓶頸主要體現在以下兩個方面:① 對數據的挖掘研究不夠深入,未對數據本身或各類數據關聯集之間所隱藏的各類信息進行充分挖掘[4],發現其所包含的深層聯系和規律;② 數據在綜合管控平臺中的顯性化表達處于初級階段,在人機交互界面中只簡單地展現了系統測得的有限原始數據,操作人員獲取的數據價值有限且形式簡單,在數據價值與數據展示直觀性上有待改進。
在數據流遷移技術中,目前航空發動機領域采用的數據流遷移技術主要包括3種:① 創建一個中間數據存儲單元[5],將本地所需數據源從歷史數據庫中取出并存入中間存儲單元中,再通過本地數據庫讀取中間單元的數據,實現數據源獲取;② 采用Oracle原生的觸發器模式[6],給定觸發條件,將歷史數據庫數據信息在觸發條件的作用下同步至本地數據庫中;③ 通過TCP協議或動態鏈接庫接口獲取歷史數據庫中的數據源信息[7]。在學術界與產業界中,數據流遷移技術處于平穩發展階段,Delakis等[8]研究了段特征,進而提出了一種可以解決異構數據庫同步問題的段模型。針對異構數據庫系統的hooking問題,Lehman等[9]提出了TSpaces,TSpaces是一種數據庫中間件,它通過研究和整合異構數據庫系統的事務、數據訪問等特征解決異構數據庫系統之間同步的通信問題;Yadav等[10]基于事務復制提出了一種分布式數據同步架構;Vassev[11]基于微軟消息隊列提出了一種解決企業多分支系統之間數據庫同步解決方案。
IBM公司提出了一種支持異構數據庫之間透明訪問的連接方法,并研發了名為DB2 Data Joiner的數據庫同步中間件產品[12];SyBase通過在數據源節點運行一個檢測數據庫日志的進程,實現了數據的復制,研發了名為Enterprise Connect的數據庫同步中間件產品[9];為了實現異構數據庫之間數據通信,Oracle 提出數據庫轉換器的概念,并直接收購了Golden Gate數據庫同步產品[13];DB2通過建立CCD表實現異構復制,SQLSever提出了發布者訂閱者模式[14]。但是對于航空發動機模擬試驗臺采集的各傳感器測點數據,因為其具有軍工行業性質,追求的是數據的保密性、安全性和數據同步的實時性,目前在航空發動機領域所采用的技術,限制性較多,無法保證數據流遷移的實時性和封裝性。而利用產業領域的第三方開源軟件無法保證數據流遷移的保密性與安全性。
基于上述關于高空模擬試驗臺數據可視化及數據流遷移所存在的不足,本文提出了基于多框架集成的航空發動機高空模擬試驗臺數據流實時遷移及可視化技術,在高空模擬試驗臺數據可視化部分采用基于MyBatis-Plus框架的自動視圖層構建技術,將試驗設備各傳感器參數信息清晰直觀地展示于Vue框架的瀏覽器端表結構空間中,供試驗人員查看和分析,在數據流遷移部分,采用了基于GateWay限流機制的JDBC接口模式及負載均衡機制的MyBatis框架模式,在保證數據流遷移的保密性和安全性的前提下,極大程度地縮短數據同步時間,滿足實時性要求。最終通過Vue框架的前端界面監控數據流同步的過程,并給出對應的結論。
在高空模擬試驗設備試驗過程中,需要采集數百個字段名參數和數萬個測量點數據,這些數據極其重要,為方便后續進行數據分析、發動機性能評估、智能化管理和控制,需要將采集的數據存儲起來,但是使用Excel或其他非關系型數據庫可能會導致數據覆蓋和丟失等問題,因此本文采用Oracle數據庫作為歷史數據庫和本地數據庫的源數據庫,這是由于Oracle數據庫對于歷史數據的存儲、持久性和熱備份都有很好的優勢[15]。Oracle的結構主要包括兩部分,即實例結構和數據庫系統。實例部分包括擴展的JAVA操作池、共享池、日志緩沖池等,真正實現數據存儲的是Oracle數據庫系統,Oracle的整體結構和后續的數據流遷移流程如圖1所示。
在高空模擬試驗設施運行過程中,進排氣系統、冷卻系統、發動機參數等數據通過TCP采集,集中存儲在歷史數據庫(Oracle數據庫)中,如圖2所示。
圖2 測量參數采集原理圖
為了保持歷史數據庫的封裝性和完整性,后續基于數據的發動機性能評估、異常數據處理和故障診斷分析都將在本地數據庫中完成。該過程中涉及數據流的可視化展示與數據流遷移的技術點包括:數據流的可視化展示可以方便試驗員對數據進行查看分析,直觀地展示給相關人員;數據流的遷移功能可以在極大程度地保持歷史數據庫完整性的情況下,充分挖掘所需數據信息,作為后續各類算法研究的數據源,因此數據的可視化功能和遷移功能成為整個實驗流程的關鍵。
針對航空發動機高空模擬試驗臺數據流遷移及可視化功能,本文主要闡述兩部分技術要點:首先是數據流的可視化功能,該部分主要是將高空模擬試驗臺設備的各類傳感器所測量的參數,包括閥門開度數據、進出口壓力及進出口溫度等信息可視化地展現于瀏覽器端。主要涉及的技術組成包括后端的MyBatis-Plus框架模式、Spring MVC設計模式、跨域數據傳輸模式及前端的Vue框架模式、Element UI技術。數據流可視化流程如圖3所示。
其次是數據流的實時同步遷移功能,該部分的實現理念是將匯集于Oracle數據庫中的集合數據進行數據提煉,因為Oracle數據庫中的數據未全部用于后續的故障診斷算法或為其他實現提供數據源支持,且歷史數據庫一般不能進行改變,直接操作歷史數據庫會破壞其封裝性,造成表結構空間的改變、破壞數據的原子性。因此需要將部分需要利用的數據同步到本地數據庫中。在同步的過程中,依據高空模擬試驗臺測點參數數量級、測點參數字段名個數和同步時間的要求,主要采用3種方式:基于觸發條件的原生觸發器模式、基于GateWay限流機制的JDBC接口融合全量/增量模式和基于負載均衡機制的MyBatis框架融合多線程并行處理流模式,來針對不同的情況完成數據的遷移功能。該部分主要涉及的技術組成包括后端的MyBatis框架模式、JDBC接口模式、觸發器模式、負載均衡權選擇器模式、GateWay限流模式、Spring MVC設計模式、Spring Boot框架模式及前端的Vue框架模式、Element UI技術。數據流遷移整體流程如圖4所示。
圖4 數據流遷移整體流程
為了在航空發動機高空模擬試驗過程中,數據流可以可視化地呈現于瀏覽器端供試驗人員查看和分析,而無須再從數據庫中查詢相關的數據,則需要利用基于MyBatis-Plus 框架的自動視圖層構建可視化技術的支持,這個過程中涉及到多個框架的交互和數據流跨域傳輸的關鍵點,首先介紹此技術中涉及的幾大類框架結構及其功能。
(1) MyBatis-Plus框架。
MyBatis-Plus框架是用于Java與底層數據庫之間進行數據交互與映射的高級框架模式,根據底層數據庫中所存在的數據類型及字段名名稱,構建航空發動機高空模擬試驗臺實體類對象,實現BaseMapper接口后,完成自動視圖層構建程序,即可實現Spring MVC的三層遞進結構模式,自動生成高空模擬試驗臺實體類對象中的字段名屬性,這些字段名屬性與數據庫中對應數據表的字段名名稱一一映射,操作程序即可修改或重新為字段名信息進行賦值,利用MyBatis-Plus框架即可實現自動數據查詢、修改和重置等功能,將數據表信息讀取到高空模擬實驗臺實體類對象內部,便于后續操作。
(2) Spring MVC設計模式。
Spring MVC設計模式,即Model(模型),View(視圖),Controller(控制器)三層結構模式[16-17],采用循環依賴注入的邏輯,將視圖層注入模型中,并將封裝好的模型層注入前端控制器中,便可將數據在瀏覽器端展示,MyBatis-Plus的自動視圖層構建技術就用到了Spring MVC的三層遞進結構模式[18],分別對應Repository層,Service層和Controller層。Repository層中編寫查詢高空模擬試驗臺對應表結構空間中的數據的功能,將其注入到Service層中,實現對應的接口及實現類,最終將Service層注入Controller層中,在瀏覽器中調用Controller層中的根目錄路徑,即可將數據呈現于瀏覽器中。
(3) 數據流跨域傳輸技術。
因為最終需要呈現的高空模擬試驗臺測量參數是在Vue框架對應表結構中,而Spring MVC設計模式中的Controller層是在給定根路徑下的瀏覽器端中呈現最終的數據,想要將數據呈現于Vue框架下設定的表結構中,則需要數據的跨域傳輸,在主程序中加入對于跨域請求GET、POST、DELETE、SELECT支持的屏蔽端口傳輸的程序即可實現數據的跨域傳輸。
該過程的實現流程如下。
① 首先利用TCP協議,將傳感器測量的試驗設備參數數據存儲于歷史數據庫中,試驗參數主要包括閥門開度,進出口壓力測量值,進出口溫度測量值及時間戳等數據信息。
② 利用Java作為第三方語言操作數據庫,配置連接信息,給定驅動及數據庫連接池信息,使得程序與歷史數據庫之間建立連接關系。
③ 創建航空發動機高空模擬試驗臺實體類對象,實現BaseMapper接口,自動生成實體類對象內部屬性值,與數據表字段名一一映射。自動生成視圖層層遞進邏輯關系,自動生成數據表數據檢索功能,并將最終所獲取的數據表信息封裝于高空模擬試驗臺實體類對象內部,用于后續前端界面的展示。
④ 利用Vue框架,編寫屏蔽端口的跨域數據流傳輸程序,使得封裝于高空模擬試驗臺內部的數據信息可視化地呈現于Vue框架的瀏覽器端表結構中,至此整個執行流程完成。
最終呈現于Vue框架瀏覽器端表結構中的數據信息如圖5所示。
圖5 高空模擬試驗臺參數測量信息展示
因高空模擬試驗臺在試驗過程中所測量參數的保密性及重要性,利用基于觸發條件的原生觸發器模式和開源的數據流遷移技術無法保證數據的實時性及安全性,所以本文采用了基于GateWay限流機制下的JDBC接口融合全量/增量數據流遷移模式來實現數據實時同步的功能。
JDBC接口模式主要包括以下6部分:配置數據庫連接信息層、Druid數據源連接層、動態SQL語句切換層、定時器任務層、GateWay限流機制層和最終的主程序。所有的功能最終集成于主程序中,以定時任務的形式不斷地將數據流進行遷移,從而完成數據的同步功能,程序的執行流程如圖6所示。
圖6 基于GateWay限流機制的JDBC接口模式程序執行流程圖
首先配置.yml文件,包含歷史數據庫和本地數據庫的所有配置信息;給定Druid數據源,初始化數據庫常量池的配置參數,通過數據庫連接函數將配置文件內的信息解析到定時程序中;設置定時器,使程序一直處于啟動狀態,給定刷新率。在定時程序執行過程中,通過Map集合的鍵值對存儲高空臺試驗編號和其對應的數據表信息,通過動態SQL指令,實現不同數據表的數據同步操作,最終將定時任務程序注入主程序邏輯中。當有新的數據增添到歷史數據庫并提交時,主程序可以實時監測到數據量的改變并將數據刷新插入到本地數據庫中。在數據流遷移過程中,每次數據同步的數據量不同,數據量過大時會造成數據同步的堵塞,前一次同步的數據發生的堵塞會使得后續的同步無法進行,這樣急劇地增加了數據同步的時間。當數據堵塞嚴重時,會造成數據庫發生死鎖的情況,數據處于堵塞狀態,后續的同步請求持續等待,處于僵持狀態,當死鎖狀態過長時,會增加服務器雪崩的可能,在這種情況下,利用GateWay限流機制,控制每一次的同步量處于設定的數量集范圍內,這種設定可以控制每一次的數據同步量都可處于最優的數量級,且依據觸發條件可以動態切換全量及增量同步方式,即可實現數據的有效遷移,避免死鎖的發生。
其中配置數據庫連接信息層主要包括數據庫連接時所需要的用戶名信息、密碼信息、驅動配置信息和URL信息。還包括數據庫池數量及初始化參數、試驗編號的存儲路徑和定時任務執行時間等內容。
Druid數據源配置層將連接好的數據庫信息以Druid數據連接源形式進行封裝,給定池化參數的初始化信息,完成數據庫的連接操作。并將最終配置完成的數據庫放入定時任務中。
動態SQL語句切換層主要是將SQL語句進行編譯,實現其所需達到的目標,該層主要包括兩個部分,第一部分是反射解析歷史數據表的表結構信息,解析源表的字段名信息、數據結構、注釋等內容,從而構建與歷史數據表表結構空間完全一致的本地數據表,為數據同步提供表結構空間支持。第二部分主要是全量/增量數據同步切換模式,如圖7所示。
圖7 數據同步模式切換邏輯
當數據同步主程序啟動時,歷史數據庫中已存在數據,若此時本地數據庫表中存在不需要的數據時,則執行全量同步方式。該方式主要包含以下3部分。
① 獲取歷史表數據,將本地表清空,將數據同步至本地表,之后再執行增量同步方式,將歷史數據表后續不斷增加的數據同步到本地表中。當本地數據庫的目標表中不存在數據時,則直接執行增量同步方式,將歷史數據庫中的數據不斷同步到本地數據庫中。
② 定時任務層。將連接配置完成后的Druid連接池利用Connection關鍵字進行數據通道連接,并將動態SQL語句與定時任務進行關聯,解析并獲取定時任務執行時間,開啟定時任務,不斷獲取歷史數據庫表結構空間中的數據,并將數據同步到本地數據庫的表結構空間中。
③ 主函數層。將定時任務層所執行的所有邏輯的外部設置監控系統,實時監測數據流的執行進度,統計數據執行的時間和數據同步量。
MyBatis框架模式主要以注入層的形式實現,主要包括Repository層、Service層,以及Controller層外部設置數據監控邏輯,用以監控數據同步的狀態。基于負載均衡機制的MyBatis框架模式如圖8所示,核心研究對象為數據流遷移從歷史數據庫到本地數據庫的執行進程,因此采用一主一從的多數據源方式。
圖8 基于負載均衡機制的MyBatis框架模式
引入多線程的概念,該多線程并行傳輸流與傳統的多線程方式不同,該方式采用分治并行處理,將數據進行分割,分割塊選為100,則每個線程處理幾百行數據,多個線程同時并行執行數據的索引和插入功能,將極大程度地提高數據同步的效率,滿足實時性要求。
創建航空發動機高空臺字段名參數實體類對象,構建Repository層的數據獲取和插入功能接口,將其注入Dao層來完成數據源配置。最終將連接好的Dao層注入Service層,加入多線程并行傳輸流邏輯,分配表結構,獲取試驗臺編號信息,自動檢索同步表名稱。
Repository層主要是實現數據庫的配置信息,采用主從數據源配置歷史數據庫信息及本地數據庫信息,連接歷史數據庫,獲取歷史數據表字段名及數據信息;連接本地數據庫,構建與需要同步的歷史數據表表結構空間相同的本地數據表,將數據執行插入操作。
將連接好的Repository層注入Dao層,Dao層主要是從Mapper文件中利用元注解解析出SQL語句和需要執行的函數功能,將高空模擬試驗臺數據表字段名信息與高空模擬試驗臺實體類屬性對象進行對應關聯,整體連接好的結構定義為Service層。
將Service層注入Controller層中,利用定時程序解析獲得定時時長和外部監控邏輯,實時監控數據流的傳輸過程,最終得到所需的執行結果。負載均衡作用于主程序的邏輯中,負載均衡的引入是為了解決某一線程處理數據同步過程中,因數據量較大造成的同步堵塞的問題。當某一個線程所需要同步的數據量過大時,此時觸發負載均衡權重選擇器的邏輯,該線程的負載均衡權重值較大,此時,系統會將其任務量分配給其他線程同時來完成,極大程度地解決了單一線程超負荷工作的情況,避免了線程堵塞和數據庫死鎖現象的發生。
因為高空模擬試驗臺試驗流程中采集的數據量巨大,分布于不同的表結構空間中,每次需要同步多個表的數據,每個表的同步時間是統計開始同步時刻的時間戳節點到同步完成時的時間戳節點之間差值,本文采用基于Vue框架的前端框架實時監控數據流傳輸過程中各個表的同步信息,其中前端界面包含3部分主要功能。
① 用戶登錄界面:采用基于Nacos服務注冊與發現的設計原則,匹配正確的用戶名及密碼,支持多用戶登錄模式。
② JDBC接口數據同步監控:主要是監控JDBC接口模式的數據流遷移的同步時長,包含不同數據表的切換功能、同步表名稱、同步數據量、同步時長、同步狀態等信息。
③MyBatis框架數據同步監控:主要是監控MyBatis框架模式的數據流遷移的同步時長,包含不同數據表的切換功能、同步表名稱、同步數據量、同步時長、同步狀態等信息。
登陸界面主要包括用戶名及用戶密碼信息,用戶名及密碼一一對應存儲于Oracle數據庫中,以鍵值對的形式取出,這樣可以滿足多用戶登錄整個系統的模式。當用戶名與密碼匹配成功,即可進入首頁,Nacos服務的注冊與發現設計原則可以解決在同一時間有多用戶登錄服務的情況,其邏輯校驗功能可以排除非法登錄信息的情況。在登錄頁面中,首先會根據用戶輸入的用戶名密碼校驗數據的準確性,當用戶名和密碼組成的鍵值對形式處于完全正確的情況下才會登錄整個平臺內部數據流監控的頁面。同時Nacos服務也會在該過程中監控整個登錄用戶名的合法性。當多用戶同時進行登錄時,Nacos服務會識別登錄的順序,利用JUC并發包下的semphore機制來排序登錄的用戶信息,從而完成整個登錄流程。用戶登陸界面如圖9所示。
圖9 用戶登錄界面
JDBC接口融合全量/增量的數據實時同步技術,具體選擇增量還是全量的方式則需要利用GateWay的限流機制來進行判斷。當每次新增的數據量不大時,為防止同步數據的缺失及因網絡延遲等造成的數據丟失問題,選擇執行全量同步將需要的數據再全部同步一次。當數據量很大時,則需要利用GateWay機制調用增量式的同步方法來完成,且每一次同步限定其同步數據量處于機制調控允許的范圍內,防止同步堵塞產生死鎖的可能。該方式的數據同步量為平均每秒200+行數據,滿足實時性要求,對應數據如表1所示。同步時長與同步數據量關系如圖10所示,監控界面如圖11所示。并且圖11所示界面中可以增加同步模式,同步表試驗編號等額外組件按鈕,擴展性和泛化能力好,當需要改變同步模式及不同表的同步過程時,只需自定義切換即可更改前后端交互的接口。
表1 JDBC接口方式數據同步式數據展示
圖10 JDBC接口模式數據同步量與同步時間關系表示圖
圖11 JDBC接口模式數據同步監控界面
負載均衡的提出正是為解決在多任務情況下,數據讀取量大、數據多、情況較為復雜的場景中出現的問題。而基于MyBatis框架融合多線程并行處理流的數據實時同步這一模式,正是針對大數據量、多字段名情況而設計的方法,利用負載均衡機制對其進行相應優化,優化每一塊線程并行處理流的執行速度,讓每一部分疊加起來,使整個系統執行的速度顯著提升,在該流程中,主要是監控數據流同步的數據量,數據同步時間及日期等相關信息內容。
其中有切換數據同步模式的雙選功能,并且預留了增配接口,當有新的方式需要加入時,可以動態進行選擇加入,最終向試驗員展示的是數據同步總量、數據同步時間和同步狀態。在整個平臺中,選擇需要試驗的編號,即可完成對應試驗編號數據的同步,且試驗可進行擴展,可增加試驗編號與其對應的數據表。數據流遷移過程也可同步或分步進行,該方式的數據同步量為平均每秒300+行數據,滿足實時性的要求,對應數據如表2所示。同步時長與同步數據量關系如圖12所示,監控界面如圖13所示。并且圖13所示界面中可以增加同步模式,同步表試驗編號等額外組件按鈕、擴展性和泛化能力好,當需要改變同步模式與不同表的同步過程時,只需自定義切換即可更改前后端交互的接口。
表2 MyBatis框架數據同步模式數據展示
圖12 MyBatis框架模式數據同步量與同步時間關系表示圖
圖13 Mybatis框架模式數據同步監控界面
本文提出了采用多框架集成的方式來實現高空模擬試驗臺數據流可視化及遷移的技術:通過基于MyBatis-Plus的自動視圖層構建模式將存儲于底層數據庫中的各傳感器測量參數信息跨域呈現于Vue框架的瀏覽器端,可供試驗員查看分析;利用基于GateWay限流機制的JDBC接口融合全量/增量數據實時同步模式及基于負載均衡機制的MyBatis框架融合多線程并行處理流模式可實現數據的實時遷移功能,前端采用Vue框架監控數據流傳輸過程,可實時監測數據同步的流程。通過對這兩部分功能的驗證,得到以下結論。
① 航空發動機高空模擬試驗臺各測點數據可以通過基于MyBatis-Plus的自動視圖層構建技術通過檢索底層數據庫表結構中的信息,清晰地呈現于瀏覽器端界面,數據展示過程中,完整性對應性好,試驗員可以直觀地查看分析數據所蘊含的內在信息,數據可視化分析具有參考價值。
② 數據同步的實時性極大地提高。兩種數據流遷移技術均可保證在每秒內實現200以上的數據同步量,能在短時間內高效地完成數據庫之間的數據傳輸,保證了實時性。能夠實現數據的完全遷移,在傳輸過程中不丟失數據和保證準確性,能夠實現完全的數據同步。
③ 自動檢索同步表功能齊全。同步表名稱可根據試驗編號自動選擇,完成不同字段表的實時數據同步功能,擴展能力強。當需要添加其他試驗表同步業務時,只需給定試驗編號。該試驗編號對應的同步表可以完成數據的實時同步任務。