ATMP中冲正缓存设计及实现
2016-11-02王勇军
王勇军
摘要:针对ATMP系统中日益增长的业务规模和需求而导致的性能瓶颈问题,提出了基于multi-index的缓存机制。该机制提供快速的内存数据关联和存储。相比共享缓存加消息队列的方式,该缓存提高了业务扩充的灵活度和效率。经过仿真和压力测试,该缓存运行鲁棒性高,在并发业务下性能良好。
关键词:atmp;冲正;缓存 ;multi-index
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)18-0238-04
Implementation and Design of Withdraw Reversal Cache in ATMP
WANG Yong-jun
(Guangzhou College of South China University of Technology, Guangzhou 510083, China)
Abstract: Exploiting non-uniform distribution of cache accesses among sets, V-Way cache allows varying ways in sets with the run-time demands and outperforms conventional
Key words: atmp; withdraw reversal; cache; multi-index
1 概述
ATMP是银行ATMC与ATMV之间的连接桥梁,负责实时交易处理、渠道的接入管理,数据库访问,事件跟踪,加密机访问,风险校验等功能。而高效缓存各种数据,如冲正的交易信息、内部域信息、密钥信息等,是影响ATMP整体性能的核心指标。因此,如何解决快速增长的银行ATM业务所带来的巨量数据的处理效能,提高设备效率,是目前研究的重点。
随着行业发展和业务竞争的驱动,国内外几种主流联机应用模式,如NCR:ATMC/ATMP、IBM主机+终端模式(1/Link+DDC/NDC)、ATM小前置/综合前置+跨平台ATM应用软件中,ATMC已由10年前的DOS和OS/2开发平台转为基于WOSA/XFS标准的windows平台。相应的,集中管理ATM网络的ATMP,也在不断跟进和开发中。其内部域数据处理传统的实现方法是采用IPC机制,进程管理技术。但共享内存对来自网络如管理控制台、后台主机的数据供应效率有待改进;消息队列在众多的功能模块(通讯进程)间出现协调问题时也比较容易堵塞,如日志模块因故未能正常运行,日志消息队列急剧填满而让其他依赖模块消息队列调度缓慢,整个ATM系统服务能力下降几乎至0。近年来,由于银行ATM业务量的剧增,ATMP在实际上线运行中维护需求越来越频繁,优化核心实现,提高ATMP设备的数据吞吐效率是业界的难点。
笔者曾在山东IT联盟进行ATM业务联调,面对多家ATM厂商及各种类型银行,业务需求层出不穷,从ATMP技术层面上说,就是对各种内部域的需求非常多样化。本文提出的基于multi-index的缓存机制,改进了并发数据的存储和关联应用,从而实现了吞吐效率的提高和业务灵活性的增强。Multi-index支持多级索引,提供类似于STL容器或SQL语句的操作接口,支持多个条件查找、范围筛选、实时更新,同时支持各种类型的字段。本文以ATMP中冲正业务的实现为原型,在分析缓存机制并设计ATMP缓存结构的基础上,筛选索引字段,利用multi-index建立冲正数据表,结合swack业务仿真工具和LoadRunner进行了压力和稳定性测试,最后对实验数据进行了分析,验证了性能的提升。
2 ATMP中缓存设计
2.1 整体框架
在物理布局上,ATMP整体软件模块如图1所示。
系统主体从逻辑上划分为接入层、数据处理层和业务控制层。接入层分为网络通信层、报文解析层和预处理层,其中网络通讯层全权负责物理网络上的数据包传输,即按网络协议(TCP/IP、并口、串口、USB……)接收或发送数据;报文解析层则按通讯接口定义的数据报文协议组织或分解系统外部报文;预处理层根据各渠道业务特性对数据进行预处理,并负责系统外部报文和系统内部报文之间的转换。数据处理层解决业务数据的路由问题,在接入层和业务控制层之间搭起承上启下的数据桥梁。业务控制层根据预先设定的各种业务处理流程来控制每笔具体业务的处理,保证业务的完整性和准确性。
冲正模块的作用是存储转发交易,即当某个支付渠道网络有问题,或其他原因导致无法交易,该模块负责把暂时无法交易的交易保存到冲正缓存表,通过配置处理方式,实现下次实时交易。ATMP缓存需求主要分为三部分:
1)冲正缓存表
ATMP系统为了提高数据查找速度,需要采用类似于数据库的方式,创建冲正内存数据库,用于快速处理冲正,并且通过配置文件方便调整高速冲正表的数据大小。冲正缓存表的大小可以通过XML文件来设置,这个设置可以在停止系统后进行修改。停止时系统会将缓存表以文件存储到磁盘上,进程启动时加载到内存中,并以辅助程序定时清理缓存数据。
2)交易数据关联表
交易数据关联表主要存放内部域,供其他处理模块使用。另外,对于ATM渠道、POS渠道、VISA、MC、银联等渠道提供的PINkey,MACKey,MasterKey等密钥信息,通过渠道索引,终端编号等标识也存放到关联表中。
3)交易路由表
一个原始的请求交易,通过TCP/IP协议发送到ATMP实时交易处理渠道之后,实时交易处理渠道进行解包,预处理等动作,生成系统流水号。ATMP把该唯一流水,及解包后的信息,以流水号为索引,存放到交易数据关联表中。同时把该流水插入到交易路由表中,按照路由配置规则,发送到相应的处理数据模块。对应的数据处理模块根据接收到的索引号,从交易数据关联表中取出该对应的处理数据,进行处理。再发给下一个处理模块等,直至该交易处理结束。
ATMP缓存数据主要来源于网络,其网络通信部分一般是采用高性能的网络框架如ACE,Boost Asio等来收发实时交易数据包。作者曾对Asio并发性能进行过测试,每秒接收并转发的数据包超过14000个,并且能成功插入并更新到multi-index缓存表中。
2.2 缓存的索引选取
在数据的关联应用中,索引关键字的选取非常重要。索引效率的高低,将直接影响数据的响应速度及吞吐量。获取索引关键字的方法有很多,如矩阵法①,定义法等。本文以属性特征分析法②来选取缓存中的索引字段域。以下为该基本理论的数学推导。
给定一个关系模式R(U,F),U={A1,A2,…,A0},F 是R的函数依赖集,那么,可以将属性分为如下四类:
L: 仅出现在函数依赖集F左部的属性;
R: 仅出现在函数依赖集F右部的属性;
LR: 在函数依赖集F左右部都出现的属性;
NLR: 在函数依赖集F左右部都未出现的属性。
根据候选码的特征,有关系模式R(U,F),X?U,进而可以得出如下结论:
(1) 若X是L类属性,则X必为R的任一候选码的成员。如果有XF+=U,则X必为R的唯一候选码。如果XF+ ≠U,则缺什么属性就补什么属性。
(2) 若X是R类属性,则X必不是R的任一候选码的成员。
(3) 若X是NLR类属性,则X必是R的任一候选码的成员。
(4) 若X是L类和NLR类属性组成的属性集,且XF+=U,则X必是R的唯一候选码。
(5) 若X是LR类属性,则情况比较复杂,可综合以上情况分析。
如2.1中描述,三张缓存表中涉及数据更新操作比较频繁的是冲正交易表。其核心内部域字段主要有:
结合属性分析法,很显然,只有以下四对域可以作为索引关键字,{2,3},{2,4},{2,39},{2,32}。在本次实现中,我们将选取{2,39}即主账号和响应码作为冲正缓存表的索引域。
3 基于缓存表的冲正实现
冲正分为主动冲正和被动冲正两种。取款交易发送到后台,如果在规定的时间内,没有收到请求或者取款交易后台响应成功而没有向ATMC转发失败时,会引发主动冲正。当ATMC 在接收到ATMP的成功响应,但出钞或其他原因导致持卡人没有取得钞票或ATMC在规定的时间内没有接收到ATMP的响应,引发被动冲正。
在主动冲正时,各ATMC用户可能需要返回交易失败的某些内部域,比如交易流水号,可以通过状态函数缓存到冲正交易表中。冲正交易表提供类似SQL简单查询、修改、更新功能,可以为管理控制平台提供部分实时数据请求,减少读取后台数据库的需求。ATMP冲正缓存业务流程大致如下:
在程序实现上,冲正交易表主要是利用multi-index建立二级索引。ATMC端可以通过主账号进行索引,ATMV端可以通过响应码进行索引。当ATMP收到一笔取款交易业务,保存各内部域值到表中;当ATMP收到ATMC或ATMV的请求时,通过multi-index建立的快速索引接口如find,insert,replace,update等获取并响应。
缓存的灵活性体现在将状态函数指针以字段形式关联到路由信息表中,业务的变更维护通过更新字段值即可,如新增ATMC取款抽奖活动,只要将该活动的状态函数指针地址以记录的形式插入到路由信息表中,同时通过在该表中建立业务流水号索引,便于频繁调用和更新。
4 实验测试及分析
本节利用LoadRuner对该缓存的性能和稳定性进行了压力测试。ATMC和后台主机由Swack模拟实现。由于相关联的模块比较多,本次系统测试侧重检验缓存模块的稳定性和性能。
系统经过7小时的压力测试后,结果如下面三个图所示。图4显示了单笔交易的平均响应时间,在LoadRunner初始化虚拟用户和任务的过程中,每单交易的响应时间逐渐趋于稳定。图5表明了成功启动后的虚拟交易用户数恒定在设置的10,没有中途异常退出的情况。图6中的交易吞吐流量随着单位时间内并发交易请求数的稳定而逐渐平稳,显示系统服务持续能力强。
本次测试选择了10个虚拟用户,通过压力测试脚本模拟取款和取款冲正两个交易动作。测试时为减少脚本的复杂度和针对性,屏蔽了MAC校验,PINDATA校验和IP校验等动作。模拟交易在平均响应时间方面维持在0.5秒左右,平均每秒处理的交易量为800笔左右,相比目前国内主流ATMP厂家的系统性能有一定的优越性。
5 结束语
本文从方便数据关联查找、提高ATMP内部域使用灵活度的角度出发,借助多级索引的理念设计,实现了冲正交易表、交易数据关联表和交易路由表;对于数据请求比较频繁的冲正交易信息,利用multi-index多级索引保存在内存中,提高了并发情况下ATM系统的处理性能。经压力测试,系统运行稳定,鲁棒性高。由于ATMP涉及内部域广,业务发展的速度快,本文下一步还需要进行更深一步的开发与整合。
注释:
①http://dl.acm.org/citation.cfm?id=1686412
②http://csc.lsu.edu/~jianhua/fd_slide2_09.pdf
参考文献:
[1] Jaume Abella and Antonio González. Heterogeneous way-size cache [C]. Proceedings of the 20th Annual International Conference on Supercomputing, 2006: 239-248.
[2] Dyer Rolán, Basilio B. Fraguela and Ramón Doallo. Adaptive line placement with the set balancing cache [C]. Proceedings of the 42nd Annual IEEE/ACM International Symposium on Microarchitecture, 2009: 529-540.
[3] Erik G. Hallnor and Steven K. Reinhardt. A fully associative software-managed cache design [J]. SIGARCH Computer Architure News, 2000, 28(2): 107-116.
Moinuddin K. Qureshi, David Thompson, Yale N. Patt. The v-way cache: demand based associativity via
[4] Jaume Abella and Antonio González. Heterogeneous way-size cache [C]. Proceedings of the 20th Annual International Conference on Supercomputing, 2006: 239-248.
[5] Dyer Rolán, Basilio B. Fraguela and Ramón Doallo. Adaptive line placement with the set balancing cache [C]. Proceedings of the 42nd Annual IEEE/ACM International Symposium on Microarchitecture, 2009: 529-540.
[6] Erik G. Hallnor and Steven K. Reinhardt. A fully associative software-managed cache design [J]. SIGARCH Computer Architure News, 2000, 28(2): 107-116.
[7] Moinuddin K. Qureshi, David Thompson, Yale N. Patt. The v-way cache: demand based associativity via global replacement [C]. Proceedings of the 32nd Annual International Symposium on Computer Architecture, 2005: 544-555.
[8] Naveen Muralimanohar and Rajeev Balasubramonian. Cacti 6.0: A tool to understand large caches [R]. Technical report, University of Utah and Hewlett Packard Laboratories, 2009.
[9] Peter S. Magnusson, Magnus Christensson, Jesper Eskilson, et al. Simics: a full system simulation platform [J]. Computer, 2002, 35(2): 50-58.
[10] Christian Bienia, Sanjeev Kumar, Jaswinder Pal Singh and Kai Li. The parsec benchmark suite: Characterization and architectural implications [C]. Proceedings of IEEE/ACM International Conference on Parallel Architectures and Compilation Techniques, 2008: 72-81.