辛尚聪 孙晓康 李 川 宣 科 刘功发
(中国科学技术大学 国家同步辐射实验室 合肥 230029)
合肥光源是以真空紫外和软X射线为主的专用同步辐射光源。2010年初合肥光源进行了重大维修改造,改造后的合肥光源称为HLS-II(Hefei Light Source-II)[1]。HLS-II控制系统是基于实验物理和工业控制系统(Experimental Physics and Industrial Control System,EPICS)的分布式控制系统[2]。历史数据存档和检索系统是HLS-II控制系统的重要组成部分,负责存储HLS-II的运行状态数据,并提供检索功能以供用户进行性能分析和故障诊断[3-4]。随着HLS-II的运行,存储的历史数据量不断增加,当用户查询时间范围较大的历史数据时,直接进行原始数据检索会导致查询时间很长,用户体验较差。为了提高历史数据的查询速度,我们设计了数据抽取算法和数据检索逻辑。数据抽取算法按照不同的时间粒度对原始数据进行分段并抽取相应的特征数据,特征数据会存入数据库的冗余数据表中。数据检索逻辑将根据用户查询数据的时间范围来计算合适的时间粒度,并以此时间粒度从冗余数据表中检索数据,返回相应的特征数据。基于此设计,我们开发了基于HBase的数据存档和检索系统(HBasebase Data Archiving and Retrieving System,HDARS)。
HDARS的总体架构如图1所示,由Archiver Appliance、数据检索模块(Data Retrieval Module)和Web前端(Web Front-End)组成。Archiver Appliance是EPICS社区发布的最新数据存档工具,由SLAC、BNL和MSU联合开发,采用多级存储机制,同时具有高效的数据查询性能[5]。目前,Archiver Appliance已应用在合肥光源[6]、上海光源[7]、钍基熔盐堆(Thorium Molten Salt Reactor,TMSR)实验装置[8]、ESS(European Spallation Source ERIC)[9]等多个装置上。Archiver Appliance提供了数据采集、存储、迁移和检索的功能。我们将Archiver Appliance配置成两级存储:短期存储(Short term store)和长期存储(Long term store)。短期数据为最近1 h以内的数据,存储在内存(Ramdisk)中,超过1 h的数据为长期数据,存储在HBase中。Archiver Appliance具有多个模块:采集引擎模块(Engine)采集来自输入/输出控制器(Input/Output Controllers,IOCs)的过程变量(Process Variable,PV)数据并存入内存;数据检索模块(Retrieval)检索内存中的数据,以响应用户对短期数据的查询请求;数据迁移模块(Extract,Transform and Load,ETL)负责将数据从短期存储迁移到长期存储。我们修改了Archiver Appliance的ETL模块将数据从内存迁移至HBase。HBase是运行在Hadoop之上的一个开源的非关系型分布式数据库,具有高可靠性、高性能和易扩展性的特点[10-11]。目前,HBase已在日本质子加速器研究中心(Japan Proton Accelerator Research Complex,JPARC)的数据存档系统中得到了应用,用以解决关系数据库在大数据量时存在的性能不足问题[12-13]。此外,我们基于数据抽取算法开发了预处理模块(Preprocess Module)和后处理模块(Post-process Module),按不同的时间粒度对原始数据进行分段,并抽取相应特征数据。
图1HDARS的系统架构Fig.1 System architecture of the HDARS
数据检索模块作为HDARS的Web后端,采用Java Spring 框架[14]开发 ,通过 HTTP(HyperText Transfer Protocol)协 议 和 API(Application Programming Interface)接口分别与 Archiver Appliance和HBase通信来进行数据检索,同时数据检索模块为Web前端提供了RESTful接口。Web前端提供图形界面供用户查询历史数据。
HBase是一种列族式数据库,其数据存储单位是单元格。如图2所示,该单元格由行键(Row key)、列族(Column Family)名称 和 列限定符(Column Qualifier)名称指定[15]。在 HDARS 中,HBase部署在Hadoop平台之上,使用Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)提供底层存储支持。Hadoop硬件平台由8台DELL PowerEdge R740xd型号的服务器组成,每台服务器物理配置为:2.20 GHz Intel Xeon Gold 5120 CPU,192 GB内存,两块480 GB的固态硬盘,20块1.8 TB的机械硬盘。
图2 HBase中历史数据存储机制Fig.2 Storage mechanism of historical data in HBase
在HBase中,我们设计了两张表来存储历史数据:原始数据表(Raw Table)和冗余数据表(Redundant Table)。原始数据表有一个“Historical Data”列族,该列族下有一个“Sample value”列,每个单元格的容量为1 024字节,用于存储一个PV的多个时间连续采样点的数据。原始数据表的行键由PV Id和时间戳(Timestamp)组成,其中PV Id是根据PV名称随机生成的,行键时间戳是单元格中第一个采样点的时间戳。冗余数据表中的每个单元格存储的是特定的时间粒度下多个时间连续的特征数据,其行键是由PV Id、级别(level)、类型(type)和时间戳组成,级别是指时间粒度,类型是指特征值的类型。在HDARS中,我们设计了三种时间粒度(1 min、1 h和1 d)和4种特征值(某个时间粒度下的第一个值、最小值、最大值和平均值)。当Web前端可显示的数据量被配置为4 000时,1 min、1 h和1 d粒度能够显示时间范围为3 d、6 m和11 a的历史数据,这个时间范围可以完全满足HLS-II用户的查询需求。当Archiver Appliance的采样周期配置为1 s时,相较于原始数据量,会增加(4/60+4/3 600+4/86 400≈6.79%)的冗余数据量,存储空间的冗余量并不大。冗余数据表中存储的是经过数据抽取算法处理之后的数据,该算法以不同的时间粒度对原始数据进行分段,并提取每个时间段中的特征值。我们基于该算法开发了预处理模块和后处理模块。预处理模块以1 min的时间粒度对原始数据进行分段,并提取每个时间段中的特征值,同时预处理模块也实现了数据对齐的功能。预处理模块是实现了Archiver Appliance StoragePlugin接口(Java接口)的插件程序,已经集成在Archiver Appliance中。Archiver Appliance在批量迁移数据(接近1 h的数据量)的同时会预处理这些数据,预处理模块约以每秒112 500个采样事件(约2 MB∙s-1)的速度处理和写入数据到HBase,一个小时的短期数据耗时约20 s。后处理模块以较粗的时间粒度周期性地对冗余数据表中较细时间粒度的数据进行进一步处理。如果1 min粒度的数据存满1 h,则后处理模块将以1 h的时间粒度来分段并抽取相应特征数据,并将特征数据存入冗余数据表。同理,1 d粒度的数据是基于1 h粒度的数据获得的。
数据检索逻辑如图3所示。当用户查询历史数据时,数据检索模块将按查询时间范围来判断数据位置,数据位置有以下三种情况:第一种是数据全部在Archiver Appliance中;第二种是数据全部在HBase中;第三种是数据在Archiver Appliance和HBase各占一部分。对于第一种情况,数据检索模块将直接从Archiver Appliance中检索数据。对于第二种情况,数据检索模块将根据查询时间范围内的数据量来选择是从原始数据表或冗余数据表中检索数据。在检索冗余数据表之前,检索模块将按照时间粒度从细到粗的顺序来计算查询时间范围内的数据量,直到某个粒度下的数据量小于4 000,检索模块将以此时间粒度检索数据。对于第三种情况,时间粒度的选择逻辑与第二种情况相同,数据检索模块将以同一时间粒度从Archiver Appliance和HBase检索数据,然后组合数据返回至Web前端。
图3HDARS数据检索流程图Fig.3 Flowchart of HDARS data retrieval
HDARS的Web前端是基于Bootstrap开发的,为用户提供了HLS-II历史数据查询界面。Bootstrap是目前最流行的Web前端开发框架[16]。图4是历史数据查询界面的截图,查询的PV是HLS-II储存环注入点的真空度,“Sample”下拉列表用于选择查询的特征值类型,“Draw Line Chart”按钮用于显示所选PV的历史数据折线图,“With Beam Current”开关用于选择是否同时显示储存环的束流强度。用户可以对折线图进行放大和缩小操作,“Retch Data at Zoom”开关用于选择是否根据新的时间范围来重新获取数据。图4(a)显示的是3 h内真空度最大值的折线图,时间粒度为1 min;图4(b)显示的是30 min内真空度最大值的折线图,此时的数据为原始数据。
图4 储存环注入点时间范围为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数据存档和检索系统的设计和开发。系统是基于数据抽取算法和数据检索逻辑来提高历史数据的检索速度。该系统自2019年9月份投入运行以来,性能稳定。当用户查询任意时间范围的历史数据时,系统都会根据请求的时间范围检索合适的时间粒度的数据,以确保返回的数据量在4 000个数据点以内并能保证特征值不丢失,这使得系统的响应时间都在1 s以内。这种设计以较小的冗余存储量为代价完全解决了查询长期历史数据速度慢的问题。目前HDARS仅支持PC客户端查询,下一步我们将增加HDARS移动端适配功能以方便用户通过移动端查询历史数据。