在客戶/伺服器結構的聯機交易處理系統中,一筆交易至少包含如下圖所示的四個過程:①請求傳輸過程;②服務端交易處理過程;③應答傳輸過程;④客戶端處理應答過程。
圖表 1 交易的基本處理過程
由於網路傳輸的不可靠性,必然有"③應答傳輸過程" 失敗的情況。在這種情況下,就產生了服務端與客戶端交易狀態的不一致性問題:在服務端,該筆交易已處理或完成;在客戶端,由於沒有收到應答,該筆交易是失敗的。
這種客戶端及服務端的不一致性,會給銀行帶來資金風險和信譽風險。當該筆交易是增加客戶的可用資金時,產生了資金風險,當該筆交易是減小客戶的可用資金時,產生了信譽風險。例如一筆存款交易產生資料不一致時,在服務端,客戶的帳戶餘額已增加,而在櫃檯,該筆業務失敗,存款並末收入,從而造成客戶的餘額虛增,客戶可以通過正常的途徑使用該筆資金,這將造成銀行資金損失。一筆取款交易產生資料不一致時,在主機端,客戶的帳戶餘額已減少,而在櫃檯,該筆業務失敗,客戶並未取到款。如果客戶發現這一情況,將會造成銀行的信譽損失。
二、 沖正與重複辦理方式
鎖方式是將資料的不一致性轉換為資料的不可用性,通過資料的不可用性,消除風險的產生。
鎖方式具體的實現方法是:在②服務端處理過程後,對該操作所涉及的資料加鎖,使它們處於一種不可用的狀態;增加⑤確認傳輸過程和⑥服務端確認處理過程。當客戶端收到應答並處理完畢後,將產生給服務端發乙個確認資訊,當服務端收到確認後,對第②步鎖住的資料進行解鎖。如下圖所示:
圖表 2 鎖方式的處理過程
通過上圖可以看出,在t1~t4 的時間段內,該筆交易所涉及的資料是加鎖的。當③應答傳輸過程失敗時,則不會執行第⑥步的解鎖操作。後續涉及這些資料的交易將由於鎖的存在而不再進行,因此,不會造成銀行的資金損失及信譽損失。
加鎖常用兩種實現方式:對資料庫交易加鎖的資料庫鎖,在應用層對資料加鎖的應用鎖。鎖方式可以根據實際情況決定使用資料庫鎖或應用鎖。
(一)資料庫鎖
資料庫鎖利用關聯式資料庫中提供的交易機制對資料進行加鎖保護。
資料庫操作中,"開始交易(begin work)"和"提交交易(commit work)"之間的操作所涉及的資料將被加鎖。在②服務端交易處理過程中執行"開始交易"操作,在⑥服務端確認處理過程執行commit work操作。這樣從t1至t4之間,資料是被鎖住的。當應答傳輸過程失敗時,相關的資料被鎖住,與這些資料相關的後續業務將由於鎖的存在而無法進行,這樣就不會造成資料不一致的問題。
這種方式避免了風險的產生,程式編寫簡單,易於使用。但是,資料庫的鎖要占用比較大的系統資源;資料被鎖的時間較長,資料庫的交易對資料的鎖範圍較大,沒有針對性。因此,資料庫的鎖對系統支援大規模併發的能力會產生負面影響。過程③和過程⑤的任何一次失敗均會導致交易無法結束,從而也就無法釋放相應的資源及資料,從而影響後續業務的處理。
為了避免出現無法釋放資源的現象,有些系統採用了結束交易的預設機制。當交易超過一定的時間未結束時,則系統根椐約定,自動進行"提交交易"或"回滾交易(rollback)"。這種作法實際上可能造成客戶端與服務端的資料不一致,使用這種方式的系統一般都具有乙個交易中介軟體,由交易中介軟體通過xa介面,執行資料庫的交易開始及交易結束等與交易有關的操作。
(二)應用鎖
應用鎖與資料庫鎖的差別在於,應用鎖方式是在應用程式這一層對資料進行加鎖。例如一筆存款業務,在第②步服務端完成業務處理後,對進行存款的帳戶進行凍結,使其不能發生業務,直到收到客戶端發來的確認後,才對該帳戶解凍。
應用鎖的系統開銷小,鎖的針對性強,系統的併發能力大。但是應用程式設計複雜,程式設計量增加,有時很難確定一筆交易應當鎖住的資料。
三、 tongeasy方案:鎖與自動確認/沖正結合
從銀行業務角度來看,控制風險是首要的,因此乙個方案首先必須實現對風險的有效控制。雖然鎖方式可以有效地控制風險,但這種方式對系統處理能力及效率會有一定的影響,如何將這種方式對系統的影響控制在可以接受的範圍,是解決問題的關鍵所在。
通科技公司的交易中介軟體tongeasy綜合上述幾種方式的優點,提供了一種解決資料一致性問題的方案,即鎖與自動確認/沖正結合的方式:利用鎖方式控制資料一致性問題,利用確認/沖正方式釋放鎖占用的資源。
tongeasy以鎖方式為基礎,增加以第⑦個處理過程:確認/沖正的應答傳輸過程。當服務端接收到客戶端的確認/沖正後,服務端將發回乙個確認/沖正的應答。tongeasy只有在收到確認/沖正的應答後,才認為該筆交易已處理結束,否則將重**確認/沖正。處理過程如下圖所示:
圖表 3 tongeasy的處理過程
當③應答傳輸過程失敗時,tongeasy將產生乙個"沖正確認"發給服務端,服務端收到"沖正確認"後,則進行沖正操作,取消該筆交易的操作。當⑤確認傳輸過程或⑦確認應答傳輸過程失敗時,tongeasy將核對交易結果並按一定的時間間隔重複執行⑤確認傳輸過程,直到過程⑤及⑦均正常完成為止。服務端在進行⑥確認處理過程時,若收到的確認是"正常確認",則對相關資料解除應用鎖;若收到的確認是"沖正確認",則對相關資料解除應用鎖並進行沖正操作。若收到的"確認"已處理過,則直接發回確認應答資訊。
tongeasy方式相對於鎖方式而言,避免了由於單次通訊故障造成資源無法釋放,在解決資料不一致性問題的同時,減少了系統資源占用現象,避免了系統在長時間執行後,由於大量資源無法釋放而造成系統的效能下降。
四、 結束語
沖正方式及重複辦理方式雖然簡單、方便,但卻無法防止風險的產生,無法有效控制風險存在時間。
資料庫鎖及應用鎖的方式可以防止風險的產生,但對系統的執行效率,特別是會影響系統支援大規模併發的能力,在極端的情況下,會影響系統的正常使用。
tongeasy提供的鎖與沖正結合的方式是對鎖機制的一種改進,它不但可以防止風險的產生,同時可以減少由於通訊故障造成的資源占用,不失為一種適合中國國情的解決方法。
資料一致性
資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...
資料一致性
丟失更新 未確定的相關性 不一致的分析和幻想讀 事務a讀取與搜尋條件相匹配的若干行。事務b以插入或刪除行等方式來修改事務a的結果集,然後再提交。幻讀是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,比如這種修改涉及到表中的 全部資料行 同時,第二個事務也修改這個表中的...
資料一致性
資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...