基于开放平台的民航大型主机跟踪数据存储和查询
2022-10-23李巍伟王宗强通信作者梁红艳
李巍伟,何 宁,王宗强(通信作者),梁红艳,张 鑫,张 劲
(中国民航信息网络股份有限公司运行中心 北京 101318)
0 引言
中国民航信息网络股份有限公司(中航信)运营的民航商务信息系统使用的是基于36位字操作系统(OS2200)的大型主机应用系统USAS,在国外有多家航空公司使用,例如西班牙国家航空公司和斯堪的纳维亚航空公司。主机系统的跟踪数据存储的是与数据库恢复相关的重要信息,记录了主机数据库的每一次修改和用户的所有输入与输出。跟踪数据常用于查找故障原因、检索某个时刻符合某个条件的操作等信息,是中航信在提供民航系统IT服务过程中重要的信息源,不仅是保证数据库恢复完整性的核心数据,也是应用程序员调试系统BUG以及客户服务人员处理客户投诉的重要数据证据。
主机系统直接将跟踪数据写入磁盘上的跟踪数据文件。跟踪数据文件共有32个,每个文件都有限制写入的最大数据量。当一个文件写满后,会删除最早的文件后再新建一个文件继续写入数据,基本每天覆盖一轮。主机系统通过定时启动批处理作业流将跟踪数据从磁盘文件备份到磁带。中航信之前使用的主机跟踪数据工具是厂商专为中航信开发,其他使用USAS系统的用户所使用的产品也大多类似。由于大型主机设计的限制,跟踪数据只能保存在主机专用磁带库(包含虚拟磁带库)上,读取数据时必须在主机上执行。由于磁带数据的顺序性,无法编制任何索引,且磁带数据是以“块”为单位记录的,而“块”与实际时间没有必然的关系,因此跟踪数据磁带时,按时间跳转变成了读过所有的数据按块判断,往回倒退时有可能往回倒一秒钟的数据大概要花几分钟。由于保存同一时间点的磁带只有一盘,所以同时只能有一个人读该磁带,而磁带机的数量也限制了同时读取不同磁带的用户数量。主机跟踪数据工具只有有限的固定条件,只能提供简单条件的查询,对于更复杂的组合条件就无能为力。随着主机业务系统松耦合架构的实现[1],每个业务系统由四个主机分区构成,原本一盘磁带就可以解决的问题,在松耦合架构实施之后需要同时读四盘磁带才能实现,这就占用了更多的磁带机,磁带定位所花费的时间更长,人工要处理的情况更加复杂,耗费的CPU资源越来越高。
基于开放平台的大型主机跟踪数据存储和查询系统(OpenAudit)通过建立一套开放平台系统,在主机开发数据传输软件,读取跟踪数据磁带,发送到开放平台服务器。在开放平台服务器上开发数据接收软件,接收主机发送的跟踪数据,压缩后保存为数据文件。在开放平台服务器上开发数据查询软件,接收客户端的查询指令,读取跟踪数据文件,返回查询结果。在主机开发查询软件客户端,以便通过主机测试系统访问OpenAudit系统。该系统把主机磁带的顺序存储方式转变为开放平台的磁盘随机存储格式,再加上其他技术手段,可以大幅提高查找跟踪数据信息的效率,从而有力地降低了读取跟踪数据文件的时间成本,进而提高了故障诊断效率和客户满意度。
1 功能设计
OpenAudit系统主要目标是节省主机系统资源并提高跟踪数据查询能力和查询速度,总体设计图如图1所示,整体上分为五大部分:数据传输、存储、压缩、索引、查询。主机上开发语言为C语言,为提高执行效率,部分代码用汇编优化。开放平台上开发语言为Java,数据压缩部分会用到C++。
1.1 传输模块
该模块将主机跟踪数据无损传输到开放平台,主要难点是读取跟踪数据磁带的系统接口和分析跟踪数据磁带的数据格式,以及把主机36位字数据编码为8位网络传输字节。解决的关键技术包括:
1)通过调用系统底层接口IOW$功能读取跟踪数据磁带,并分析磁带的数据格式。采用读取跟踪数据磁带是因为读取跟踪数据文件只能在各自的业务系统进行且资源消耗是读取磁带的三倍,而读取磁带可以选取业务不繁忙的生产系统读取所有业务系统的磁带。此外,如果程序出现BUG导致最早的跟踪数据文件被占用之后,由于系统最多支持32个跟踪数据文件,将会导致无法创建新的跟踪数据文件,从而导致对外业务中断。
2)将主机使用的36位字数据编码为网络传输使用的8位字节。主机地址空间是以字为单位,而不是开放平台以字节为单位,所以主机读取一个字的某一部分效率低于读一个字,因此编码方式采用将每8个字的每9位的最高位合并成一个新的字,这样把每8个字编码为36字节,而不在主机进行字节操作。代价是当数据不足8个字时要补足8个字,所以传输时需要传输数据原始长度。因为跟踪数据磁带“块”平均都在几百个字以上,所以用8个字为边界多出的代价不大。
3)数据校验:为了保证数据传输准确,将传输的所有数据取移位校验和,并在传输结束时发到服务器,由服务器判定数据校验结果。
4)数据简单压缩:由于数据量很大,且存在相当大量的重复数据,直接传输会对主机通信模块以及网络产生压力,所以在主机端使用简单的行程编码技术RLE[2]进行初步压缩。该算法由汇编语言实现,以便降低CPU消耗。
5)通过TCP/IP网络将编码数据传输到开放平台。主机端采用厂商标准COMAPI接口通过CPCOMM通信模块传输,传输使用TCP/IP网络。为了避免对主机生产核心交换机的冲击,采用分配专用网卡,配以独立交换机连接开放平台服务器的方式。
1.2 存储模块
在开放平台存储跟踪数据原始数据并进行压缩存储。数据存储主要解决两个问题:海量存储的管理和数据文件格式。主要的难点是建立存储跟踪数据的文件格式、文件管理、压缩算法以及读取数据文件的接口。解决的关键技术包括:
1)压缩算法:使用高压缩比的开源压缩算法LZMA[3],通过设计压缩服务器分散计算量并支持未来的容量扩展。由于LZMA算法过慢,所以集群20个服务器使用分布式的压缩计算。在程序开发中,将开源LZMA库用JNI支持Java语言。虽然LZMA有Java Native版本,但为了提高速度,使用了JNI调用C++库。根据计算,相同数量的跟踪数据使用DEFLATE算法[4]压缩后的数据量是使用LZMA算法[5]压缩后的数据量的1.78倍,因此使用LZMA算法。但是LZMA算法的压缩速度远远小于DEFLATE算法。根据计算,使用LZMA算法顺序压缩一盘跟踪数据磁带所需的时间是180 min,而系统高峰期每45 min就生成一盘跟踪数据磁带,因此使用并行压缩才能满足工作的需要,这就需要较多的压缩服务器。通过对LZMA算法的测算,使用了20台计算机作为压缩服务器,使得一盘跟踪数据磁带的压缩时间降到30 min左右。
2)设计一个压缩服务器并包装压缩API接口使调用者可以方便使用集群压缩分散计算量,同时集群服务器个数支持动态调整。
3)设计分块压缩文件格式,解决压缩文件和随机读取的矛盾,建立分散存储大量文件的管理模式。数据文件以分段压缩的方式存储,文件名包含系统、起始时间、时间长度的信息。这样通过搜索文件名建立文件列表,可以很方便地找到所需文件。维护时将过期文件移到垃圾箱目录。若重复传输已有数据,将原文件移到垃圾箱目录。建立常驻的维护软件监控过期文件和过期垃圾箱文件以回收文件系统空间。
4)建立读取数据文件的接口。在开放端的数据传输服务器端负责接收从主机数据传输软件发来的数据,经过解码,解压缩还原后校验。所收到的数据写入特定的数据文件,保存在存储中。存储以卷为单位分配磁盘空间,并自动在各卷中查找适合的空间来存储新数据文件。
1.3 索引模块
倒排索引技术(invertedindex)广泛应用于全文检索等领域[6],在针对已知条件进行索引后,查询效率非常高。通过倒排索引技术,由原始数据编制索引,提高检索速度。索引的基本原理是以压缩块为基本单元,计算给定条件,包括时间与压缩块的对应关系,保存为索引文件。查询时可以通过索引文件计算查询条件,得出所需数据在哪个文件的哪个压缩块中。由于压缩块需要解压缩,所以以压缩块为基本单元索引效率比较高。代价是复杂条件计算时,可能索引精度不高。
由于分段压缩后,压缩块内的数据需要经过解压缩之后才可以读出,所以倒排索引只针对压缩块为单位进行编制。每个文件的每个压缩块为一个点,一般每个文件包含3 000~8 000个点,这样每个索引表包含排序存储的所有索引项的值和每个值对应的索引点编号表。由于每个索引表经常有50 000到更多值,如果不经处理,整个索引文件会非常大。最终方案是每个索引表中所有的索引点编号表采用差异数值数组和反相差异数值数组的综合存储方式,并进行合并。经过优化后,索引文件平均为15 M左右,与数据文件平均2 188 M相比索引文件只占数据文件大小的7‰。
1.4 查询模块
通过主机终端运行客户端软件驱动查询服务器提供查询功能,通过完全表达式化开发让用户能够便捷地读取跟踪数据。查询服务器接收用户查询命令,读取相应数据文件和索引文件,给出查询结果,并提供完善的日志服务。
查询软件在主机的客户端采用C语言开发,是基于行命令的交互式用户界面,支持异步中断功能以便打断长时间运行的查询指令,使用多线程使服务器端来的信息与用户输入可以同时发生。
查询条件的表达式化设计以KEY=VALUE列表的格式表示所有用户可能使用的条件。除倒排索引已编制的条件外,另外增加数据按字匹配、忽略大小写字符串匹配、正则表达式字符串匹配等,以实现自由表达任何条件。表达式互相可以用(), &,表达复杂的与或关系。
2 技术创新
通过在开放平台实现主机跟踪数据的存储和查询功能,使用相对低成本的开放平台磁盘存储主机跟踪数据,节约主机用于存储跟踪数据的磁带数量和对磁带库的需求以节约成本,在以下五个方面实现了技术创新。
2.1 用低成本存储降低主机生产成本
使用开放平台的中低端存储设备,降低了主机对磁带和磁带库的需求量,开放平台存储采用RAID技术[7]保证数据不会因为某一块磁盘损坏而丢失,提高了数据安全性。
2.2 移植主机应用
在开放平台移植主机应用,处理主机原始数据,有效降低了主机资源需求。采用编码的方法将36位字的主机原始数据完整地保存在8位字的开放平台上,并能够进行数据分析,从而保证处理结果与主机中处理的结果一致。
2.3 分布式压缩
分布式压缩可以将原本需要在一台机器处理的数据分散到其他机器上执行,并将结果组合起来,提高了服务器利用率,降低了应用部署复杂度。分布式压缩几乎可以支持无限扩展,且部署无须更改应用程序。
2.4 分段压缩存储模式
存储数据文件使用分段压缩方式,并设计了通用的分段压缩文件格式。配合倒排索引,很好地平衡了压缩与检索速度之间的矛盾,节约磁盘空间达90%以上。通过随机读取磁盘文件的方式快速定位,并通过索引辅助减少读取的数据量,以提高搜索速度。
2.5 基于表达式的搜索条件设置
将已知条件全部表达式化,而且支持对任何未知条件的表达,所有条件可以进行无限与或组合表达任意条件。实现的基于表达式的搜索条件可以让用户不依赖程序开发而描述预定义之外的条件,能够让用户不通过开发就表达任意组合的条件。
3 结语
OpenAudit系统所采用的存储和查询方式与基于主机跟踪数据工具相比,优势明显。由于采用倒排索引技术专门编制索引,所以查询速度比只通过读取原始数据判断的主机工具要快很多。当查询条件与索引条件相符合时,效率最高可以达到传统工具的几千倍,一天的数据可以几秒钟扫过。在索引效率最高时(这一天中没有指定条件的数据),该系统得到结果只需要10 s,在索引效率最低时(需要读所有数据),全天数据需要44 min。如果只查找用户输入输出数据,数据量只有全部跟踪数据的十分之一,所以效率更高10倍。而主机跟踪数据工具读取一天的数据大约需要9 h。
OpenAudit系统提供了更快的查询速度和更丰富的查询功能,不仅有效节省主机CPU消耗,而且在生产工作中对解决技术问题起到重要作用,为快速响应用户需求提供了强有力的武器,有效提升了中航信的服务质量。在该系统投入使用之前,主机系统读取跟踪数据工具平均每月330次访问,每次约50 min,投产之后平均每月完成1 205次访问,最高的月份达到8 712次。目前主机跟踪数据工作已经完全转移到该系统。