基于自动补偿校正机制的铁路客票商旅服务计费系统研究
2020-09-01朱建生王富章
谢 泽,朱建生,王富章,李 雯,王 拓
(1.中国铁道科学研究院 研究生部,北京 100081;2.中国铁道科学研究院集团有限公司 电子计算技术研究所,北京 100081)
0 引言
铁路客票商旅服务以铁路客运服务为主,以酒店住宿、网络约车、餐饮及保险等商旅服务为辅,将多种形式服务集成,从而为商旅客户提供便捷的综合服务。铁路客票商旅服务平台是铁路客票系统对公服务的补充,为了保证铁路客票商旅服务产品数据及服务金额能够在全生命周期内精准管理,需要搭建一套具备数据记录、自动化对账以及误差校正等功能的铁路客票商旅服务计费系统。
目前,很多领域对计费系统、财务管理及智能化技术进行研究。在银行、金融及电商等领域智能化计费系统方面,叶金平与刘映辉等[1-2]运用ETL,VFP和STP技术搭建商业银行的自动化对账系统;翟敏[3]对金融公司ERP系统财务业务应用一体化模式下的结账和对账进行研究,实现财务复杂细节问题简单化。在大型电商企业方面,为实现销售产品财务管理流程智能化,俞清[4]分析EVA系统关键技术及应用难点,满春[5]优化财务系统自动化入账模式。在云计算和区块链技术方面,何鸣、崔益彪、陈宇等[6-8]将计费系统的底层安全与数据存储及处理效率作为主要研究对象,将Kafka等云计算技术和具备数据不易篡改特点的区块链技术运用于财务计费系统中。
铁路客票财务系统已经实现对多种客运服务销售渠道产生的客运收入进行结账等操作[9],由于铁路客票商旅服务计费系统具有处理数据量多、商品服务数据类型复杂等特点,需要融合信息技术实现独立、安全、高可扩展的系统架构,以解决铁路客票商旅服务计费系统的数据存储与补偿以及自动化对账与修正等关键技术难点。
1 铁路客票商旅服务计费系统分析
1.1 技术难点
铁路客票商旅服务计费系统除车票相关财务数据外,还需要管理酒店住宿产品、机票产品、网络约车产品以及服务费等多类型数据,因而计费系统需要通过商旅服务产品数据存储与补偿确保数据准确记录支撑数据基础,并通过财务自动化对账与修正保障产品金额对账准确,从而实现商旅服务产品及金额的全生命周期管理。铁路客票商旅服务产品及金额数据全生命周期管理流程如图1所示。
由图1可见,铁路客票商旅服务产品及金额数据全生命周期管理流程关键步骤为商旅服务产品数据记录和商旅服务产品对账,其中数据记录的准确性和内部对账修正是商旅服务计费系统的技术难点。在数据处理类型方面,由于商旅服务种类随着业务扩展不断增加,如保险等服务,因而铁路客票商旅服务计费系统需要具备良好的扩展性和兼容能力,更好地应对商旅服务类型多的业务难点;同时铁路客票商旅服务计费系统还应具备独立微服务的特性,以保证商旅服务需要变更的子系统升级不会对整体计费功能产生影响。在系统性能需求方面,应充分考虑商旅客户数据量在短期内达到千万级,需要具备高并发数据处理、高效存储和查询的能力以达到海量数据响应迅速。在系统安全需求方面,铁路客票商旅服务涉及商旅客户的隐私信息,需要计费系统充分考虑各层级容错能力保障系统安全可靠,同时还需要对底层数据安全隔离并严格限制数据访问权限,保证隐私敏感加密数据不泄露。
1.2 业务架构
图1 铁路客票商旅服务产品及金额数据全生命周期管理流程Fig.1 Life cycle management process of railway passenger ticket business travel service products and amount data
根据铁路客票商旅服务计费系统的技术难点要求,设计以数据记录和财务对账为业务主线的系统架构,主要从计费系统结算模块及数据库模块的功能部署角度概括商旅服务计费系统实现。铁路客票商旅服务计费系统架构示意图如图2所示。
由图2可见,商旅服务业务系统是商旅平台对客户提供铁路客运、酒店住宿、网络约车、餐饮等商旅服务的系统平台,该系统生产的产品数据是商旅服务计费系统进行全生命周期管理的服务对象;服务生产源主要包括铁路12306、机票平台、酒店预订平台等底层服务提供商,该服务提供商在商旅服务流程中生产的存根等数据是商旅服务计费系统对账的主要对象;财务中心主要负责商旅服务相关金额的基础财务管理;缓存服务主要用于存储并更新数据库模块中常用的查询数据,以降低频繁的查询对数据库产生的压力。
商旅计费系统数据库模块是计费系统数据记录业务的核心模块,主要实现计费系统数据的增删改查等功能,图中橙色业务线路是数据记录业务主要流程。该流程通过探针程序的形式将商旅服务计费功能嵌入在商旅服务业务系统中,每当铁路客票商旅服务系统产生订单,计费探针便会将产品数据以固定的信息格式传输至消息队列。商旅服务计费系统会利用监听器实时消费消息队列中的服务数据,并且根据数据不同类型将数据存储至计费系统数据库模块中,如客户服务定义数据及商旅服务明细数据等。因此,商旅服务计费系统数据模块对产品数据的准确记录是计费系统数据基础的支撑,数据存储与补偿是数据准确记录的关键技术和保障。
图2 铁路客票商旅服务计费系统架构示意图Fig.2 Architecture of railway passenger ticket business travel service billing system
计费系统结算模块主要实现车票、酒店订单、餐饮订单等商旅服务产品数据的自动化对账。该模块的对账对象主要包含服务生产源及商旅客户服务消费源,图中绿色及红色业务线路分别为内部对账及外部对账流程。在内部对账流程中数据以服务生产源数据为核对标准。当商旅服务计费系统与服务生产源进行的内部对账比对修正无误并生成外部对账数据后,计费系统与商旅客户发生的外部对账才具有实际意义。在外部对账过程中,铁路客票商旅服务计费系统需要将外部对账数据推送给商旅客户以便客户自行核对,并通过URL调用方法完成商旅客户对账结果接受以及转账结果转送的消息推送。商旅客户对账结果用于排查业务服务记录异常,转账结果用于通知财务中心服务款状态。商旅服务计费系统对账的数据对象具有数据量大、类型多等特点,因此准确的自动化对账以及异常数据修正是计费系统对账模块的关键技术,也是后续财务流程顺利进行的保障。
2 铁路商旅服务计费系统关键技术
2.1 数据存储与补偿
数据存储与补偿技术是铁路客票商旅服务计费系统数据记录准确的保障。铁路客票商旅服务计费系统通过利用数据双写和数据补偿技术不仅可以保证数据记录的物理隔离,还可以将记录数据与标准数据校验。铁路客票商旅服务计费系统数据存储与补偿技术架构如图3所示。如图3中灰色虚线条及红色禁止标记所示,如果商旅服务产生的业务数据仅仅保留在铁路客票系统数据库中,那么商旅服务计费系统的数据模块和ORDER订单模块对数据的增删改查都会给铁路客票系统数据库带来巨大压力,为铁路客票系统带来安全隐患。为了能够将与商旅业务相关的铁路客票数据剥离,并且还能够以铁路客票数据作为商旅服务计费系统的数据标准,提出以下数据存储及补偿的逻辑流程:首先经过图中订单双写业务流程实现数据双写与数据剥离,再利用数据复制、转发和消费完成数据补偿,实现铁路客票数据复制,并对标准的订单等剥离数据校正。数据存储与补偿在执行顺序上通过设定固定迟滞时间将数据补偿延后,从而避免数据库操作异常。
数据存储主要通过双写技术的理论概念实现,当商旅客户发起服务请求后,商旅业务系统会将互联网端传送的信息分别发布给位于客服内网的铁路客票订单系统以及商旅服务计费订单系统。铁路客票订单系统会将商旅客户发起请求的业务数据存储在位于客票网的订单表和存根表数据库中,铁路客票商旅服务计费订单系统则会通过探针使用消息生产与消费的模式将业务数据存储在客服内网的服务费数据库及订单数据库中。双写的本质是将位于客票网的商旅订单相关数据复制剥离存储在客服内网中,减少铁路客票系统数据库压力,该双写数据不是铁路客票系统数据的完整复制,存在字段关联关系。计费系统双写数据在存入数据库时,通过使用ShardingSphere的水平分库策略作为分库依据,使得数据能够较为平衡地存储在各个数据分库中[10]。
铁路客票商旅服务计费系统数据补偿通过生产消费的模式对铁路客票库数据进行复制,并按照队列的形式将商旅计费库数据排队,将标准数据与商旅计费库数据轮询比对补偿。铁路客票商旅服务计费系统数据补偿原理如图4所示。数据补偿主要功能体现于2个方面,首先在数据双写存储过程中由于系统异常或系统间响应超时导致数据存储双写失败时,数据补偿可以通过轮询的比对逻辑将双写失败的数据补充。其次,位于客服内网的部分数据具有状态标志字段,数据补偿还会检查状态标志字段的双写结果是否与标准铁路客票数据状态一致,如果不一致则会以铁路客票数据为标准进行补偿修改。铁路客票数据经过亿级订单量的检验,完全具备作为数据标准的资格。数据补偿环节中的铁路客票数据是以铁路客票系统入库时的SQL消息形式传递,通过数据库中间件将铁路客票数据库的SQL操作信息复制转发给RocketMQ消息队列,数据补偿模块通过监听器设置迟滞时间延时消费队列消息保证补偿行为位于数据存储之后。
2.2 自动化对账与修正
财务自动化对账与修正是铁路客票商旅服务计费系统对服务产品金额精准结算的保障,也是商旅产品全生命流程管理中的重要一环。自动化对账主要分为内部对账与外部对账,修正主要分为自动化修正与人工修正。内部对账主要涉及铁路客票商旅服务计费系统记录的产品数据与服务生产源铁路客票系统记录标准产品数据间的核对,在该过程中以铁路客票系统记录数据为标准,当出现两方数据不一致时,通过自动化修正功能保证铁路客票商旅服务计费系统数据与铁路客票系统数据吻合。内部对账主要核对2个方面数据记录准确性,分别为数据量和记录金额。在数据量异常方面,若铁路客票商旅服务计费系统数据库响应超时,可能造成服务数据缺失;若位于业务系统的计费探针程序重复调用时,可能造成服务数据重复记录。在记录金额方面,主要核对商旅服务产品价格是否与铁路客票系统数据一致。外部对账发生在内部对账之后,主要由商旅客户通过URL获取内部对账生成的总结性数据自行核对。
图3 铁路客票商旅服务计费系统数据存储与补偿技术架构Fig.3 Technical architecture of data storage and compensation of railway passenger ticket business travel service billing system
图4 铁路客票商旅服务计费系统数据补偿原理Fig.4 Data compensation principle of railway passenger ticket business travel service billing system
从对账对象的种类分析,商旅服务计费系统内部对账与既有铁路客票系统对账的区别为铁路客票系统的对账对象种类单一,只需要将所有订单统一进行核对,而商旅服务计费系统在内部对账过程中以商旅客户为单位划分数据种类,在不同商旅客户单位内还需要根据不同商旅服务种类分别进行对账。内部对账流程如图5所示,通过商旅客户编号及商旅服务产品类型2个字段嵌套2层遍历循环,实现对不同客户的不同服务产品进行数量和金额核对。在每层遍历过程中对所有异常进行记录,以便将消息推送给运维人员,从而有迹可查。在自动修正的过程中,主要将商旅服务计费系统数据与标准铁路客票数据进行修正统一,并对自动修正的结果进行日志记录,当自动修正失败时,就需要人工进行手动修正,此时自动修正日志便为人工修正提供记录支撑。
3 铁路客票商旅服务计费系统测试
为了验证商旅服务计费系统安全可靠,设计了铁路客票商旅服务计费系统数据补偿以及对账修正准确性测试,主要测试了服务费记录缺失、重复和双写订单缺失、状态偏差的异常场景。对于服务费及双写订单的缺失异常,系统都可以通过比对记录数据量的策略准确补偿,对于服务费记录重复的异常,则是通过内部对账的金额不匹配异常修正。商旅双写订单状态主要存在退票状态及改签票状态与铁路客票订单记录不一致问题,通过数据补偿机制都可以有效解决。铁路客票商旅服务计费系统异常测试如表1所示。
图5 内部对账流程Fig.5 Internal accounting process
除了对商旅服务计费系统数据补偿、对账修正的准确性进行测试外,有必要对计费系统进行性能测试,其中系统吞吐量(TPS)、CPU利用率及响应时间(RT)是衡量系统性能的重要指标。商旅客户出行构成的商旅服务计费系统业务量具备周期性规律,在预计的非高峰期、弱高峰期及高峰期对服务器集群应该配备不同数量的服务器。因此,分别对5台、8台及10台服务器进行系统性能测试。系统吞吐量随CPU利用率变化趋势如图6所示,3种不同数量服务器配备的系统吞吐量随着CPU利用率的不断增加而增大,并且系统性能与服务器配备数目成正比关系。系统响应时间随CPU利用率变化趋势如图7所示,3种不同数量服务器配备的系统响应随着CPU利用率的不断增加而增大,并且服务器配备量越大,系统响应时间越高,但并不与配属服务器台数成正比。
从以上测试结果中可以判定系统性能测试基本达到应用要求,在CPU利用率为60%的正常使用情况下,系统平均响应时间都在80 ms上下,系统吞吐量也处于优良状态范围内,5台服务器的系统吞吐量为1 494,系统响应时间为64 ms,完全可以满足当前商旅客户量的系统需求。
表1 铁路客票商旅服务计费系统异常测试 个Table.1 Abnormal test of railway passenger ticket business travel service billing system
图6 系统吞吐量随CPU利用率变化趋势Fig.6 Trend of system throughput with CPU utilization rate
图7 系统响应时间随CPU利用率变化趋势Fig.7 Trend of system response time with CPU utilization rate
4 结束语
为保障铁路客票商旅服务平台的产品数据记录、自动化对账与修正有充分技术支撑,通过使用数据双写、数据补偿和轮询比对等策略,搭建了安全且独立的微服务铁路客票商旅服务计费系统。该计费系统对既有的数据缺失、重复及金额不匹配等异常可以实现自动化修正,并且良好的业务性能测试证明该系统足以支撑当前商旅客户量的系统要求,可以更好地保证商旅服务平台的运作效率,提高铁路客票对公服务的品质。