7 X 24小時(shí) 不間斷運(yùn)行的核心系統(tǒng)設(shè)計(jì)
普通大眾都覺得現(xiàn)在的互聯(lián)網(wǎng)系統(tǒng)都是全天候待機(jī)服務(wù)的掰茶,從來不休息暇藏。其實(shí),在銀行的核心系統(tǒng)上做一筆交易濒蒋,動(dòng)軋更新幾百張表都是有可能的盐碱,那么每筆交易都去這么更新,以現(xiàn)行的計(jì)算機(jī)處理能力來說沪伙,要面對海量的客戶同時(shí)交易也是很不現(xiàn)實(shí)的瓮顽。
那么,如何做到核心系統(tǒng)一直在線围橡,保證交易不中斷暖混,又能滿足交易需要更新這么多表和處理的需求呢?
答案是翁授,“聯(lián)機(jī)交易+批量任務(wù)” 組合方式拣播,來解決這個(gè)難題。其實(shí)黔漂,不止是核心系統(tǒng)诫尽,只要是有類似需求的系統(tǒng),都會(huì)考慮用這種組合方式提供服務(wù)支持炬守。
主要設(shè)計(jì)思想是牧嫉,比如核心的聯(lián)機(jī)交易只負(fù)責(zé)記錄和更新當(dāng)筆交易狀態(tài)和交易的賬戶余額,對于如會(huì)計(jì)計(jì)提存款/貸款利息减途、計(jì)提費(fèi)用酣藻、報(bào)表等每日或月末進(jìn)行的處理采用日終批量任務(wù)來完成。
其他系統(tǒng)鳍置,也可將非必要實(shí)時(shí)的處理用批量任務(wù)進(jìn)行辽剧。
例如:
以下是典型的銀行系統(tǒng)日終批量由三步組成:日切(Cut Off)、日終批量(End Of Day)税产、 日初(Begin Of Day)怕轿。
說明:日初批量(BOD)開啟一個(gè)銀行的邏輯處理日。如:定期存款到期處理辟拷、 常設(shè)指令執(zhí)行撞羽。日切(Cutoff)標(biāo)志一個(gè)邏輯日的日切。將所有聯(lián)機(jī)交付渠道的交易日志合并為一個(gè),用于批處理衫冻。同時(shí)為下一工作日創(chuàng)建新的日志诀紊。 日終批量(EOD)標(biāo)記一個(gè)邏輯日的結(jié)束。處理交易日當(dāng)天完成的交易隅俘。利息處理,當(dāng)日在線交易過帳邻奠。這里 EOD 包括了月末(EOM)笤喳、季末(EOQ)、 年末(EOY),如在月末那一天的 EOD 就是 EOM碌宴。
具體實(shí)現(xiàn)方式:
例如:
雙余額方式:
為了能使聯(lián)機(jī)業(yè)務(wù)能夠 24 小時(shí)不間斷,就要求聯(lián)機(jī)業(yè)務(wù)與批處理能夠同時(shí)并行進(jìn)行,為此采用雙日期杀狡、雙余額的分戶帳設(shè)計(jì)。
雙日期分別設(shè)為‘最后交易日’和‘上次交易日’;雙余額分別設(shè)置為 ‘帳戶余額’和‘上次帳戶余額’及與余額有關(guān)的‘余額方向’和‘上次余額方向’唧喉。
系統(tǒng)的交易日期在系統(tǒng)中具有唯一性,它保存在系統(tǒng)的日期表中捣卤。
前臺(tái)顯示的日期來源于主機(jī)系統(tǒng) 的日期表(即交易后由后臺(tái)返回的日期)。如果后臺(tái)主機(jī)日期表的日期發(fā)生變更,聯(lián)機(jī)交易的日期也同時(shí)改變八孝。
換日后進(jìn)行聯(lián)機(jī)記帳交易時(shí),首先要檢查帳戶的‘最后交易日’與‘當(dāng)前交易日’是否相同,如果 不同,說明該帳戶第一次更變余額,此時(shí)要將‘帳戶余額’放入‘上日余額’,‘余額方向’放入‘上 日余額方向’,同時(shí),‘最后交易日’更改為此‘當(dāng)前交易日’董朝。
換日后進(jìn)行批處理時(shí),如果要進(jìn)行總分核對等與分戶余額有關(guān)的處理時(shí),首先要檢查‘最后交易日’ 與‘當(dāng)前交易日’是否相同,如果相同,說明換日后進(jìn)行此批處理過程前,此分戶已經(jīng)發(fā)生過記帳 交易,它的‘帳戶余額’已經(jīng)發(fā)生了變化,這時(shí)就要用‘上日余額’進(jìn)行核對或統(tǒng)計(jì)。
單表雙余額與雙表方式:
核心系統(tǒng)在夜間進(jìn)行業(yè)務(wù)批量處理的時(shí)候干跛,如計(jì)提結(jié)息需求攘滩,報(bào)表需求等杉畜,這些業(yè)務(wù)批量處理需要按賬戶當(dāng)日日終余額(或其他數(shù)據(jù))進(jìn)行計(jì)算,故需要保持這些數(shù)據(jù)的一定靜止?fàn)顟B(tài),而夜間聯(lián)機(jī)交易需要更新賬戶余額蛉艾,在沒有7×24實(shí)現(xiàn)機(jī)制前丈钙,銀行都需要在批量運(yùn)行時(shí)間段停止夜間的聯(lián)機(jī)交易陈惰,而在批量基本運(yùn)行結(jié)束后再次開始聯(lián)機(jī)交易的對外服務(wù)疏咐。一般批量處理與聯(lián)機(jī)處理的沖突區(qū)就在賬戶余額,解決批量用賬戶日終余額與聯(lián)機(jī)用賬戶實(shí)時(shí)余額的存儲(chǔ)與使用問題阐肤,即可很大程度上實(shí)現(xiàn)7×24業(yè)務(wù)服務(wù)凫佛。
實(shí)現(xiàn)7x24服務(wù),最關(guān)鍵的要點(diǎn)在于保證兩份數(shù)據(jù)的準(zhǔn)確并存:
- 動(dòng)態(tài)實(shí)時(shí)數(shù)據(jù)(實(shí)時(shí)余額):主要是動(dòng)賬及日間查詢交易使用
- 日切點(diǎn)的靜態(tài)數(shù)據(jù)(上日余額):主要用于批處理:比如計(jì)提孕惜、結(jié)息愧薛、總分核對、向外圍(尤其是財(cái)管衫画、管會(huì))供數(shù)等毫炉。
目前各廠商主要使用的方案有以下幾種:
- 單表雙余額
- 雙表(雙表又分兩種:臨時(shí)表為分戶臨時(shí)表或是流水臨時(shí)表)
1. 雙余額動(dòng)賬更新:
分戶賬上設(shè)置余額、上日余額削罩、最后交易日期瞄勾。根據(jù)以上字段來實(shí)現(xiàn)當(dāng)前余額、上日余額的讀取和更新弥激。
僅在動(dòng)賬交易發(fā)生時(shí)才可能更新上日余額进陡,即如果該賬戶長期無動(dòng)賬,在此期間將不用更新上日余額(其實(shí)此時(shí)的“上日余額”字段從名稱上來看與實(shí)際是不符的)
1.1動(dòng)賬處理:當(dāng)日第一筆交易更新上日余額秆撮、最后交易日期。
1.2獲取上日余額處理
2. 雙余額每日更新
分戶賬上設(shè)置余額换况、上日余額职辨、最后交易日期盗蟆。根據(jù)以上字段來實(shí)現(xiàn)當(dāng)前余額、上日余額的讀取和更新舒裤。與“雙余額動(dòng)賬更新”方案不同的是喳资,系統(tǒng)每天都會(huì)更新上日余額及最后交易日期。(其實(shí)此時(shí)的“最后交易日期”字段從名稱來看與實(shí)際不一定相符腾供。)
2.1日終批量刷新上日余額
取上日余額的場景都在日終仆邓,因此在日終切日后一開始就直接批量刷新上日余額,便于后續(xù)讀取及供數(shù)伴鳖。為避免長時(shí)間鎖表节值,該批量任務(wù)逐筆處理。
對于一筆分戶賬榜聂,
IF 最后交易日期 < 會(huì)計(jì)日期
UPDATE 分戶賬 SET 上日余額=當(dāng)前余額搞疗,最后交易日期=會(huì)計(jì)日期
2.2動(dòng)賬處理:切日后,日終批量刷新需要一段時(shí)間须肆,為確保在此期間的聯(lián)機(jī)交易正常對外服務(wù)匿乃,動(dòng)賬時(shí)仍采用以下處理。當(dāng)日第一筆交易更新上日余額豌汇、最后交易日期幢炸。
聯(lián)機(jī)交易與日終批量更新上日余額有極小的可能會(huì)出現(xiàn)沖突(同時(shí)更新同一賬戶)。如果發(fā)生,解決如下:
如果批量鎖表拒贱,聯(lián)機(jī)失敗宛徊,交易重做將成功。
如果聯(lián)機(jī)鎖表柜思,批量失敗岩调,批量重新從斷點(diǎn)重跑。
2.3獲取上日余額處理
取上日余額的情景都在日終刷新之后赡盘,因此此時(shí)取上日余額直接取分戶賬中的上日余額号枕。
3. 雙表
系統(tǒng)狀態(tài)
公共系統(tǒng)控制參數(shù)中的系統(tǒng)狀態(tài)分為:
N:日間運(yùn)行狀態(tài)(normal)
C:日切運(yùn)行狀態(tài)(cutoff)
A:追帳運(yùn)行狀態(tài)(append)
S:系統(tǒng)關(guān)閉(shutdown)
系統(tǒng)的C,A陨享,N狀態(tài)是系統(tǒng)日終處理時(shí)進(jìn)行的狀態(tài)切換葱淳。
系統(tǒng)關(guān)閉
核心業(yè)務(wù)系統(tǒng)處于關(guān)閉時(shí),禁止所以業(yè)務(wù)運(yùn)行抛姑。此狀態(tài)在出現(xiàn)特殊情況時(shí)赞厕。
系統(tǒng)日間運(yùn)行狀態(tài)
系統(tǒng)做完日終批量處理后,狀態(tài)未日間運(yùn)行狀態(tài)定硝,此時(shí)所有的交易實(shí)時(shí)修改分戶帳的余額皿桑。
系統(tǒng)日切狀態(tài)
系統(tǒng)日終操作在做完當(dāng)天的自動(dòng)轉(zhuǎn)存等帳務(wù)處理后,在系統(tǒng)入總帳前,將系統(tǒng)的狀態(tài)改為日切狀態(tài)诲侮。在該狀態(tài)下的所有交易镀虐,不修改分戶帳的余額,其發(fā)生額寫入影子分戶沟绪。保持分戶帳余額不變刮便,是為了機(jī)構(gòu)入總帳時(shí)進(jìn)行總分平衡的檢查。
系統(tǒng)追帳狀態(tài)
系統(tǒng)日終入機(jī)構(gòu)總帳結(jié)束后绽慈,系統(tǒng)狀態(tài)改為追帳恨旱。在這個(gè)狀態(tài)下的所有交易,實(shí)時(shí)修改分戶帳余額坝疼。日終處理的追帳交易搜贤,對影子分戶里帳戶的發(fā)生額進(jìn)行分戶帳余額的修改。在所有分戶追帳完成之后裙士,系統(tǒng)狀態(tài)改為日間運(yùn)行狀態(tài)入客。
- 系統(tǒng)只要不是運(yùn)行在日終批處理狀態(tài)(CUTOFF狀態(tài)),也就是系統(tǒng)運(yùn)行在正常狀態(tài)(NORMAL狀態(tài))或追帳狀態(tài)(APPEND狀態(tài)),帳務(wù)處理API可修改分戶帳余額腿椎;
- 系統(tǒng)只要是運(yùn)行在日終批處理狀態(tài)(CUTOFF狀態(tài))桌硫,記帳API就不能直接更改分戶帳余額,而只能更改影子帳戶余額啃炸。注意:在日終批處理狀態(tài)下,任何聯(lián)機(jī)交易都可能發(fā)生铆隘,所以開戶程序在寫分戶余額時(shí),只能將余額記為0,而真正的余額必須記入影子帳戶中;同樣南用,銷戶時(shí)膀钠,不能將分戶余額記為0,而必須將發(fā)生額(也就是余額)記入影子帳戶中裹虫。沖正交易的處理相同.
- 系統(tǒng)只要不是運(yùn)行在N狀態(tài)(正常狀態(tài))肿嘲,計(jì)算帳戶可用余額時(shí),必須將影子帳戶中的余額和分戶帳中的余額一起合并計(jì)算筑公。
- 由于日切后雳窟,系統(tǒng)進(jìn)入下一個(gè)帳務(wù)周期,所以帳務(wù)處理流水(如:分戶帳明細(xì)匣屡,分錄流水封救,子交易流水)中均記錄了帳務(wù)日期,因而不會(huì)和前一帳務(wù)日期相混淆捣作。在備份這些庫表時(shí)誉结,只要根據(jù)帳務(wù)日期處理即可。
- 任何帳戶券躁,包括客戶帳惩坑,內(nèi)部帳掉盅,處理方法是一樣的。
- 由后臺(tái)主機(jī)按照交易來確定哪些交易允許在日終期間可以開通以舒。
- 如果柜臺(tái)開通24小時(shí)業(yè)務(wù)怔接,需要考慮柜員及網(wǎng)點(diǎn)軋帳交易的支持,業(yè)務(wù)需考慮傳票裝訂與柜員軋帳的模式稀轨。
數(shù)據(jù)庫表設(shè)計(jì)上,除分戶賬外岸军,新增一張影子分戶表奋刽。
系統(tǒng)做完日終批量處理后,狀為日間運(yùn)行狀態(tài)艰赞,此時(shí)所有的交易實(shí)時(shí)修改分戶帳的余額佣谐。在日切狀態(tài)下的所有交易,不修改分戶帳的余額方妖,其發(fā)生額寫入影子分戶狭魂。保持分戶帳余額不變,用于總分平衡檢查等日終取上日余額党觅。在追賬狀態(tài)下的所有交易雌澄,實(shí)時(shí)修改分戶帳余額。日終處理的追帳交易杯瞻,根據(jù)影子分戶里帳戶的發(fā)生額進(jìn)行分戶帳余額的修改镐牺。在所有分戶追帳完成之后,系統(tǒng)狀態(tài)改為日間運(yùn)行狀態(tài)魁莉。
雙表追賬 舉例——活期存款
核心系統(tǒng)為24小時(shí)運(yùn)行的系統(tǒng),總賬及分戶賬的核對是賬務(wù)處理時(shí)需要重點(diǎn)考慮的問題,在核心系統(tǒng)中,每個(gè)營業(yè)日分為TO睬涧、T1、T2旗唁、TN畦浓、TC五個(gè)時(shí)段,五個(gè)時(shí)段從模式上分為online和offline兩種。從T2開始到TN結(jié)束為offline模式;從TC開始經(jīng)TO到次日T1結(jié)束為online模式检疫。為實(shí)現(xiàn)總賬及分戶賬數(shù)據(jù)的核對,需保證總賬數(shù)據(jù)有一天的靜止?fàn)顟B(tài),從offline的模式開始,連線交易暫時(shí)只記客戶賬而不記會(huì)計(jì)賬,在offline模式結(jié)束時(shí)進(jìn)行追賬的處理讶请。在online模式時(shí),賬務(wù)性交易使用的流水檔案為Log0,同時(shí)登記客戶賬與會(huì)計(jì)賬:24小時(shí)換日,將賬務(wù)性交易的流水檔案切換至Log1,只登記客戶賬而不記會(huì)計(jì)賬〉缫ィ活期為例,24小時(shí)交易實(shí)現(xiàn)如下:
如圖3-6,在T1結(jié)束T2開始時(shí),批處理將CMICTDAT設(shè)置為OFFLINE模式秽梅。在OFFLINE時(shí)段,核心系統(tǒng)根據(jù)交易屬性對交易進(jìn)行是否支持24小時(shí)模式的判斷,如果不支持則交易失敗。在offline時(shí)段,如果交易支持24小時(shí)模式,交易在更新活期主表(SAACNACN)化同時(shí)需要通過調(diào)用GCXBATMP程序?qū)⒏虑暗挠囝~登記到臨時(shí)表CMTMPTMP中剿牺。CMTMPTMP每天在T1時(shí)段清空,在OFFLINE時(shí)該帳戶發(fā)生的第一筆交易才會(huì)登記一條記錄,W保留交易發(fā)生前的余額參加總分核對企垦。對于24小時(shí)交易,平臺(tái)將化務(wù)性交易的流水檔案切換至Log只記客戶帳而不記會(huì)計(jì)帳(包括科目CMACAACA和內(nèi)部帳GLACAACA)。在TC時(shí)段即ONLINE模式時(shí),通過CENTER CUT將LOG1中的流水追加到LOG0中,這稱為24小時(shí)追帳晒来。追化時(shí),不記客戶帳,而記會(huì)計(jì)帳(包括科目CMACAACA和內(nèi)部化GLACAACA)钞诡。總分核對時(shí),需要以臨時(shí)檔CMTMPTMP中記錄的余額為準(zhǔn),如果CMTMPTMP中不存在,才以活期賬戶表中的余額為準(zhǔn)。這一設(shè)計(jì)方式同時(shí)保證了客戶賬戶余額的實(shí)時(shí)更新,也實(shí)現(xiàn)了會(huì)計(jì)賬余額的相對靜止,完成總賬及分戶賬余額的核對荧降。