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