王勇軍
摘要:針對(duì)ATMP系統(tǒng)中日益增長(zhǎng)的業(yè)務(wù)規(guī)模和需求而導(dǎo)致的性能瓶頸問(wèn)題,提出了基于multi-index的緩存機(jī)制。該機(jī)制提供快速的內(nèi)存數(shù)據(jù)關(guān)聯(lián)和存儲(chǔ)。相比共享緩存加消息隊(duì)列的方式,該緩存提高了業(yè)務(wù)擴(kuò)充的靈活度和效率。經(jīng)過(guò)仿真和壓力測(cè)試,該緩存運(yùn)行魯棒性高,在并發(fā)業(yè)務(wù)下性能良好。
關(guān)鍵詞:atmp;沖正;緩存 ;multi-index
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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之間的連接橋梁,負(fù)責(zé)實(shí)時(shí)交易處理、渠道的接入管理,數(shù)據(jù)庫(kù)訪問(wèn),事件跟蹤,加密機(jī)訪問(wèn),風(fēng)險(xiǎn)校驗(yàn)等功能。而高效緩存各種數(shù)據(jù),如沖正的交易信息、內(nèi)部域信息、密鑰信息等,是影響ATMP整體性能的核心指標(biāo)。因此,如何解決快速增長(zhǎng)的銀行ATM業(yè)務(wù)所帶來(lái)的巨量數(shù)據(jù)的處理效能,提高設(shè)備效率,是目前研究的重點(diǎn)。
隨著行業(yè)發(fā)展和業(yè)務(wù)競(jìng)爭(zhēng)的驅(qū)動(dòng),國(guó)內(nèi)外幾種主流聯(lián)機(jī)應(yīng)用模式,如NCR:ATMC/ATMP、IBM主機(jī)+終端模式(1/Link+DDC/NDC)、ATM小前置/綜合前置+跨平臺(tái)ATM應(yīng)用軟件中,ATMC已由10年前的DOS和OS/2開(kāi)發(fā)平臺(tái)轉(zhuǎn)為基于WOSA/XFS標(biāo)準(zhǔn)的windows平臺(tái)。相應(yīng)的,集中管理ATM網(wǎng)絡(luò)的ATMP,也在不斷跟進(jìn)和開(kāi)發(fā)中。其內(nèi)部域數(shù)據(jù)處理傳統(tǒng)的實(shí)現(xiàn)方法是采用IPC機(jī)制,進(jìn)程管理技術(shù)。但共享內(nèi)存對(duì)來(lái)自網(wǎng)絡(luò)如管理控制臺(tái)、后臺(tái)主機(jī)的數(shù)據(jù)供應(yīng)效率有待改進(jìn);消息隊(duì)列在眾多的功能模塊(通訊進(jìn)程)間出現(xiàn)協(xié)調(diào)問(wèn)題時(shí)也比較容易堵塞,如日志模塊因故未能正常運(yùn)行,日志消息隊(duì)列急劇填滿(mǎn)而讓其他依賴(lài)模塊消息隊(duì)列調(diào)度緩慢,整個(gè)ATM系統(tǒng)服務(wù)能力下降幾乎至0。近年來(lái),由于銀行ATM業(yè)務(wù)量的劇增,ATMP在實(shí)際上線(xiàn)運(yùn)行中維護(hù)需求越來(lái)越頻繁,優(yōu)化核心實(shí)現(xiàn),提高ATMP設(shè)備的數(shù)據(jù)吞吐效率是業(yè)界的難點(diǎn)。
筆者曾在山東IT聯(lián)盟進(jìn)行ATM業(yè)務(wù)聯(lián)調(diào),面對(duì)多家ATM廠商及各種類(lèi)型銀行,業(yè)務(wù)需求層出不窮,從ATMP技術(shù)層面上說(shuō),就是對(duì)各種內(nèi)部域的需求非常多樣化。本文提出的基于multi-index的緩存機(jī)制,改進(jìn)了并發(fā)數(shù)據(jù)的存儲(chǔ)和關(guān)聯(lián)應(yīng)用,從而實(shí)現(xiàn)了吞吐效率的提高和業(yè)務(wù)靈活性的增強(qiáng)。Multi-index支持多級(jí)索引,提供類(lèi)似于STL容器或SQL語(yǔ)句的操作接口,支持多個(gè)條件查找、范圍篩選、實(shí)時(shí)更新,同時(shí)支持各種類(lèi)型的字段。本文以ATMP中沖正業(yè)務(wù)的實(shí)現(xiàn)為原型,在分析緩存機(jī)制并設(shè)計(jì)ATMP緩存結(jié)構(gòu)的基礎(chǔ)上,篩選索引字段,利用multi-index建立沖正數(shù)據(jù)表,結(jié)合swack業(yè)務(wù)仿真工具和LoadRunner進(jìn)行了壓力和穩(wěn)定性測(cè)試,最后對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行了分析,驗(yàn)證了性能的提升。
2 ATMP中緩存設(shè)計(jì)
2.1 整體框架
在物理布局上,ATMP整體軟件模塊如圖1所示。
系統(tǒng)主體從邏輯上劃分為接入層、數(shù)據(jù)處理層和業(yè)務(wù)控制層。接入層分為網(wǎng)絡(luò)通信層、報(bào)文解析層和預(yù)處理層,其中網(wǎng)絡(luò)通訊層全權(quán)負(fù)責(zé)物理網(wǎng)絡(luò)上的數(shù)據(jù)包傳輸,即按網(wǎng)絡(luò)協(xié)議(TCP/IP、并口、串口、USB……)接收或發(fā)送數(shù)據(jù);報(bào)文解析層則按通訊接口定義的數(shù)據(jù)報(bào)文協(xié)議組織或分解系統(tǒng)外部報(bào)文;預(yù)處理層根據(jù)各渠道業(yè)務(wù)特性對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,并負(fù)責(zé)系統(tǒng)外部報(bào)文和系統(tǒng)內(nèi)部報(bào)文之間的轉(zhuǎn)換。數(shù)據(jù)處理層解決業(yè)務(wù)數(shù)據(jù)的路由問(wèn)題,在接入層和業(yè)務(wù)控制層之間搭起承上啟下的數(shù)據(jù)橋梁。業(yè)務(wù)控制層根據(jù)預(yù)先設(shè)定的各種業(yè)務(wù)處理流程來(lái)控制每筆具體業(yè)務(wù)的處理,保證業(yè)務(wù)的完整性和準(zhǔn)確性。
沖正模塊的作用是存儲(chǔ)轉(zhuǎn)發(fā)交易,即當(dāng)某個(gè)支付渠道網(wǎng)絡(luò)有問(wèn)題,或其他原因?qū)е聼o(wú)法交易,該模塊負(fù)責(zé)把暫時(shí)無(wú)法交易的交易保存到?jīng)_正緩存表,通過(guò)配置處理方式,實(shí)現(xiàn)下次實(shí)時(shí)交易。ATMP緩存需求主要分為三部分:
1)沖正緩存表
ATMP系統(tǒng)為了提高數(shù)據(jù)查找速度,需要采用類(lèi)似于數(shù)據(jù)庫(kù)的方式,創(chuàng)建沖正內(nèi)存數(shù)據(jù)庫(kù),用于快速處理沖正,并且通過(guò)配置文件方便調(diào)整高速?zèng)_正表的數(shù)據(jù)大小。沖正緩存表的大小可以通過(guò)XML文件來(lái)設(shè)置,這個(gè)設(shè)置可以在停止系統(tǒng)后進(jìn)行修改。停止時(shí)系統(tǒng)會(huì)將緩存表以文件存儲(chǔ)到磁盤(pán)上,進(jìn)程啟動(dòng)時(shí)加載到內(nèi)存中,并以輔助程序定時(shí)清理緩存數(shù)據(jù)。
2)交易數(shù)據(jù)關(guān)聯(lián)表
交易數(shù)據(jù)關(guān)聯(lián)表主要存放內(nèi)部域,供其他處理模塊使用。另外,對(duì)于ATM渠道、POS渠道、VISA、MC、銀聯(lián)等渠道提供的PINkey,MACKey,MasterKey等密鑰信息,通過(guò)渠道索引,終端編號(hào)等標(biāo)識(shí)也存放到關(guān)聯(lián)表中。
3)交易路由表
一個(gè)原始的請(qǐng)求交易,通過(guò)TCP/IP協(xié)議發(fā)送到ATMP實(shí)時(shí)交易處理渠道之后,實(shí)時(shí)交易處理渠道進(jìn)行解包,預(yù)處理等動(dòng)作,生成系統(tǒng)流水號(hào)。ATMP把該唯一流水,及解包后的信息,以流水號(hào)為索引,存放到交易數(shù)據(jù)關(guān)聯(lián)表中。同時(shí)把該流水插入到交易路由表中,按照路由配置規(guī)則,發(fā)送到相應(yīng)的處理數(shù)據(jù)模塊。對(duì)應(yīng)的數(shù)據(jù)處理模塊根據(jù)接收到的索引號(hào),從交易數(shù)據(jù)關(guān)聯(lián)表中取出該對(duì)應(yīng)的處理數(shù)據(jù),進(jìn)行處理。再發(fā)給下一個(gè)處理模塊等,直至該交易處理結(jié)束。
ATMP緩存數(shù)據(jù)主要來(lái)源于網(wǎng)絡(luò),其網(wǎng)絡(luò)通信部分一般是采用高性能的網(wǎng)絡(luò)框架如ACE,Boost Asio等來(lái)收發(fā)實(shí)時(shí)交易數(shù)據(jù)包。作者曾對(duì)Asio并發(fā)性能進(jìn)行過(guò)測(cè)試,每秒接收并轉(zhuǎn)發(fā)的數(shù)據(jù)包超過(guò)14000個(gè),并且能成功插入并更新到multi-index緩存表中。
2.2 緩存的索引選取
在數(shù)據(jù)的關(guān)聯(lián)應(yīng)用中,索引關(guān)鍵字的選取非常重要。索引效率的高低,將直接影響數(shù)據(jù)的響應(yīng)速度及吞吐量。獲取索引關(guān)鍵字的方法有很多,如矩陣法①,定義法等。本文以屬性特征分析法②來(lái)選取緩存中的索引字段域。以下為該基本理論的數(shù)學(xué)推導(dǎo)。
給定一個(gè)關(guān)系模式R(U,F(xiàn)),U={A1,A2,…,A0},F(xiàn) 是R的函數(shù)依賴(lài)集,那么,可以將屬性分為如下四類(lèi):
L: 僅出現(xiàn)在函數(shù)依賴(lài)集F左部的屬性;
R: 僅出現(xiàn)在函數(shù)依賴(lài)集F右部的屬性;
LR: 在函數(shù)依賴(lài)集F左右部都出現(xiàn)的屬性;
NLR: 在函數(shù)依賴(lài)集F左右部都未出現(xiàn)的屬性。
根據(jù)候選碼的特征,有關(guān)系模式R(U,F(xiàn)),X?U,進(jìn)而可以得出如下結(jié)論:
(1) 若X是L類(lèi)屬性,則X必為R的任一候選碼的成員。如果有XF+=U,則X必為R的唯一候選碼。如果XF+ ≠U,則缺什么屬性就補(bǔ)什么屬性。
(2) 若X是R類(lèi)屬性,則X必不是R的任一候選碼的成員。
(3) 若X是NLR類(lèi)屬性,則X必是R的任一候選碼的成員。
(4) 若X是L類(lèi)和NLR類(lèi)屬性組成的屬性集,且XF+=U,則X必是R的唯一候選碼。
(5) 若X是LR類(lèi)屬性,則情況比較復(fù)雜,可綜合以上情況分析。
如2.1中描述,三張緩存表中涉及數(shù)據(jù)更新操作比較頻繁的是沖正交易表。其核心內(nèi)部域字段主要有:
結(jié)合屬性分析法,很顯然,只有以下四對(duì)域可以作為索引關(guān)鍵字,{2,3},{2,4},{2,39},{2,32}。在本次實(shí)現(xiàn)中,我們將選取{2,39}即主賬號(hào)和響應(yīng)碼作為沖正緩存表的索引域。
3 基于緩存表的沖正實(shí)現(xiàn)
沖正分為主動(dòng)沖正和被動(dòng)沖正兩種。取款交易發(fā)送到后臺(tái),如果在規(guī)定的時(shí)間內(nèi),沒(méi)有收到請(qǐng)求或者取款交易后臺(tái)響應(yīng)成功而沒(méi)有向ATMC轉(zhuǎn)發(fā)失敗時(shí),會(huì)引發(fā)主動(dòng)沖正。當(dāng)ATMC 在接收到ATMP的成功響應(yīng),但出鈔或其他原因?qū)е鲁挚ㄈ藳](méi)有取得鈔票或ATMC在規(guī)定的時(shí)間內(nèi)沒(méi)有接收到ATMP的響應(yīng),引發(fā)被動(dòng)沖正。
在主動(dòng)沖正時(shí),各ATMC用戶(hù)可能需要返回交易失敗的某些內(nèi)部域,比如交易流水號(hào),可以通過(guò)狀態(tài)函數(shù)緩存到?jīng)_正交易表中。沖正交易表提供類(lèi)似SQL簡(jiǎn)單查詢(xún)、修改、更新功能,可以為管理控制平臺(tái)提供部分實(shí)時(shí)數(shù)據(jù)請(qǐng)求,減少讀取后臺(tái)數(shù)據(jù)庫(kù)的需求。ATMP沖正緩存業(yè)務(wù)流程大致如下:
在程序?qū)崿F(xiàn)上,沖正交易表主要是利用multi-index建立二級(jí)索引。ATMC端可以通過(guò)主賬號(hào)進(jìn)行索引,ATMV端可以通過(guò)響應(yīng)碼進(jìn)行索引。當(dāng)ATMP收到一筆取款交易業(yè)務(wù),保存各內(nèi)部域值到表中;當(dāng)ATMP收到ATMC或ATMV的請(qǐng)求時(shí),通過(guò)multi-index建立的快速索引接口如find,insert,replace,update等獲取并響應(yīng)。
緩存的靈活性體現(xiàn)在將狀態(tài)函數(shù)指針以字段形式關(guān)聯(lián)到路由信息表中,業(yè)務(wù)的變更維護(hù)通過(guò)更新字段值即可,如新增ATMC取款抽獎(jiǎng)活動(dòng),只要將該活動(dòng)的狀態(tài)函數(shù)指針地址以記錄的形式插入到路由信息表中,同時(shí)通過(guò)在該表中建立業(yè)務(wù)流水號(hào)索引,便于頻繁調(diào)用和更新。
4 實(shí)驗(yàn)測(cè)試及分析
本節(jié)利用LoadRuner對(duì)該緩存的性能和穩(wěn)定性進(jìn)行了壓力測(cè)試。ATMC和后臺(tái)主機(jī)由Swack模擬實(shí)現(xiàn)。由于相關(guān)聯(lián)的模塊比較多,本次系統(tǒng)測(cè)試側(cè)重檢驗(yàn)緩存模塊的穩(wěn)定性和性能。
系統(tǒng)經(jīng)過(guò)7小時(shí)的壓力測(cè)試后,結(jié)果如下面三個(gè)圖所示。圖4顯示了單筆交易的平均響應(yīng)時(shí)間,在LoadRunner初始化虛擬用戶(hù)和任務(wù)的過(guò)程中,每單交易的響應(yīng)時(shí)間逐漸趨于穩(wěn)定。圖5表明了成功啟動(dòng)后的虛擬交易用戶(hù)數(shù)恒定在設(shè)置的10,沒(méi)有中途異常退出的情況。圖6中的交易吞吐流量隨著單位時(shí)間內(nèi)并發(fā)交易請(qǐng)求數(shù)的穩(wěn)定而逐漸平穩(wěn),顯示系統(tǒng)服務(wù)持續(xù)能力強(qiáng)。
本次測(cè)試選擇了10個(gè)虛擬用戶(hù),通過(guò)壓力測(cè)試腳本模擬取款和取款沖正兩個(gè)交易動(dòng)作。測(cè)試時(shí)為減少腳本的復(fù)雜度和針對(duì)性,屏蔽了MAC校驗(yàn),PINDATA校驗(yàn)和IP校驗(yàn)等動(dòng)作。模擬交易在平均響應(yīng)時(shí)間方面維持在0.5秒左右,平均每秒處理的交易量為800筆左右,相比目前國(guó)內(nèi)主流ATMP廠家的系統(tǒng)性能有一定的優(yōu)越性。
5 結(jié)束語(yǔ)
本文從方便數(shù)據(jù)關(guān)聯(lián)查找、提高ATMP內(nèi)部域使用靈活度的角度出發(fā),借助多級(jí)索引的理念設(shè)計(jì),實(shí)現(xiàn)了沖正交易表、交易數(shù)據(jù)關(guān)聯(lián)表和交易路由表;對(duì)于數(shù)據(jù)請(qǐng)求比較頻繁的沖正交易信息,利用multi-index多級(jí)索引保存在內(nèi)存中,提高了并發(fā)情況下ATM系統(tǒng)的處理性能。經(jīng)壓力測(cè)試,系統(tǒng)運(yùn)行穩(wěn)定,魯棒性高。由于ATMP涉及內(nèi)部域廣,業(yè)務(wù)發(fā)展的速度快,本文下一步還需要進(jìn)行更深一步的開(kāi)發(fā)與整合。
注釋?zhuān)?/p>
①http://dl.acm.org/citation.cfm?id=1686412
②http://csc.lsu.edu/~jianhua/fd_slide2_09.pdf
參考文獻(xiàn):
[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.