转载:[银行核心系统] 银行系统数据不一致的解决办法
目前的銀行柜面業(yè)務(wù)處理系統(tǒng),基本都是b/s或c/s架構(gòu)的,柜面系統(tǒng)通過網(wǎng)絡(luò)與前置系統(tǒng)或者核心系統(tǒng)相互通訊。由于網(wǎng)絡(luò)的不可靠性,常常出現(xiàn)傳輸過程中交易數(shù)據(jù)的丟失,造成客戶端與服務(wù)端的交易不完整或數(shù)據(jù)不一致,這樣會對銀行造成相應(yīng)的現(xiàn)成風(fēng)險(xiǎn)和潛在風(fēng)險(xiǎn)。如何控制數(shù)據(jù)的一致性,是目前銀行系統(tǒng)聯(lián)機(jī)事務(wù)交易處理所必須考慮的問題。
一、 導(dǎo)致數(shù)據(jù)不一致的原因
在客戶/服務(wù)器結(jié)構(gòu)的聯(lián)機(jī)交易處理系統(tǒng)中,一筆交易至少包含如下圖所示的四個過程:①請求傳輸過程;②服務(wù)端交易處理過程;③應(yīng)答傳輸過程;④客戶端處理應(yīng)答過程。
由于網(wǎng)絡(luò)傳輸?shù)牟豢煽啃裕厝挥?③應(yīng)答傳輸過程" 失敗的情況。在這種情況下,就產(chǎn)生了服務(wù)端與客戶端交易狀態(tài)的不一致性問題:在服務(wù)端,該筆交易已處理或完成;在客戶端,由于沒有收到應(yīng)答,該筆交易是失敗的。
這種客戶端及服務(wù)端的不一致性,會給銀行帶來資金風(fēng)險(xiǎn)和信譽(yù)風(fēng)險(xiǎn)。當(dāng)該筆交易是增加客戶的可用資金時,產(chǎn)生了資金風(fēng)險(xiǎn),當(dāng)該筆交易是減小客戶的可用資金時,產(chǎn)生了信譽(yù)風(fēng)險(xiǎn)。例如一筆存款交易產(chǎn)生數(shù)據(jù)不一致時,在服務(wù)端,客戶的帳戶余額已增加,而在柜臺,該筆業(yè)務(wù)失敗,存款并末收入,從而造成客戶的余額虛增,客戶可以通過正常的途徑使用該筆資金,這將造成銀行資金損失。一筆取款交易產(chǎn)生數(shù)據(jù)不一致時,在主機(jī)端,客戶的帳戶余額已減少,而在柜臺,該筆業(yè)務(wù)失敗,客戶并未取到款。如果客戶發(fā)現(xiàn)這一情況,將會造成銀行的信譽(yù)損失。
二、 沖正與重復(fù)辦理方式
目前大部分銀行業(yè)務(wù)處理系統(tǒng)采用沖正或重復(fù)辦理的方式,了解決數(shù)據(jù)不一致的問題。這兩種方式的基本思想,都是當(dāng)數(shù)據(jù)不一致性問題發(fā)生后,通過事后附加的干預(yù)過程來進(jìn)行補(bǔ)救。
(一) 沖正方式
沖正方式下,一筆交易以客戶端為準(zhǔn),客戶端完成,該筆交易才完成,客戶端失敗,則該筆交易失敗。當(dāng)應(yīng)答傳輸過程失敗,前端認(rèn)為該筆交易失敗,將產(chǎn)生一筆沖正交易。該筆沖正交易將取消上一筆交易的結(jié)果,從而恢復(fù)客戶端及服務(wù)端的數(shù)據(jù)一致性。
按產(chǎn)生沖正交易的時機(jī),可以分為三種:
1、立即沖正,是在一筆交易超時無應(yīng)答時,立即發(fā)出沖正;
2、定時沖正,是指按固定的時間間隔,發(fā)出沖正交易;
3、當(dāng)一筆交易未成功時,在做下一筆交易時,先自動做一個沖正交易,當(dāng)沖正交易完成后,才執(zhí)行正常交易。目前,POS系統(tǒng)廣泛使用的是下一筆交易沖正的方式。
沖正方式程序控制簡單,適應(yīng)性廣。但這種方式無法確保沖正成功的時間,從而也就無法控制風(fēng)險(xiǎn)存在的時間。一個極端的情況是,通訊故障是由于物理線路中斷造成的,在線路恢復(fù)正常前,沖正交易無法完成,風(fēng)險(xiǎn)將一直存在。
(二)重復(fù)辦理方式
重復(fù)辦理方式下,一筆交易以服務(wù)端為準(zhǔn),服務(wù)端處理成功,無論客戶端是否收到結(jié)果,均認(rèn)為該筆交易成功。當(dāng)應(yīng)答傳輸過程失敗造成客戶端交易失敗,客戶端必須重復(fù)辦理該筆交易,在服務(wù)端,收到重復(fù)的交易請求,若該筆交易已處理,則將上筆交易的結(jié)果作為本次交易的處理結(jié)果返回,若未處理,則按正常交易進(jìn)行處理。
這種方式的優(yōu)點(diǎn)在于控制簡單,易于實(shí)現(xiàn)。局限性基本同沖正方式,即無法控制風(fēng)險(xiǎn)存在的時間。另外,以服務(wù)端為準(zhǔn)的條件使它的使用范圍受到一定的限制。在對公會計(jì)系統(tǒng)中,通常采用重復(fù)辦理的方式。
三、鎖方式
鎖方式是將數(shù)據(jù)的不一致性轉(zhuǎn)換為數(shù)據(jù)的不可用性,通過數(shù)據(jù)的不可用性,消除風(fēng)險(xiǎn)的產(chǎn)生。
鎖方式具體的實(shí)現(xiàn)方法是:在②服務(wù)端處理過程后,對該操作所涉及的數(shù)據(jù)加鎖,使它們處于一種不可用的狀態(tài);增加⑤確認(rèn)傳輸過程和⑥服務(wù)端確認(rèn)處理過程。當(dāng)客戶端收到應(yīng)答并處理完畢后,將產(chǎn)生給服務(wù)端發(fā)一個確認(rèn)信息,當(dāng)服務(wù)端收到確認(rèn)后,對第②步鎖住的數(shù)據(jù)進(jìn)行解鎖。如下圖所示:
通過上圖可以看出,在t1~t4 的時間段內(nèi),該筆交易所涉及的數(shù)據(jù)是加鎖的。當(dāng)③應(yīng)答傳輸過程失敗時,則不會執(zhí)行第⑥步的解鎖操作。后續(xù)涉及這些數(shù)據(jù)的交易將由于鎖的存在而不再進(jìn)行,因此,不會造成銀行的資金損失及信譽(yù)損失。
加鎖常用兩種實(shí)現(xiàn)方式:對數(shù)據(jù)庫交易加鎖的數(shù)據(jù)庫鎖,在應(yīng)用層對數(shù)據(jù)加鎖的應(yīng)用鎖。鎖方式可以根據(jù)實(shí)際情況決定使用數(shù)據(jù)庫鎖或應(yīng)用鎖。
(一)數(shù)據(jù)庫鎖
數(shù)據(jù)庫鎖利用關(guān)系數(shù)據(jù)庫中提供的交易機(jī)制對數(shù)據(jù)進(jìn)行加鎖保護(hù)。
數(shù)據(jù)庫操作中,"開始交易(begin work)"和"提交交易(commit work)"之間的操作所涉及的數(shù)據(jù)將被加鎖。在②服務(wù)端交易處理過程中執(zhí)行"開始交易"操作,在⑥服務(wù)端確認(rèn)處理過程執(zhí)行commit work操作。這樣從t1至t4之間,數(shù)據(jù)是被鎖住的。當(dāng)應(yīng)答傳輸過程失敗時,相關(guān)的數(shù)據(jù)被鎖住,與這些數(shù)據(jù)相關(guān)的后續(xù)業(yè)務(wù)將由于鎖的存在而無法進(jìn)行,這樣就不會造成數(shù)據(jù)不一致的問題。
這種方式避免了風(fēng)險(xiǎn)的產(chǎn)生,程序編寫簡單,易于使用。但是,數(shù)據(jù)庫的鎖要占用比較大的系統(tǒng)資源;數(shù)據(jù)被鎖的時間較長,數(shù)據(jù)庫的交易對數(shù)據(jù)的鎖范圍較大,沒有針對性。因此,數(shù)據(jù)庫的鎖對系統(tǒng)支持大規(guī)模并發(fā)的能力會產(chǎn)生負(fù)面影響。過程③和過程⑤的任何一次失敗均會導(dǎo)致交易無法結(jié)束,從而也就無法釋放相應(yīng)的資源及數(shù)據(jù),從而影響后續(xù)業(yè)務(wù)的處理。
為了避免出現(xiàn)無法釋放資源的現(xiàn)象,有些系統(tǒng)采用了結(jié)束交易的默認(rèn)機(jī)制。當(dāng)交易超過一定的時間未結(jié)束時,則系統(tǒng)根椐約定,自動進(jìn)行"提交交易"或"回滾交易(Rollback)"。這種作法實(shí)際上可能造成客戶端與服務(wù)端的數(shù)據(jù)不一致,使用這種方式的系統(tǒng)一般都具有一個交易中間件,由交易中間件通過XA接口,執(zhí)行數(shù)據(jù)庫的交易開始及交易結(jié)束等與交易有關(guān)的操作。
(二)應(yīng)用鎖
應(yīng)用鎖與數(shù)據(jù)庫鎖的差別在于,應(yīng)用鎖方式是在應(yīng)用程序這一層對數(shù)據(jù)進(jìn)行加鎖。例如一筆存款業(yè)務(wù),在第②步服務(wù)端完成業(yè)務(wù)處理后,對進(jìn)行存款的帳戶進(jìn)行凍結(jié),使其不能發(fā)生業(yè)務(wù),直到收到客戶端發(fā)來的確認(rèn)后,才對該帳戶解凍。
應(yīng)用鎖的系統(tǒng)開銷小,鎖的針對性強(qiáng),系統(tǒng)的并發(fā)能力大。但是應(yīng)用編程復(fù)雜,編程量增加,有時很難確定一筆交易應(yīng)當(dāng)鎖住的數(shù)據(jù)。
三、 TongEASY方案:鎖與自動確認(rèn)/沖正結(jié)合
從銀行業(yè)務(wù)角度來看,控制風(fēng)險(xiǎn)是首要的,因此一個方案首先必須實(shí)現(xiàn)對風(fēng)險(xiǎn)的有效控制。雖然鎖方式可以有效地控制風(fēng)險(xiǎn),但這種方式對系統(tǒng)處理能力及效率會有一定的影響,如何將這種方式對系統(tǒng)的影響控制在可以接受的范圍,是解決問題的關(guān)鍵所在。
通科技公司的交易中間件TongEASY綜合上述幾種方式的優(yōu)點(diǎn),提供了一種解決數(shù)據(jù)一致性問題的方案,即鎖與自動確認(rèn)/沖正結(jié)合的方式:利用鎖方式控制數(shù)據(jù)一致性問題,利用確認(rèn)/沖正方式釋放鎖占用的資源。
TongEASY以鎖方式為基礎(chǔ),增加以第⑦個處理過程:確認(rèn)/沖正的應(yīng)答傳輸過程。當(dāng)服務(wù)端接收到客戶端的確認(rèn)/沖正后,服務(wù)端將發(fā)回一個確認(rèn)/沖正的應(yīng)答。TongEASY只有在收到確認(rèn)/沖正的應(yīng)答后,才認(rèn)為該筆交易已處理結(jié)束,否則將重復(fù)發(fā)確認(rèn)/沖正。處理過程如下圖所示:
當(dāng)③應(yīng)答傳輸過程失敗時,TongEASY將產(chǎn)生一個"沖正確認(rèn)"發(fā)給服務(wù)端,服務(wù)端收到"沖正確認(rèn)"后,則進(jìn)行沖正操作,取消該筆交易的操作。當(dāng)⑤確認(rèn)傳輸過程或⑦確認(rèn)應(yīng)答傳輸過程失敗時,TongEASY將核對交易結(jié)果并按一定的時間間隔重復(fù)執(zhí)行⑤確認(rèn)傳輸過程,直到過程⑤及⑦均正常完成為止。服務(wù)端在進(jìn)行⑥確認(rèn)處理過程時,若收到的確認(rèn)是"正常確認(rèn)",則對相關(guān)數(shù)據(jù)解除應(yīng)用鎖;若收到的確認(rèn)是"沖正確認(rèn)",則對相關(guān)數(shù)據(jù)解除應(yīng)用鎖并進(jìn)行沖正操作。若收到的"確認(rèn)"已處理過,則直接發(fā)回確認(rèn)應(yīng)答信息。
TongEASY方式相對于鎖方式而言,避免了由于單次通訊故障造成資源無法釋放,在解決數(shù)據(jù)不一致性問題的同時,減少了系統(tǒng)資源占用現(xiàn)象,避免了系統(tǒng)在長時間運(yùn)行后,由于大量資源無法釋放而造成系統(tǒng)的性能下降。
四、 總結(jié)
沖正方式及重復(fù)辦理方式雖然簡單、方便,但卻無法防止風(fēng)險(xiǎn)的產(chǎn)生,無法有效控制風(fēng)險(xiǎn)存在時間。
數(shù)據(jù)庫鎖及應(yīng)用鎖的方式可以防止風(fēng)險(xiǎn)的產(chǎn)生,但對系統(tǒng)的運(yùn)行效率,特別是會影響系統(tǒng)支持大規(guī)模并發(fā)的能力,在極端的情況下,會影響系統(tǒng)的正常使用。
TongEASY提供的鎖與沖正結(jié)合的方式是對鎖機(jī)制的一種改進(jìn),它不但可以防止風(fēng)險(xiǎn)的產(chǎn)生,同時可以減少由于通訊故障造成的資源占用,不失為一種適合中國國情的解決方法。
原文章地址:http://blog.sina.com.cn/s/blog_613c373f010108w1.html
總結(jié)
以上是生活随笔為你收集整理的转载:[银行核心系统] 银行系统数据不一致的解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 如何调用redis,php如何调
- 下一篇: iOS 向下取整、向上取整、四舍五入