一种插件式联机交易处理框架

2017-08-29 15:00丰朋
电脑知识与技术 2017年21期
关键词:共享内存联机插件

丰朋

(中国银联股份有限公司,上海201201)

一种插件式联机交易处理框架

丰朋

(中国银联股份有限公司,上海201201)

针对交易系统中交易类型多、交易间耦合性大,不便于应用开发和系统运维的问题,提供了一种插件式的联机交易处理框架,能够灵活处理各种联机交易,在不停应用的情况下,可以实现联机交易的新增、修改、删除操作,不同交易互不影响,从而实现了一个插件式、支持“热插拔”的交易处理系统。不同交易所涉及的配置信息可以在数据库表中配置、修改,并通过加载到共享内存实时生效,最大程度地实现了交易处理的灵活性和实时性。

联机交易;热插拔;共享内存

1 背景

伴随着“互联网+”的浪潮,越来越多的行业开始采用互联网化的思维来审视自己的工作内容和发展战略,基于互联网的解决方案也逐渐成为各行各业面对问题时的首选,而曾经作为某些行业特有的一些做法或行为方式,借助互联网,也逐步被更多的行业接纳、采用,在新的领域发挥出独特的作用。联机交易系统,在多数人的理解中,曾经是专指银行的交易处理系统,我们日常的刷卡消费、还款、转账,都与此系统息息相关;而现在,联机交易系统这个概念正在逐步延伸,线上一张火车票购买、一件商品的下单、一次营销秒杀活动的参与,都可以说是一笔交易,而对应的后台系统,都可以理解成联机交易系统。行业的多样性、用户行为的多样性、易变性,决定了对应场景中交易的多样性和易变性。如何在一个联机交易系统中灵活处理各种交易,使得各个交易支持热插拔式、互不影响的操作,是所有联机交易系统面临的共同问题[1-2]。

2 总体框架

本文所提出的交易处理框架,包括数据库、共享内存、交易处理引擎、交易处理动态库四个部分,系统结构图如下所示:

图1 系统结构图

数据库一方面承担了配置信息落地存储的角色,联机交易中的相关配置信息,如传统银行交易中借贷记的科目、营销秒杀交易中的限制规则等信息,通过管理平台配置后,在数据库中落地存储,同时可以通过管理平台进行增删改查等操作;另一方面,数据库也承担了交易数据落地存储的角色,以便实现交易的界面查询、对账报表生成等后继功能。根据联机交易系统对交易数据完整性和实时性的要求,交易数据的记录环节可以同步记录,也可以通过kafka等消息中间件实现异步记录:交易处理服务产生交易记录,作为生产者将交易记录作为消息推送至消息中间件,然后有单独的消费者进行将交易记录从消息中间件上取出,存入数据库。

共享内存加载数据库中存储的交易配置信息,包含了交易共用的配置信息及单笔交易的个性化配置信息。联机交易处理过程中,所有配置信息均通过各个应用主机的共享内存获取,避免直接读库引发单点问题及性能问题,从而实现交易的高效处理。通过管理平台修改相关配置后,可实时刷新共享内存,达到实时生效的业务效果。本文同时提出了一种两阶段刷新的机制,保证在刷新过程中不影响联机交易,将在第3章节详细阐述。

交易处理引擎包含了接入/接出的通讯适配、公用的报文拆包/组包服务及具体的交易处理调度逻辑。对报文拆包后,根据获取到的交易代码,查找共享内存,找到对应的交易处理动态库,进行实时动态调度,完成交易的具体处理。

交易处理动态库由一系列的.so动态库文件组成,每个动态库文件对应一种交易类型的处理。当动态库文件被交易处理引擎调度时,其将按照预设的逻辑,完成个性化的交易处理并返回处理结果[3]。

3 交易处理流程

基于上述总体框架,系统的交易处理流程如下:

1)在数据库中配置交易处理所需的各种配置信息。这些信息又分所有交易共用的配置(如清算日期、报文拆包/组包规则等)和针对每种交易的个性化配置(如借贷科目、营销规则等)。通过实现交易属性的可配置化,极大提高了交易处理的灵活性,当需要对个别属性做调整或新增相关属性时,只要修改或新增相关数据库记录即可。

2)采用两阶段刷新机制,将配置信息加载到共享内存。使用开放地址的哈希存储算法,提高交易处理时查找相关配置的速度。当数据库中的配置有更新时,只要刷新共享内存,即可实现同步生效。

3)交易处理引擎始终处于侦听状态,用来接收交易,进行所有交易都必需的共性操作,然后动态调用个性化的交易处理动态库,具体流程如下:

图2 交易处理引擎流程

由于采用了动态调用,动态库不是在交易处理引擎启动时加载的,而是在处理具体交易时,根据报文关键域信息动态拼接动态库名,然后实施调用,因此不同交易间无耦合,更新单个交易处理流程不影响交易处理引擎及其他交易处理流程的正常运行,从而实现了交易处理的插件式、“热插拔”的操作[4]。

4)交易处理动态库负责处理交易个性化的业务逻辑。每种交易对应一个动态库,如同交易处理引擎的插件,被调用时完成各自的功能。具体流程如下:

图3 交易处理动态库流程

基于本框架,可以插件式管理不同的交易处理流程,具体如下:

1)新增一种交易类型时,通过编码、编译,发布与之对应的交易处理动态库,在数据库中增加对应配置,然后刷新共享内存。

2)修改一种现有交易处理流程时,通过修改代码、编译,发布新的动态库,覆盖原来的即可,如有必要,可更新数据库中对应配置,然后刷新共享内存。

3)删除一种现有交易处理流程时,只要将对应的动态库删掉,将数据库中的对应配置删除,然后刷新共享内存即可。

4 共享内存的两阶段刷新

本文提供了一种多机环境下共享内存的同步机制,将共享内存中的数据同步动作分为刷新和切换两个阶段,任何一个节点上的数据更新能够同步的应用到其他节点上,从而保持数据的一致性。通过共享内存主备块的设计和同步服务调用机制,保证了数据的同步切换及各个节点切换动作的事务性(全部成功或全部失败),并使得同步过程对系统运行不产生影响[5]。

在本方案中,数据库作为共享内存中数据的来源和存储点,采用同步服务调用的方式实现多机间的通信。每个节点上的共享内存包含结构完全相同的主块和备块,并能相互切换[6-7]。共享内存系统框图如下:

图4 共享内存系统框图

共享内存刷新流程如下:

1)系统初始化时,首先配置数据库,然后每个节点读取数据库中的数据,加载到内存中的主块和备块中,并激活主块。此时各个节点上共享内存的数据是一致的。

2)系统运行过程中,任意一个节点可能接收到来自外部的数据输入,这些数据的处理结果可能会要求共享内存中的数据发生变化。此种情况下,接收外部数据的节点首先把要变化的共享内存数据更新到数据库中。也可能该节点本身并未对数据库中的数据产生改变,只是收到了数据库中数据发生变化、需要重新刷新共享内存的通知。

3)该节点通过同步服务调用的方式,通知其本身和其他节点根据最新的数据库数据刷新共享内存备块。由于各个节点的运行环境和性能的差别,每个节点的刷新动作可能消耗不同的时间。该步骤结束后,各个节点上共享内存的备块保存了最新的、与数据库一致的数据[8]。同步服务调用可以通过自身系统的编码实现,也可以通过中间件实现。

4)该节点再通过同步服务调用的方式,通知其本身和其他节点切换共享内存,即激活备块成为主块,原来的主块变成备块。由于切换的动作只涉及修改内存中的一个标志位,可以认为各个节点同时实现切换。该步骤之后,各个节点使用最新的共享内存数据,且与数据库保持了一致。

5 结束语

本文提供的插件式联机交易处理框架具有灵活、高效的特点,交易间的耦合性小,易于不同的人同时开发,同时交易的修改、增加、删除操作方便、快捷,易于维护,生产稳定性高。

[1]李林峰.分布式服务框架原理与实践[M].北京:电子工业出版社,2016:1-25.

[2]柳伟卫.分布式系统常用技术及案例分析[M].北京:电子工业出版社,2017:52-83.

[3]StevensW R.Unix环境高级编程[M].戚正伟,张亚英,尤晋元,译.北京:人民邮电出版社,2014:147-168.

[4]王磊.微服务架构与实践[M].北京:电子工业出版社,2015:41-69.

[5]Stevens W R.UNIX网络编程卷2进程间通信[M].北京:人民邮电出版社,2015:244-259.

[6]白文荣.软件工程与设计模式[M].北京:清华大学出版社, 2017:128-156.

[7]秦小波.设计模式之禅[M].北京:机械工业出版社,2014:58-64.

[8]Erich Gamma.设计模式:可复用面向对象软件的基础[M].李英军,译.北京:机械工业出版社,2014:35-70.

TP311.52

A

1009-3044(2017)21-0001-02

2017-06-08

丰朋(1983—),男,山东日照人,中级工程师,硕士,主要研究方向为金融计算机工程。

猜你喜欢
共享内存联机插件
自编插件完善App Inventor与乐高机器人通信
通过QT实现进程间的通信
基于PCI总线的多处理器协同机制研究
高温多联机空调系统的控制方式研究
CALIS联机合作编目中的授权影印书规范著录
MapWindowGIS插件机制及应用
基于Revit MEP的插件制作探讨
分析Automation技术在Word联机考试系统中的作用
一种高效RTAI 共享内存管理层的研究与实现*