民航信息领域传统大型主机操作系统的技术创新
——以中国航信为例
2022-10-23王宗强
王宗强,何 宁,王 强,张 劲
(中国民航信息网络股份有限公司运行中心 北京 101318)
0 引言
以USAS应用系统为基础的传统大型主机是中国民航信息网络股份有限公司(中国航信)运营的民航商务信息系统的核心组成部分,其数据库系统为TIP,主要应用程序类型为HVTIP(用来储存应用程序的特殊类型数据库)。该系统广泛应用于斯堪的纳维亚航空公司和西班牙国家航空公司等多家航空公司中。
对于中国航信而言,使广大用户满意是一个非常严峻的任务[1],而保障大型主机系统的平稳运行则成为保障企业顺利发展的一个不可缺少的基石,也是提高客户忠诚度的必要手段。因此,如何更有效、更合理地保障大型主机系统的正常运行,提高系统运行平稳度,便成为亟须考虑的问题[2]。
随着国内航空公司在国内外市场的高速增长,传统的每月一次停止对用户开放后集中更新应用程序(称之为“停机”)的工作,虽然是在北京时间凌晨执行,并且每次仅持续60 min,但是这时候欧洲是下午四点,而美国则是中午时间,这使得使用中国航信机场旅客离港系统的国内航空公司在这段时间必须改用手工处理模式。为了提高客户满意度,通过对操作系统应用逻辑的修改,利用应用程序数据库主备快速切换技术使机场旅客离港系统每次例行维护时间从60 min缩减为20 min。
民航旅客量连续多年保持两位数增幅[3]。由于旅客需求的增加,导致大型主机指令量的增幅远高于旅客量的增幅。USAS主机厂商设计能力不能满足指令量高速增长的需求,因此通过分析操作系统代码找到可以优化的环节,使用EXTENDED MODE模式读取大型主机内存数据库文件,有效降低了系统的资源消耗。
1 应用程序数据库主备快速切换
1.1 背景
USAS应用系统中的HVTIP应用程序储存在名为LIBRARY的一系列数据库文件中,LIBRARY创建在磁盘上,并映射到内存中。每个业务系统有9个LIBRARY,称之为LIBRARY NUMBER,每个应用程序在LIBRARY中对应一个LIBRARY BANK。使用该功能的指令从内存中读取该LIBRARY BANK对应的内存空间。例如,某个应用程序的LIBRARY BANK为(2,20),表示该程序是LIBRARY2的第20个BANK(应用程序)。修改应用程序时,使用COPY命令把该程序拷贝到对应的LIBRARY BANK中,并由操作系统实时同步到内存。但是,这种拷贝必须在没有用户使用该程序时才能拷贝成功。
如果应用程序修改较少且不影响应用核心程序,则应用程序经过编译、检测后便直接拷贝到LIBRARY中。但是如果需要修改应用核心程序,或者应用程序修改量较大、不同应用程序之间存在调用关系,就需要在停机(停机的定义是停止对用户开放,而不是停止硬件的运行)后将编译、检测过的应用程序拷贝到LIBRARY中。此方式的特点是把应用程序中的各种修改统一编译,重新生成新的应用程序,经检测无误后批量拷贝到LIBRARY中替换旧应用程序。整个过程正常结束后,再允许用户访问系统。停机拷贝方式导致系统计划停机时间长,正常情况为60 min。同时,大批量修改的程序被投产后,一旦发生问题,很难及时判断出错位置,从而延长了故障时间。由于停机时间较长,外部用户对此存在或多或少的意见;同时没有应用程序备份机制,一旦投产的程序发生故障,就必须将原来的应用程序重新拷到LIBRARY中,无法保证生产系统的快速恢复。
为了减少停机时间,并备份现有LIBRARY,提出了应用程序数据库主备快速切换(SWITCH LIBRARY)的技术解决方案。
1.2 技术方案
USAS系统中HVTIP应用程序通过CALL或TRANSFER方式互相调用,这两种方式的执行都是由底层程序SFXLNK来完成。为此,在磁盘上创建数据库表LF(LIBRARY FLAG)并映射到内存中,编写了读取和修改内存数据库表LF内容的系统程序。此程序读取LF数据时,从内存直接读取,修改数据则是在停机时修改磁盘数据库表并实时同步到内存中。SFXLNK在调用指定的应用程序之前必须从内存数据库表LF中判断所调用的程序相对应的LIBRARY是否被替换。LF表第1个word(36-bit word)为最近更新时间,第2个word为实施最近更新的用户,从第4个word开始,每个word对应一个LIBRARY,第4个word对应LIBRARY1,第5个word对应LIBRARY2,依此类推。如果该LIBRARY对应的数值为0,则使用原来的LIBRARY NUMBER,如果不为0,则SFXLNK把原始LIBRARY NUMBER修改为该数值。以LIBRARY 2 BANK 20为例,执行过程如图1所示。
根据上述修改,需要对系统中的LIBRARY做统一规划。每个业务系统建立两套LIBRARY,一套为投产LIBRARY,另一套为备份LIBRARY。两套LIBRARY包含的程序框架一致。以航班控制系统为例,LIBRARY1为测试用LIBRARY,其余LIBRARY的程序被整合到LIBRARY2至LIBRARY5,并复制到LIBRARY6至LIBRARY9。然后编写并修改USAS程序,自动生成应用程序投产程序和回滚程序,同时生成拷贝程序,负责把要投产的应用程序在停机之前全部拷贝到备份LIBRARY中。这样,原来需要在停机之后做的拷贝工作被移到停机之前做。例如当目前投产LIBRARY为LIBRARY2至LIBRARY5时,就把待投产的应用程序拷贝到备份LIBRARY(LIBRARY6至LIBRARY9)中。在对用户停止业务开放后,执行应用程序投产程序,通过修改数据库表LF完成投产LIBRARY切换到备份LIBRARY的工作。这时LIBRARY6至LIBRARY9变成了投产LIBRARY,而LIBRARY2至LIBRARY5转变成了备份LIBRARY。当新应用程序投产后,如果出现重大应用程序问题,则立即启动回滚程序,将应用环境恢复到投产之前的情况。这时,也只需要很短的时间完成修改数据库表LF的工作。
对于内部应用人员除了程序修复之外,不会感觉到系统应用环境的变化,无须考虑目前使用的是哪套LIBRARY。
1.3 成效
正常情况下,HVTIP应用程序的切换需要2 mins。但是由于应用程序更新还包含非HVTIP应用程序的更新,再加上前置的执行停机操作以及完成后恢复对用户开放的操作时间,机场旅客离港系统的停机时间从原来的60 mins下降为20 min。
2 用EXTENDED MODE模式读取主机内存数据库文件
2.1 背景
TCDBF数据库文件是一种特殊的数据库文件,它被映射在内存中,适用于读多写少的数据库文件。在对TCDBF数据库文件进行读操作时,访问的是内存中的镜像;进行写操作时,先写入磁盘然后实时同步到内存。该类数据库文件最大为262 143个words,现有的基于BASIC MODE编程模式的USAS程序只能读取不超过131 071个words的内存数据库文件。应用系统调用标准函数FC$SSN(系统标准调用,针对所有数据库文件)读取TCDBF的方式消耗较多的资源,这是因为FC$SSN针对的是所有类型的数据库文件,很多程序逻辑对于读取TCDBF是多余的。如果能够直接访问内存读取相关数据,则能节省大量的系统资源,因此需要开发专用程序替代FC$SSN以便降低这部分资源消耗。厂商给出的解决方案是将整个USAS升级为EXTENDED MODE。这个方案需要对USAS底层做很大改动,存在一定风险性,且在短时间内无法完成。经过进一步研究,提出了开发一个专用的EXTENDED MODE程序,由USAS调用该程序实现读取TCDBF数据库的功能。厂商及其他使用USAS主机的用户并没有做过类似的工作,此设计在全世界属于首创。
2.2 设计
USAS底层程序PRMXDF负责完成所有数据库文件的访问。修改程序执行逻辑(图2)后,在调用FC$SSN之前先判断是否为对数据库的读操作,如果不是读操作则继续原有的逻辑;如果是读操作则调用EXTENDED MODE程序。EXTENDED MODE程序结束后返回PRMXDF程序。PRMXDF程序判断返回的状态字,状态字为真,说明完成了TCDBF的读操作,可以跳过FC$SSN;状态字为假,说明数据库文件不是TCDBF或者提供的参数有误,继续调用FC$SSN。EXTENDED MODE程序设计基于下列原理:
(1)EXTENDED MODE程序放在COMMON BANK(USAS主机系统存放程序和数据的内存空间)中,原因是USAS本身是BASIC MODE,只能访问COMMON BANK中的EXTENDED MODE程序。
(2)EXTENDED MODE程序代码部分和配置部分放在不同文件中,联编后放在同一个COMMON BANK中,这样便于维护,既能分别修改又能保证二者同时上线。
(3)EXTENDED MODE程序使用TVA指令判断TCDBF数据库内存镜像是否存在。这是因为对TCDBF维护时需要将TCDBF转换成普通数据库文件,但这时仍然可以对用户开放。如果不存在,则返回状态字“假”;如果存在,则把本次需要访问的TCDBF数据库内存镜像的地址储存到X10寄存器,然后EXTENDED MODE程序从X10寄存器获取地址,读取数据后存储到B10寄存器返回USAS底层程序PRMXDF。
2.3 成效
用EXTENDED MODE模式读取主机内存数据库文件技术有效降低了USAS主机系统对TCDBF数据库的I/O。根据FC$SSN调用量统计,4月22日晚间投产后TIP数据库文件访问量大幅度下降(图3)。根据计算,主机应用程序读取TCDBF数据库的I/O量降低了80%,每个应用指令所有的资源消耗平均从198万机器指令下降为184.5万机器指令(Machine Instructions,是CPU能直接识别并执行的指令,它的表现形式是二进制编码),下降比例为7%。由于大型主机按照机器指令数量收费,因此每年可以节约数百万元人民币的支出。
该技术的创新在于充分考虑到与现有USAS应用环境的整合,通过集成创新将EXTENDED MODE模式编程技术整合于传统USAS应用环境中。在没有对USAS底层进行大量修改的情况下,实现了BASIC MODE应用程序直接访问EXTENDED MODE程序,扩展了应用程序访问内存空间大小(从13 1071个words扩展到12*262 143个words)。同时充分考虑到了对内部应用人员和外部用户的透明度,对终端用户的使用没有任何影响,不影响研发人员研发新项目,不需要任何应用代码修改。
该技术在USAS大型主机领域属于首创。它的投产不仅提高了大型主机性能,而且实现了没有对USAS底层进行大量修改的情况下直接调用EXTENDED MODE程序的方法,为大型主机系统中的类似应用提供了一个非常好的应用实例。
3 结语
通过质疑操作系统代码的效率并进行优化,提高了中国航信大型主机系统的运行效率。正是在这种创新精神的引导下,USAS大型主机领域开展了多项技术创新,成为最早实现六台主机分区松耦合架构的USAS主机系统[4]。在此基础上,进一步自主研发实现了通过Linux服务器跨平台读取主机数据库数据、调度主机作业流[5]以及实时监控主机性能等多项创新,有效提高了运行维护水平,并创造了良好的经济效益。