中国科技纵横 中国科技纵横杂志社官方网站
热点文章
当前位置:首页 > 优秀文章

航空新分销报文聚合方法研究与应用

孙东明 谢佳 刘凯 杨超
(中国民航信息网络股份有限公司,北京 101318)

2024-04-07 09:52:00    来源:优秀文章

摘要:全球航空业正在经历着以航空新分销能力建设为代表的技术变革,不同航空公司不同版本的NDC报文的聚合能力直接关系该变革是否能够得以实施。本文提出一种通过自定义模板、报文拆分、报文分布转换并组合的方式,实现面向NDC标准的大型XML报文的高效解析与聚合。实验结果表明,在针对航空公司航班查询典型场景的NDC报文响应中,提出的方法性能优于基于传统XSLT的解析转换方法,取得了很好的使用效果。

关键词:航空新分销;NDC标准;航空公司;消息聚合;XML转换

中图分类号:C94   文献标识码:B   文章编号:1671-2064(2023)21-0164-05


0引言

NDC(New Distribution Capability,新分销能力)是近年来国际航空运输协会(以下简称:国际航协)力推的新分销标准,它打破了以往航空公司与合作伙伴间主要通过EDIFACT报文进行消息传输的方式,采用了一种基于XML的全新数据传输标准来加强信息交互能力。航空公司可借助NDC向合作伙伴提供丰富的信息、个性化的产品、完善的服务功能,进而为旅客创造价值,实现航空新零售转型。目前,众多行业相关方参与到NDC建设中,国际航协也在加速推进NDC的发展。

随着NDC的发展,在NDC生态环境中,产生了NDC聚合商(Aggregator)这一重要角色。在没有该角色之前,航空公司需要采用N对N的方式与下游分销商(如代理人、在线旅游分销商OTA、差旅服务商TMC、元搜索引擎等)建立基于NDC标准的销售渠道,极大浪费了双方的沟通和开发成本。针对这一问题,聚合商角色提供一个符合NDC标准的、基于开放系统的聚合及分销平台,将多家航空公司NDC内容进行聚合后,以统一形式分发给下游,为下游提供完整的销售闭环,形成了N:1:N的连接模式,极大降低了航空公司和分销商的沟通与开发成本,如图1所示。NDC聚合商的存在对推动航空新零售的转型和发展具有重要意义。

作为新零售链路上消息的传递者,NDC聚合商的航空公司接入能力和报文转换性能是其建设水平的重要考核指标,如何将多航空公司不同版本的报文、不同业务流程以统一形式高效地提供给下游,一直是困扰NDC聚合商的主要问题。本文就NDC聚合器的报文转换技术进行研究,结合实际应用,提出一种面向NDC的XML报文解析转换方法,助力于构建高性能的NDC聚合平台。

1航空公司NDC消息聚合难点

1.1国际航协NDC版本多且不断升级

国际航协发布的NDC标准一直随着使用者反馈不断升级和调整,之前以每年4个版本向前推进,近几年逐步缩减到一年发布两个版本。升级调整主要包括两方面:一是调整版本中接口的数量。早期由于既要向新零售转型,又要兼顾原有传统销售的方式,为了保障航空公司从查询、预订、支付、出票到退改全销售流程操作,发布的接口数量较多,以2016年版本为例,接口数量超过50个。而后通过逐步调整与功能合并,到18.2版本时接口数量锐减到40个。随着对新零售认识逐渐清晰,又增强了订单、支付相关功能,到21.3版本时,接口数量基本稳定在50个上下。二是不同版本中同样名称的接口,也会存在结构调整情况,例如将A节点整体从父节点B挪到父节点C上。所以对于聚合商来说,如果要向下游使用者输出统一的标准接口,每接入一个NDC版本,就要对该版本中的接口向输出的标准接口进行转换,随着聚合商接入版本增多,对转换的效率与复杂度要求就越高。

1.2航空公司使用NDC版本不一致

如果航空公司A和航空公司B都将同样的NDC版本提供给聚合商,也并不意味着聚合的工作量减半。即使同一个版本,各航空公司在使用上仍旧存在差异。首先,根据国际航协NDC标准,接口中可以存在自定义节点,可根据各航空公司业务情况灵活掌握。其次,接口只能做到相对结构化,而标准节点中放入的内容不能绝对结构化,这样就会导致不同航空公司在同一个标准节点内放入的内容易读性存在很大区别。对于聚合商来说,在进行消息处理时,既需要了解航空公司自定义节点内容,也需要对结构化数据中非结构化内容进行标准化处理。

1.3航空公司接入越多聚合难度越大

除了NDC版本多、不同航空公司使用同一版本但用法不一的情况外,聚合难度还体现接入航空公司数量上。目前,获得国际航协NDC认证的航空公司近70家,设想如果一个旅客通过聚合商向70家航空公司发起查询请求,聚合商需要将所有航空公司的返回结果在最短的时间内进行解析再聚合返回给旅客,对于系统的业务逻辑处理能力和处理速度都将是极大挑战。如何将响应时间控制在用户可接受范围,也是考察聚合商能力的重要指标。

 

图1 聚合商在NDC环境中的位置


2 NDC消息转换理论基础及现状分析

NDC旨在通过定义一种基于XML的数据传输标准,以增强航空公司和分销商之间的通信能力。因此,在NDC的应用及聚合器的构建过程中,XML文件的解析和转换是实现数据交互和数据处理的关键步骤。XML解析是指将XML转换为可操作的数据结构或对象模型,以便进一步处理和操作;XML转换是指将XML从一种形式转换为另一种形式,如将XML转换为HTML、JSON、数据库记录或另一格式的XML等。XML解析及转换工作已有多种成熟的技术,介于XML在信息处理系统中的使用的广泛性,不同的XML解析及转换技术也在不同场景中被广泛使用。王海凤提出了一种使用DOM技术实现关系数据库到XPDL转换的方法[1];李效东[2]及田斌[3]分别提出了基于DOM及基于SAX的网页信息提取方法,可以用来从目标网页中抽取关键信息用于后续存储或使用;范书义提出了一种结合使用SAX和DOM的大型XML文档处理方法,其中采用SAX对XML文档进行读取并转化为DOM对象,然后使用SAX对XML内容进行解析,极大地改善了应用程序的性能[4];任鑫基于StAX实现了一种针对面向对象语言的XML解析库,并构造了Java环境中的XML解析器,取得了较高的XML解析效率[5];周颖基于JDOM实现了一种针对异构数据库的数据提取方法,可以将异构数据库中的信息转换为XML文档进行输出[6];周强基于DOM4J实现了一种XML页面与XHTML页面互相转换的方法,实现了浏览器兼容[7];陈俊林基于XSLT实现了PDF论文元数据的优化提取,以便于对文献进行归类[8]。而随着数字化进程的发展,在各种应用场景中需要处理的XML信息越来越复杂,更多的学者在各自的领域针对传统的XML解析及转换技术提出了改进,提出了不同的XML解析及转换方法。F. Breitling提出了一种基于语义分析的XSLT转换方式,在处理天文学数据的场景中,能高效地将XML文件转换为RDF文件[9]。Ren´e Haberland设计并实现了Prolog转换语言,它由XML读写操作、转换运算符和预定义的遍历顺序组成,相比XSLT能够更加简洁地实现XML文件之间的转换[10]。Igor L. Bratchikov等人提出了一个合适的XML文档模型,定义了Prolog LTL的基本转换语言,并展示了与XSLT相比的表达能力[11]

相比已有的应用场景,NDC环境下的XML解析具有自身的特点:一是待处理的报文普遍较大,AirShopping(查询接口)的报文通常含有大量的航班数据定义及报价信息,其报文通常以KB或MB为单位。二是待处理的报文从语义角度松散耦合,报文中的航班数据定义、报价信息、其他自定义信息等分属于各自的根节点,信息之间如需关联,通过节点的ID值进行引用。三是报文转换难以一步到位,即在报文格式转换操作后,不能立刻得到结果报文,而是需要在转换后的报文初版基础上,依据业务逻辑对部分的节点及节点的数据进行增加、删除、修改等操作后,方可得到可以向用户输出的报文终版。四是需要转换的报文版本多,存在多种不同格式的源XML需要转换至同一种格式的目标XML。一方面聚合商作为NDC环境下报文处理链路中的核心环节,对于报文的处理具备上述所有特点;另一方面,聚合商作为WEB系统,也需要满足WEB系统在处理性能方面的要求(从用户体验角度,通常认为系统响应时间在4秒以内,大部分用户可以接受,超过10秒则90%以上的用户选择离开)。而从处理流程角度,聚合商在处理具体用户的请求时,首先需要从用户的请求的目标航空公司处分别获取航空公司的响应后,再针对得到的航空公司响应XML报文进行转换及聚合,在整个流程中存在航空公司处理响应耗时、网络传输耗时、聚合商内部XML报文转换及聚合耗时3个主要的耗时环节,其中航空公司处理响应耗时和网络传输耗时不可控,因此如何缩减内部XML报文转换耗时,高效处理大量复杂大报文的转换和聚合是聚合商面对的技术难题。

3基于NDC标准的XML报文聚合方法

在面向NDC的XML报文转换场景中,既需要同时对大量并发大报文进行快速处理,又需要灵活定义转换规则,以满足不同版本报文的转换,还需要对报文进行高效的字段级读写以满足数据填补的需求。通过对当前市面上存在的XML解析及转换技术的分析可知,针对需要完全表示、随机处理XML小型文档的场景,适用DOM解析、JDOM解析或DOM4J解析;针对需要处理大型XML或对性能较高的场景,适用SAX解析、StAX解析或DOM4J解析;针对需要灵活定义转换规则和操作的场景,适用XSLT转换。其中,XSLT转换能够大致完成NDC场景下XML报文转换的功能需求,但是在大流量下性能有限,直接应用不能满足系统真实生产的性能要求。因此,针对没有单独的一种XML解析及转换技术能够直接满足NDC场景下的XML报文转换需求这一问题,提出了一种面向NDC的XML报文转换方法。

3.1方法组成

面向NDC的XML报文转换方法逻辑上由航空公司输入、输出组件、报文分片组件、模板转换组件、报文聚合组件等构成,其中模板转换组件内部又由分片解析策略组件、模板加载组件、模板翻译组件组成。相关组件的构成图如图2所示。

 

图2 面向NDC的XML报文转换方法的组件构成

航空公司输入、输出组件主要从网络层面承担了系统与外部交互的工作,报文聚合组件用于将处理过的报文片段接合到一起,这几个组件在报文转换方法中的功能相对简单,在此不做赘述,下文就方法中核心组件进行进一步详述。

3.1.1报文分片组件

报文分片组件的作用是针对不同航空公司的不同接口选取不同的分片策略并执行分片。报文分片组件会分析不同接口的返回报文,将大报文拆分成多个小的片段,每个小的片段将被分发到不同的线程中解析,一般情况下节点相似的报文会被分发到一起。

3.1.2分片解析策略组件

分片解析策略组件用于判定最优的解析策略,通过对用户调用的航空公司、接口、NDC版本号、报文大小,计算出一个权重值,并根据权重值判断报文应采用的解析策略。当前可选的分片解析组件有3种。

(1)当前线程解析组件。针对节点较少的小报文,采用单线程的方式解析,防止线程上下文频繁切换以节省系统的开销。

(2)大任务分片解析策略。针对较大的报文,原报文会被拆分为多个较小的报文进行处理,针对每个小报文的处理会生成一个小任务,多个小任务一组并发执行,以提升大报文的解析速度。

(3)并行流式解析策略。在报文数据量较大的情况下,可以针对整个报文通过并行流的方式开启多个线程来同时执行处理,每个线程执行一个片段的报文解析。

3.1.3模板加载组件与模板翻译组件

考虑到基于NDC的XML报文转换的复杂性,在转换的核心组件,优先选择XSLT解析,应用其转换规则灵活及自定义输出模板的特点满足功能需求。其次,针对XSLT解析在处理大型XML文档时性能较低的问题,一方面,采用业界成熟的XSLT转换工具,例如Saxon;另一方面,在XSLT工具上进行自定义转换函数的定制来实现针对个别节点及节点值的增加、删除、修改等操作,以达到提升整体转换效率的效果。模板加载组件针对不同航空公司的不同接口,加载相应的报文转换模板,模板翻译组件会基于加载的模板及相关的自定义函数,实现XML报文的翻译。

3.2实现原理

3.2.1系统初始化流程

面向NDC的XML报文转换方法的系统初始化流程如下。

(1)初始化模板加载组件和模板翻译组件。系统中每个航空公司的配置都定义为一个模板翻译组件,系统会在启动的时候加载各个航空公司的配置,把不同航空公司、不同版本的模板翻译组件进行装载。例如,将某航空公司NDC172版本的模板翻译组件装载到系统输出的NDC182组件中,从而获取172版本到182版本双向转换所需要的配置信息。同时系统加载每个航空公司的各个接口对应的XSLT模板。

(2)初始化报文分片组件。系统启动时加载报文分片组件,报文分片组件会接入航空公司组件对较大的报文实施分片,把一个大的报文拆分成包含多个节点的小报文。

(3)初始化分片解析策略组件。系统启动时,会根据初始化好的航空公司组件生成对应的分片解析策略组件,每个航空公司的分片解析策略组件不尽相同。分片解析策略组件的生成主要依赖报文的航空公司、接口、NDC版本号、报文大小,系统首先会根据这些条件生成默认的权重值。例如,AirShopping接口默认的权重值为5,OfficePrice接口权重值为3等;报文>5M时默认的权重值为50,2M≤报文<5M默认的权重值为20,报文<2M时默认的权重值为5等。当接收到一个报文时,系统会计算出一个总的权重值。当值20时执行当前线程解析策略,20<值100时执行并行流式解析策略,值大>100时执行大任务分片解析策略。

(4)初始化报文聚合组件。报文聚合组件会将待输出的报文片段整合成一个完整的报文对外输出。

(5)完成模板转换组件组装。当初始化完以上组件,系统就会自动收集这些组件为每个航空公司的模板转换组件。用户在调用接口时,系统会判断使用哪个模板转换组件来转换报文。

4.2.2系统运行案例

为了说明方案的运行流程,下文以基于美国航空(简称AA)的AirShopping接口的转换过程为例进行说明。系统运行时的整体流程如图3所示。

 

图3 系统运行时的整体流程

(1)获取模板转换组件

系统获取用户请求的XML报文,根据<MessageDoc> <Name>AA</Name></MessageDoc>节点、HTTP请求头里面的agg-ndc-method参数、agg-ndc-version参数判断属于AA航空公司182版本的AirShopping接口,然后从系统内存中获取对应的模板转换组件,判断该组件是否“存活”,若“存活”则取出对应的转换模板待用,如果该组件“死亡”则直接返回用户接口异常。

(2)计算报文分片

在得到航空公司输入报文后,报文分片组件会将XML报文分成多个小的片段。这里AA航空公司的AirShopping报文会被拆分成DataList、OffersGroup、AugmentationPoint、Utils 4个片段,然后系统会启动4个线程去并行解析这4个小的片段。

(3)获取分片解析策略

根据AA航空公司组件可以拿到其分片解析策略,该分片解析策略组件会自动计算出AirShopping接口报文解析的一个权重值:AA航空公司的182版本AirShopping接口配置的接口权重为5;DataList、OffersGroup片段报文>5M得到50的权重,AugmentationPoint片段报文<2M得到5的权重,2M<Utils片段报文<5M得到20的权重;DataList、OffersGroup片段报文的节点数在5000以上得到45的权重,AugmentationPoint片段报文的节点数在10以下又得到2的权重,Utils片段报文的节点数在100以上1000以下得到20的权重。然后判断该XML是OWD模式又得到5的权重。最后通过计算得到DataList、OffersGroup片段的权重在105,根据分片解析策略判断该片段报文应采用大任务分片解析策略;AugmentationPoint片段的权重在17,根据分片解析策略判断该片段报文应采用当前线程解析策略;Utils片段的权重在50,根据分片解析策略判断该片段报文应采用并行流式解析策略。

(4)解析转换报文

第一步执行模板翻译,模板翻译组件会使用预定义的模板将每个片段整体转换为目标格式的XML片段框架。第二步执行自定义函数,DataList、OffersGroup片段采用大任务分片解析策略时,系统会计算需要执行的自定义函数数量,将自定义函数拆分成20个一组,每组函数启动4个线程去并发执行解析转换,每组函数执行完成之后就会把结果放入系统缓存中,然后继续执行下一组函数;AugmentationPoint片段采用当前线程策略,系统会启动一个线程去执行解析转换,解析结果同样放入系统缓存中;Utils片段采用并行流式解析策略,系统会把需要执行的函数全部放入一个队列中,然后启动5个线程,每个线程从队列中获取一个自定义函数并发执行解析,解析结果同样放入系统缓存中。

(5)返回统一版本的NDC报文

最后报文聚合组件从缓存中获取报文的所有转换结果片段,整合成一个符合NDC182版本的报文并对用户输出。

 

4 本文提出的XML解析转换方法与Xalan的对比

4效果与结果数据分析

为了比对本文提出的方法与其他方法的差异,选择了一种成熟的XSLT解析技术Xalan作为对照。选择一家典型的支持NDC的航空公司——大洋洲航空(QF),对真实机票销售中的16种场景的查询接口的报文,分别采用Xalan与本文提出的面向NDC的XML报文转换方法进行解析与转换,并比对两者的转换时间,结果如图4所示。

图4横坐标为测试的具体场景,主坐标(左)含义为被转换的报文大小(KB),副坐标(右)为方法转换耗时(ms),为了便于观察,将不同场景的报文平均大小从小到大进行了排序。从图4可以看出,报文转换耗时与报文大小基本呈正比,在绝大多数场景中,本文提出的转换方式所需的转换时间远远小于Xalan方式,在测试的16个场景中,转换时间平均降低了40.4%。只有在单程单成人这种最简单的场景中,本文提出的转换方式耗时比Xalan方式增加了56%,这是由于在处理最简单报文的场景中,马上执行转换的效率比对报文进行一系列分析、拆分、方案选择后再进行拆分要高。注意到在场景11之前,当报文大小不超过1MB时,本文提出的转换方法与Xalan方法相差不大,转换时间平均降低30.9%;而当报文大小超过1MB时,本文方法与Xalan方法明显拉开差距,转换时间平均降低61.3%;当报文大小超过2MB时,Xalan方法的处理时间明显有所发散,从场景15到场景16,虽然报文大小只增长了29.1%,但是处理时间增长了159.9%,而本文方法处理时间增长了80.1%,可见本文方法收敛性更强,针对大报文具有更好的性能。

5结语

新零售是航空公司销售和分销的最新发展趋势,也是近年来最大的行业颠覆之一,它使得航空公司能够以全新方式为消费者提供全新产品,而国际航协NDC标准是航空公司新零售转型的重要载体。作为聚合商,提升NDC消息聚合处理能力,可以有效减少上下游沟通和开发成本,对推动航空新零售的发展起到积极意义。为了提升NDC聚合器针对XML报文的聚合效率,本文提出了一种面向NDC的XML报文转换方法。不同于传统技术的XML报文转换方式,本文方法从构建模板转换组件入手,通过对大报文进行分片,对分片报文采用不同的方式进行解析转换,将转换后的报文片段进行整合输出的方式,大大提升了对于NDC环境下XML报文进行解析转换的效率,进而提高了NDC对多航空公司报文的聚合能力。

此外,本文提出的XML解析转换方法不局限于民航领域,也可以适用于其他任何需要对大规模XML报文解析及转换的场景,具有较高的现实指导意义。



参考文献

[1] 王海凤,萨智海.DOM技术在数据转换中的应用[J].内蒙古工业大学学报(自然科学版),2008,27(4):270-274.

[2] 李效东,顾毓清.基于DOM的Web信息提取[J].计算机学报, 2002,25(5):8.

[3] 田斌,孙霞.基于SAX的XML文档解析和存储技术应用[J].微机发展,2005,15(3):4.

[4] 范书义,李岩,孟晨.XML文件解析中SAX和DOM的结合应用[J].微型电脑应用, 2011(12):42-44.

[5] 任鑫,曹冬磊,金蓓弘.支持StAX的高效XML解析器的设计与实现[J].计算机科学,2006,33(6):5.

[6] 周颖,王义发.用JDOM和XML实现异构数据库的数据提取[J].计算机技术与发展, 2006, 16(11):4.

[7] 周强,李宇,许雁冬.基于dom4j转换XML为XHTML页面的方法[J].计算机技术与发展,2010,20(1):43-45,49.

[8] 陈俊林,张文德.基于XSLT的PDF论文元数据的优化抽取[J].现代图书情报技术,2007,(2):18-23.

[9] Breitling F.A standard transformation from XML to RDF via XSLT[J].Astronomische Nachrichten,2010,330(7):755-760.

[10] Haberland,René,Bratchikov I L.Transformation of XML-documents with Prolog[J].2019.

[11] Haberland,René.Using Prolog for Transforming XML-Documents[J].2019.



Research and Application on Message Aggregation Method of Airline New Distribution

SUN Dongming,XIE Jia,LIU Kai,YANG Chao

(Travelsky Technology Limited, Beijing  101318)

Abstract:The global aviation industry is undergoing technological changes represented by the development of a new distribution capability (NDC), and the ability to aggregate different versions of NDC messages directly relates to the success of this transformation. This paper proposes a method that involves custom templates, message splitting, distribution transformation, and aggregation to efficiently parse and aggregate large XML messages compliant with the NDC standard. Experimental results indicate that the proposed method outperforms traditional XSLT-based parsing and transformation methods in terms of NDC message response for typical airline flight query scenarios, achieving excellent performance.

Key words:new distribution capability;NDC standard;airline company;message aggregation;XML transformation

电话:010-59796075 信箱:chinakjzh2009@163.com

Copyright © 2008 All Rights Reserved

版权归中国科技纵横所有

《中国科技纵横》杂志社 京ICP备18024177号-1 ICP备