辛尚聰 孫曉康 李 川 宣 科 劉功發(fā)
(中國科學技術大學 國家同步輻射實驗室 合肥 230029)
合肥光源是以真空紫外和軟X射線為主的專用同步輻射光源。2010年初合肥光源進行了重大維修改造,改造后的合肥光源稱為HLS-II(Hefei Light Source-II)[1]。HLS-II控制系統(tǒng)是基于實驗物理和工業(yè)控制系統(tǒng)(Experimental Physics and Industrial Control System,EPICS)的分布式控制系統(tǒng)[2]。歷史數(shù)據(jù)存檔和檢索系統(tǒng)是HLS-II控制系統(tǒng)的重要組成部分,負責存儲HLS-II的運行狀態(tài)數(shù)據(jù),并提供檢索功能以供用戶進行性能分析和故障診斷[3-4]。隨著HLS-II的運行,存儲的歷史數(shù)據(jù)量不斷增加,當用戶查詢時間范圍較大的歷史數(shù)據(jù)時,直接進行原始數(shù)據(jù)檢索會導致查詢時間很長,用戶體驗較差。為了提高歷史數(shù)據(jù)的查詢速度,我們設計了數(shù)據(jù)抽取算法和數(shù)據(jù)檢索邏輯。數(shù)據(jù)抽取算法按照不同的時間粒度對原始數(shù)據(jù)進行分段并抽取相應的特征數(shù)據(jù),特征數(shù)據(jù)會存入數(shù)據(jù)庫的冗余數(shù)據(jù)表中。數(shù)據(jù)檢索邏輯將根據(jù)用戶查詢數(shù)據(jù)的時間范圍來計算合適的時間粒度,并以此時間粒度從冗余數(shù)據(jù)表中檢索數(shù)據(jù),返回相應的特征數(shù)據(jù)?;诖嗽O計,我們開發(fā)了基于HBase的數(shù)據(jù)存檔和檢索系統(tǒng)(HBasebase Data Archiving and Retrieving System,HDARS)。
HDARS的總體架構如圖1所示,由Archiver Appliance、數(shù)據(jù)檢索模塊(Data Retrieval Module)和Web前端(Web Front-End)組成。Archiver Appliance是EPICS社區(qū)發(fā)布的最新數(shù)據(jù)存檔工具,由SLAC、BNL和MSU聯(lián)合開發(fā),采用多級存儲機制,同時具有高效的數(shù)據(jù)查詢性能[5]。目前,Archiver Appliance已應用在合肥光源[6]、上海光源[7]、釷基熔鹽堆(Thorium Molten Salt Reactor,TMSR)實驗裝置[8]、ESS(European Spallation Source ERIC)[9]等多個裝置上。Archiver Appliance提供了數(shù)據(jù)采集、存儲、遷移和檢索的功能。我們將Archiver Appliance配置成兩級存儲:短期存儲(Short term store)和長期存儲(Long term store)。短期數(shù)據(jù)為最近1 h以內(nèi)的數(shù)據(jù),存儲在內(nèi)存(Ramdisk)中,超過1 h的數(shù)據(jù)為長期數(shù)據(jù),存儲在HBase中。Archiver Appliance具有多個模塊:采集引擎模塊(Engine)采集來自輸入/輸出控制器(Input/Output Controllers,IOCs)的過程變量(Process Variable,PV)數(shù)據(jù)并存入內(nèi)存;數(shù)據(jù)檢索模塊(Retrieval)檢索內(nèi)存中的數(shù)據(jù),以響應用戶對短期數(shù)據(jù)的查詢請求;數(shù)據(jù)遷移模塊(Extract,Transform and Load,ETL)負責將數(shù)據(jù)從短期存儲遷移到長期存儲。我們修改了Archiver Appliance的ETL模塊將數(shù)據(jù)從內(nèi)存遷移至HBase。HBase是運行在Hadoop之上的一個開源的非關系型分布式數(shù)據(jù)庫,具有高可靠性、高性能和易擴展性的特點[10-11]。目前,HBase已在日本質(zhì)子加速器研究中心(Japan Proton Accelerator Research Complex,JPARC)的數(shù)據(jù)存檔系統(tǒng)中得到了應用,用以解決關系數(shù)據(jù)庫在大數(shù)據(jù)量時存在的性能不足問題[12-13]。此外,我們基于數(shù)據(jù)抽取算法開發(fā)了預處理模塊(Preprocess Module)和后處理模塊(Post-process Module),按不同的時間粒度對原始數(shù)據(jù)進行分段,并抽取相應特征數(shù)據(jù)。
圖1HDARS的系統(tǒng)架構Fig.1 System architecture of the HDARS
數(shù)據(jù)檢索模塊作為HDARS的Web后端,采用Java Spring 框架[14]開發(fā) ,通過 HTTP(HyperText Transfer Protocol)協(xié) 議 和 API(Application Programming Interface)接口分別與 Archiver Appliance和HBase通信來進行數(shù)據(jù)檢索,同時數(shù)據(jù)檢索模塊為Web前端提供了RESTful接口。Web前端提供圖形界面供用戶查詢歷史數(shù)據(jù)。
HBase是一種列族式數(shù)據(jù)庫,其數(shù)據(jù)存儲單位是單元格。如圖2所示,該單元格由行鍵(Row key)、列族(Column Family)名稱 和 列限定符(Column Qualifier)名稱指定[15]。在 HDARS 中,HBase部署在Hadoop平臺之上,使用Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)提供底層存儲支持。Hadoop硬件平臺由8臺DELL PowerEdge R740xd型號的服務器組成,每臺服務器物理配置為:2.20 GHz Intel Xeon Gold 5120 CPU,192 GB內(nèi)存,兩塊480 GB的固態(tài)硬盤,20塊1.8 TB的機械硬盤。
圖2 HBase中歷史數(shù)據(jù)存儲機制Fig.2 Storage mechanism of historical data in HBase
在HBase中,我們設計了兩張表來存儲歷史數(shù)據(jù):原始數(shù)據(jù)表(Raw Table)和冗余數(shù)據(jù)表(Redundant Table)。原始數(shù)據(jù)表有一個“Historical Data”列族,該列族下有一個“Sample value”列,每個單元格的容量為1 024字節(jié),用于存儲一個PV的多個時間連續(xù)采樣點的數(shù)據(jù)。原始數(shù)據(jù)表的行鍵由PV Id和時間戳(Timestamp)組成,其中PV Id是根據(jù)PV名稱隨機生成的,行鍵時間戳是單元格中第一個采樣點的時間戳。冗余數(shù)據(jù)表中的每個單元格存儲的是特定的時間粒度下多個時間連續(xù)的特征數(shù)據(jù),其行鍵是由PV Id、級別(level)、類型(type)和時間戳組成,級別是指時間粒度,類型是指特征值的類型。在HDARS中,我們設計了三種時間粒度(1 min、1 h和1 d)和4種特征值(某個時間粒度下的第一個值、最小值、最大值和平均值)。當Web前端可顯示的數(shù)據(jù)量被配置為4 000時,1 min、1 h和1 d粒度能夠顯示時間范圍為3 d、6 m和11 a的歷史數(shù)據(jù),這個時間范圍可以完全滿足HLS-II用戶的查詢需求。當Archiver Appliance的采樣周期配置為1 s時,相較于原始數(shù)據(jù)量,會增加(4/60+4/3 600+4/86 400≈6.79%)的冗余數(shù)據(jù)量,存儲空間的冗余量并不大。冗余數(shù)據(jù)表中存儲的是經(jīng)過數(shù)據(jù)抽取算法處理之后的數(shù)據(jù),該算法以不同的時間粒度對原始數(shù)據(jù)進行分段,并提取每個時間段中的特征值。我們基于該算法開發(fā)了預處理模塊和后處理模塊。預處理模塊以1 min的時間粒度對原始數(shù)據(jù)進行分段,并提取每個時間段中的特征值,同時預處理模塊也實現(xiàn)了數(shù)據(jù)對齊的功能。預處理模塊是實現(xiàn)了Archiver Appliance StoragePlugin接口(Java接口)的插件程序,已經(jīng)集成在Archiver Appliance中。Archiver Appliance在批量遷移數(shù)據(jù)(接近1 h的數(shù)據(jù)量)的同時會預處理這些數(shù)據(jù),預處理模塊約以每秒112 500個采樣事件(約2 MB?s-1)的速度處理和寫入數(shù)據(jù)到HBase,一個小時的短期數(shù)據(jù)耗時約20 s。后處理模塊以較粗的時間粒度周期性地對冗余數(shù)據(jù)表中較細時間粒度的數(shù)據(jù)進行進一步處理。如果1 min粒度的數(shù)據(jù)存滿1 h,則后處理模塊將以1 h的時間粒度來分段并抽取相應特征數(shù)據(jù),并將特征數(shù)據(jù)存入冗余數(shù)據(jù)表。同理,1 d粒度的數(shù)據(jù)是基于1 h粒度的數(shù)據(jù)獲得的。
數(shù)據(jù)檢索邏輯如圖3所示。當用戶查詢歷史數(shù)據(jù)時,數(shù)據(jù)檢索模塊將按查詢時間范圍來判斷數(shù)據(jù)位置,數(shù)據(jù)位置有以下三種情況:第一種是數(shù)據(jù)全部在Archiver Appliance中;第二種是數(shù)據(jù)全部在HBase中;第三種是數(shù)據(jù)在Archiver Appliance和HBase各占一部分。對于第一種情況,數(shù)據(jù)檢索模塊將直接從Archiver Appliance中檢索數(shù)據(jù)。對于第二種情況,數(shù)據(jù)檢索模塊將根據(jù)查詢時間范圍內(nèi)的數(shù)據(jù)量來選擇是從原始數(shù)據(jù)表或冗余數(shù)據(jù)表中檢索數(shù)據(jù)。在檢索冗余數(shù)據(jù)表之前,檢索模塊將按照時間粒度從細到粗的順序來計算查詢時間范圍內(nèi)的數(shù)據(jù)量,直到某個粒度下的數(shù)據(jù)量小于4 000,檢索模塊將以此時間粒度檢索數(shù)據(jù)。對于第三種情況,時間粒度的選擇邏輯與第二種情況相同,數(shù)據(jù)檢索模塊將以同一時間粒度從Archiver Appliance和HBase檢索數(shù)據(jù),然后組合數(shù)據(jù)返回至Web前端。
圖3HDARS數(shù)據(jù)檢索流程圖Fig.3 Flowchart of HDARS data retrieval
HDARS的Web前端是基于Bootstrap開發(fā)的,為用戶提供了HLS-II歷史數(shù)據(jù)查詢界面。Bootstrap是目前最流行的Web前端開發(fā)框架[16]。圖4是歷史數(shù)據(jù)查詢界面的截圖,查詢的PV是HLS-II儲存環(huán)注入點的真空度,“Sample”下拉列表用于選擇查詢的特征值類型,“Draw Line Chart”按鈕用于顯示所選PV的歷史數(shù)據(jù)折線圖,“With Beam Current”開關用于選擇是否同時顯示儲存環(huán)的束流強度。用戶可以對折線圖進行放大和縮小操作,“Retch Data at Zoom”開關用于選擇是否根據(jù)新的時間范圍來重新獲取數(shù)據(jù)。圖4(a)顯示的是3 h內(nèi)真空度最大值的折線圖,時間粒度為1 min;圖4(b)顯示的是30 min內(nèi)真空度最大值的折線圖,此時的數(shù)據(jù)為原始數(shù)據(jù)。
圖4 儲存環(huán)注入點時間范圍為3 h(a)和30 min(b)的真空度最大值的折線圖Fig.4 Line chart of the maximum vacuum degree at the injection point of storage ring time range of 3 h(a)and 30 min(b)
本文描述了HLS-II數(shù)據(jù)存檔和檢索系統(tǒng)的設計和開發(fā)。系統(tǒng)是基于數(shù)據(jù)抽取算法和數(shù)據(jù)檢索邏輯來提高歷史數(shù)據(jù)的檢索速度。該系統(tǒng)自2019年9月份投入運行以來,性能穩(wěn)定。當用戶查詢?nèi)我鈺r間范圍的歷史數(shù)據(jù)時,系統(tǒng)都會根據(jù)請求的時間范圍檢索合適的時間粒度的數(shù)據(jù),以確保返回的數(shù)據(jù)量在4 000個數(shù)據(jù)點以內(nèi)并能保證特征值不丟失,這使得系統(tǒng)的響應時間都在1 s以內(nèi)。這種設計以較小的冗余存儲量為代價完全解決了查詢長期歷史數(shù)據(jù)速度慢的問題。目前HDARS僅支持PC客戶端查詢,下一步我們將增加HDARS移動端適配功能以方便用戶通過移動端查詢歷史數(shù)據(jù)。