□文/高冬梅 張 莉 劉志凱
(黑龍江財(cái)經(jīng)學(xué)院財(cái)經(jīng)信息工程學(xué)院 黑龍江·哈爾濱)
[提要]針對(duì)分布式金融系統(tǒng)由于多系統(tǒng)交互、異步處理、系統(tǒng)缺陷等問題導(dǎo)致的數(shù)據(jù)錯(cuò)誤,將Al ibaba大數(shù)據(jù)處理平臺(tái)和賬務(wù)理論相結(jié)合,提出離線和準(zhǔn)實(shí)時(shí)數(shù)據(jù)對(duì)賬的方法。通過某金融公司的分布式貸款系統(tǒng)每天700萬條數(shù)據(jù),對(duì)本文提出的對(duì)賬方法進(jìn)行驗(yàn)證。結(jié)果表明:該數(shù)據(jù)對(duì)賬方法能完成金融大數(shù)據(jù)的處理,及時(shí)發(fā)現(xiàn)數(shù)據(jù)質(zhì)量問題,使金融系統(tǒng)資金損失達(dá)到最低。
對(duì)于分布式金融支付工具系統(tǒng),每日資金流入/出筆數(shù)均在幾千萬級(jí)別,這些系統(tǒng)賬務(wù)的資金變動(dòng)和余額是否都如實(shí)準(zhǔn)確地反應(yīng)了每筆交易業(yè)務(wù)的真實(shí)狀態(tài)?是否有過資金損失事件?貸款系統(tǒng)中客戶借款后是否會(huì)有不用還款的情況?利息、費(fèi)用、額度計(jì)算是否正確?賬上的錢是否正確?出于這些疑問,針對(duì)線上數(shù)據(jù)對(duì)賬勢(shì)在必行。
目前,研究人員對(duì)金融大數(shù)據(jù)的對(duì)賬展開很多深入的研究,主要集中在金融大數(shù)據(jù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)、金融風(fēng)險(xiǎn)防范、對(duì)賬理論等方面。在金融大數(shù)據(jù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)方面,文獻(xiàn)應(yīng)用Hadoop、Hive、Spark、MaxCompute等大數(shù)據(jù)相關(guān)技術(shù),對(duì)商業(yè)銀行小微信貸風(fēng)險(xiǎn)管理系統(tǒng)、銀行的財(cái)務(wù)管理系統(tǒng)、云服務(wù)平臺(tái)進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。文獻(xiàn)針對(duì)分布式系統(tǒng)需跨服務(wù)、跨資源相互合作,提出分布式事務(wù)優(yōu)化方案,對(duì)事務(wù)模型進(jìn)行優(yōu)化或應(yīng)用事務(wù)補(bǔ)償機(jī)制,保證事務(wù)最終一致。在金融風(fēng)險(xiǎn)防范方面,文獻(xiàn)提出了中小券商日終清算操作風(fēng)險(xiǎn),對(duì)風(fēng)險(xiǎn)進(jìn)行分析和評(píng)價(jià),保障清算的最后一道防線;文獻(xiàn)提出了銀行對(duì)賬風(fēng)險(xiǎn)管理優(yōu)化方案,優(yōu)化業(yè)務(wù)處理流程、搭建預(yù)警分析平臺(tái)等。在對(duì)賬理論方面,文獻(xiàn)應(yīng)用賬務(wù)中賬證相符、賬賬相符、賬實(shí)相符等賬務(wù)業(yè)務(wù)理論,保障原始憑證到會(huì)計(jì)報(bào)表編制正確無誤;文獻(xiàn)提出事業(yè)單位對(duì)賬思路,做到余額核對(duì)、發(fā)生額核對(duì)、會(huì)計(jì)賬核對(duì)。本文提出將大數(shù)據(jù)處理平臺(tái)和賬務(wù)理論相結(jié)合,對(duì)分布式金融系統(tǒng)的數(shù)據(jù)進(jìn)行對(duì)賬,用來防范數(shù)據(jù)質(zhì)量風(fēng)險(xiǎn),重點(diǎn)研究對(duì)賬方法、對(duì)賬實(shí)現(xiàn),從數(shù)據(jù)處理及時(shí)性、數(shù)據(jù)量、發(fā)現(xiàn)問題的數(shù)量和維護(hù)成本等方面,對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析。
金融數(shù)據(jù)對(duì)賬需要賬證核對(duì)、賬賬核對(duì)、賬實(shí)核對(duì)、賬表核對(duì)。賬證核對(duì),“賬”表示賬務(wù),“證”表示記賬憑證即業(yè)務(wù)單據(jù),是驗(yàn)證每一筆記賬都有據(jù)可依,不多記、不漏記、不錯(cuò)記。賬賬核對(duì),前一個(gè)“賬”表示總賬科目,后一個(gè)“賬”表示分戶賬,即通常所說的賬務(wù)系統(tǒng)中的賬戶。賬實(shí)核對(duì)是對(duì)賬務(wù)數(shù)據(jù)與實(shí)際資產(chǎn)的核對(duì),對(duì)第三方支付機(jī)構(gòu)來說,主要是核對(duì)內(nèi)部賬戶系統(tǒng)中賬戶的余額是否與銀行實(shí)存賬戶余額相等。賬表核對(duì)是總賬報(bào)表間的核對(duì),主要核對(duì)總賬報(bào)表中各個(gè)科目的期初借貸金額加借貸發(fā)生額是否等于借貸方余額、所有科目的借方余額是否等于貸方余額。
按照時(shí)效性,數(shù)據(jù)對(duì)賬分為離線數(shù)據(jù)對(duì)賬和準(zhǔn)實(shí)時(shí)數(shù)據(jù)對(duì)賬。離線數(shù)據(jù)對(duì)賬分為以天為單位的全量數(shù)據(jù)對(duì)賬和小時(shí)級(jí)別增量對(duì)賬。在全量數(shù)據(jù)對(duì)賬中,將線上昨日0點(diǎn)到23點(diǎn)59分59秒產(chǎn)生的數(shù)據(jù)表數(shù)據(jù),在今日凌晨準(zhǔn)時(shí)自動(dòng)開始處理,將處理結(jié)果同步清洗到數(shù)據(jù)倉庫,在大數(shù)據(jù)平臺(tái)部署對(duì)賬規(guī)則進(jìn)行核對(duì);在小時(shí)級(jí)別增量對(duì)賬中,將每天產(chǎn)生的數(shù)據(jù)劃分為24個(gè)分區(qū),當(dāng)前小時(shí)同步上一個(gè)小時(shí)產(chǎn)生的數(shù)據(jù),部署對(duì)賬規(guī)則進(jìn)行核對(duì);在準(zhǔn)實(shí)時(shí)數(shù)據(jù)對(duì)賬中,實(shí)時(shí)攔截運(yùn)行中的程序代碼,部署對(duì)賬規(guī)則進(jìn)行核對(duì)。
MaxCompute平臺(tái)是阿里巴巴集團(tuán)的大數(shù)據(jù)服務(wù)平臺(tái),提供數(shù)萬臺(tái)超大集群,能夠處理EB級(jí)數(shù)據(jù)規(guī)模。同時(shí),該平臺(tái)提供數(shù)據(jù)同步、數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析、任務(wù)調(diào)度和監(jiān)控報(bào)警等功能。開發(fā)人員在用平臺(tái)進(jìn)行數(shù)據(jù)開發(fā)時(shí),采用平臺(tái)提供的IDE,編寫MaxCompute SQL。Max-Compute SQL的語法和HQL語句類似,并提供了字符串函數(shù)、日期函數(shù)等。
(一)離線數(shù)據(jù)對(duì)賬。首先“確定對(duì)賬邏輯”,主要根據(jù)對(duì)賬方法中介紹的“賬證核對(duì)”“賬賬核對(duì)”等理論,確定業(yè)務(wù)系統(tǒng)需要完成哪些對(duì)賬?!熬帉懠罢{(diào)試腳本”“部署對(duì)賬任務(wù)”“配置監(jiān)控及報(bào)警”,主要利用MaxCompute平臺(tái)完成,“問題數(shù)據(jù)處理”報(bào)警后人工處理問題數(shù)據(jù)。以某公司分布式貸款系統(tǒng)為例,賬單系統(tǒng)同步調(diào)用某資產(chǎn)系統(tǒng),某資產(chǎn)系統(tǒng)發(fā)送異步消息給賬務(wù)系統(tǒng)。具體實(shí)現(xiàn)過程如下:首先,確定對(duì)賬邏輯,梳理出該系統(tǒng)要對(duì)賬的邏輯,由于該系統(tǒng)沒有和銀行系統(tǒng)交互,也不是賬務(wù)系統(tǒng),所以對(duì)賬類型只有“賬證核對(duì)”。對(duì)賬關(guān)系用來闡明要與哪些系統(tǒng)對(duì)賬——與該系統(tǒng)上游賬單系統(tǒng)、下游賬務(wù)系統(tǒng)或內(nèi)生即該系統(tǒng)自身內(nèi)部邏輯對(duì)賬。對(duì)賬內(nèi)容主要包括發(fā)生額核對(duì)、余額核對(duì)和自身內(nèi)部關(guān)鍵邏輯核對(duì)。以對(duì)賬內(nèi)容“賬單系統(tǒng)與資產(chǎn)系統(tǒng)當(dāng)日發(fā)生額核對(duì)”為例,其包含的業(yè)務(wù)語義是,客戶貸款XX元,賬單系統(tǒng)入賬XX元,資產(chǎn)系統(tǒng)為客戶記賬XX元,客戶資金賬戶多XX元,機(jī)構(gòu)賬戶少XX元。通過兩個(gè)系統(tǒng)發(fā)生額,對(duì)比賬單系統(tǒng)入賬金額是否等于資產(chǎn)系統(tǒng)客戶資金賬多的金額和機(jī)構(gòu)賬少的金額。其次,編寫及調(diào)試腳本。仍以梳理的對(duì)賬內(nèi)容“賬單系統(tǒng)與資產(chǎn)系統(tǒng)當(dāng)日發(fā)生額對(duì)賬”為例編寫對(duì)賬腳本。向數(shù)據(jù)倉庫人員提交要從線上同步到離線數(shù)據(jù)倉庫的表,完成線上數(shù)據(jù)庫表到離線數(shù)據(jù)倉庫的同步;利用平臺(tái)完成Max-Compute SQL語句的編寫,用于篩選和驗(yàn)證規(guī)則不一致的數(shù)據(jù)。具體邏輯是,用賬單號(hào)將A表全外連接到B表,若A表的入賬金額屬性字段值不等于B表的客戶賬記賬金額或機(jī)構(gòu)賬記賬金額屬性字段值,則篩選出該條記錄。再次,部署對(duì)賬任務(wù)。調(diào)試腳本完成后,配置任務(wù)的依賴關(guān)系、調(diào)度方式,發(fā)布到生成環(huán)境。再次,配置監(jiān)控及報(bào)警。針對(duì)對(duì)賬異常的數(shù)據(jù),發(fā)送郵件、釘釘?shù)认⑼ㄖo開發(fā)人員。最后,問題數(shù)據(jù)處理。對(duì)收到的異常通知數(shù)據(jù),進(jìn)行人工排查。如果是腳本問題誤報(bào),則修正腳本;如果是真正的對(duì)賬異常,則需要排查系統(tǒng)哪個(gè)環(huán)節(jié)出現(xiàn)問題,進(jìn)行系統(tǒng)代碼或流程修復(fù)。要不斷優(yōu)化誤報(bào)問題,避免對(duì)誤報(bào)問題的默認(rèn)許可,使真正的問題被誤報(bào)覆蓋。對(duì)誤報(bào)問題的優(yōu)化,從數(shù)據(jù)倉庫表的產(chǎn)出質(zhì)量、產(chǎn)出效率和跨天或跨小時(shí)數(shù)據(jù)的冗余拉取三方面提高。
(二)準(zhǔn)實(shí)時(shí)數(shù)據(jù)對(duì)賬。針對(duì)離線數(shù)據(jù)對(duì)賬時(shí)效性不高的問題,提出了準(zhǔn)實(shí)時(shí)數(shù)據(jù)對(duì)賬。在不依賴、不修改業(yè)務(wù)系統(tǒng)代碼和日志的前提下,實(shí)時(shí)收集業(yè)務(wù)鏈路的各個(gè)環(huán)節(jié)出入口的數(shù)據(jù)。在應(yīng)用的輸入、輸出請(qǐng)求,如數(shù)據(jù)庫層的DAO操作、返回的結(jié)果、異步發(fā)送的消息上設(shè)置監(jiān)聽器,監(jiān)聽器將收集到的結(jié)果發(fā)送到“數(shù)據(jù)收集和發(fā)送中心”,該中心再將數(shù)據(jù)發(fā)送到“對(duì)賬中心”,該對(duì)賬中心提供模型抽取、規(guī)則編寫、規(guī)則運(yùn)行和準(zhǔn)實(shí)時(shí)對(duì)賬的能力。
針對(duì)不同系統(tǒng)類型,首先設(shè)計(jì)了單系統(tǒng)對(duì)賬模型,該對(duì)賬模型可以針對(duì)單一系統(tǒng)的輸入輸出數(shù)據(jù)設(shè)計(jì)對(duì)賬規(guī)則。假設(shè)有規(guī)則“輸入請(qǐng)求R1”=“輸出結(jié)果R2”,將規(guī)則部署在對(duì)賬中心,如果存在不滿足該規(guī)則的數(shù)據(jù),則為異常數(shù)據(jù)。其次設(shè)計(jì)了多系統(tǒng)對(duì)賬模型,在分布式環(huán)境中,完成一次業(yè)務(wù)需要多個(gè)系統(tǒng)協(xié)作完成,一個(gè)完整鏈路上的多個(gè)系統(tǒng)組成業(yè)務(wù)對(duì)賬模型。假設(shè)有規(guī)則“系統(tǒng)A輸入請(qǐng)求R1.X”=“系統(tǒng)B輸入請(qǐng)求R3.Y”+“系統(tǒng)D輸入請(qǐng)求D1.Z”,部署對(duì)賬規(guī)則,檢測(cè)業(yè)務(wù)是否滿足。
利用上述金融大數(shù)據(jù)對(duì)賬方法,對(duì)線上真實(shí)海量金融數(shù)據(jù)是否符合預(yù)期給出了很好的答案,消除了本文開始提出的利息、費(fèi)用、額度等是否計(jì)算錯(cuò)誤的疑慮。雖然各個(gè)金融類系統(tǒng),在線下環(huán)境都會(huì)進(jìn)行嚴(yán)格的測(cè)試,但在線下環(huán)境無論是手工測(cè)試或自動(dòng)化測(cè)試,其數(shù)據(jù)量和場(chǎng)景都遠(yuǎn)少于線上真實(shí)環(huán)境。大數(shù)據(jù)對(duì)賬作為一種測(cè)試手段的有力補(bǔ)充,能夠發(fā)現(xiàn)在線下很難發(fā)現(xiàn)的一些問題。針對(duì)某公司資產(chǎn)系統(tǒng),進(jìn)行了離線數(shù)據(jù)對(duì)賬和準(zhǔn)實(shí)時(shí)數(shù)據(jù)對(duì)賬,對(duì)賬實(shí)驗(yàn)結(jié)果如下:
(一)發(fā)布過程兼容性處理錯(cuò)誤。全量和增量對(duì)賬發(fā)現(xiàn):由于資產(chǎn)系統(tǒng)是分布式架構(gòu),部署在生產(chǎn)環(huán)境多臺(tái)機(jī)器上,因此發(fā)布過程分批發(fā)布,這樣會(huì)出現(xiàn)新發(fā)布的代碼調(diào)用老服務(wù)和數(shù)據(jù),或老代碼調(diào)用新發(fā)布的服務(wù)和數(shù)據(jù)的情況。因此,系統(tǒng)發(fā)布過程中會(huì)出現(xiàn)兼容性未處理好使貸款后客戶賬單沒有形成和不用還款的問題,造成交易筆數(shù)210筆,總計(jì)損失金額3萬元。經(jīng)過離線對(duì)賬腳本發(fā)現(xiàn)問題后,訂正補(bǔ)充沒有形成的賬單,挽回資金損失。
(二)事務(wù)懸掛。全量對(duì)賬發(fā)現(xiàn):分布式事務(wù)一般分為預(yù)處理和提交兩個(gè)階段,在提交階段,所有系統(tǒng)都要提交成功,如果有一個(gè)系統(tǒng)提交失敗,則一直重試,如重試超過一天,定義為事務(wù)懸掛。此時(shí)需要人工介入排除原因,可能原因有發(fā)送的異步消息延遲導(dǎo)致提交失敗。
(三)貸款五級(jí)分類錯(cuò)誤。全量對(duì)賬發(fā)現(xiàn):依據(jù)借款人的實(shí)際還款能力,按風(fēng)險(xiǎn)等級(jí)分為正常、關(guān)注、次級(jí)、可疑和損失,后三種為不良貸款,由于代碼邏輯錯(cuò)誤,將貸款五級(jí)分類設(shè)置錯(cuò)誤,導(dǎo)致貸款不能真實(shí)反映企業(yè)盈虧狀況、不同分類貸款的催收和風(fēng)險(xiǎn)處理方法等出現(xiàn)差異。因此,需修復(fù)代碼缺陷、修復(fù)線上錯(cuò)誤數(shù)據(jù)。
(四)費(fèi)用計(jì)算錯(cuò)誤、資金賬戶金額錯(cuò)誤、請(qǐng)求時(shí)間和數(shù)據(jù)庫存儲(chǔ)時(shí)間不一致。全量和準(zhǔn)實(shí)時(shí)對(duì)賬發(fā)現(xiàn):由于系統(tǒng)在特殊場(chǎng)景、配置、計(jì)算或存儲(chǔ)數(shù)據(jù)中出錯(cuò),需要修改代碼和數(shù)據(jù)。
三種大數(shù)據(jù)對(duì)賬方法在處理數(shù)據(jù)的及時(shí)性、處理數(shù)據(jù)量、發(fā)如問題數(shù)量和維護(hù)成本四個(gè)方面的對(duì)比如下:
第一,及時(shí)性。全量對(duì)賬,若核對(duì)報(bào)錯(cuò),第二天才能發(fā)現(xiàn)問題數(shù)據(jù);增量對(duì)賬,在1~2個(gè)小時(shí)可以發(fā)現(xiàn)問題數(shù)據(jù);準(zhǔn)實(shí)時(shí)數(shù)據(jù)對(duì)賬,需對(duì)線上數(shù)據(jù)采集和同步,發(fā)現(xiàn)問題在15分鐘內(nèi),時(shí)間效率上最優(yōu)。
第二,數(shù)據(jù)量。離線對(duì)賬可以對(duì)線上一天產(chǎn)生的全量數(shù)據(jù)對(duì)比,實(shí)驗(yàn)中對(duì)某貸款系統(tǒng)單表一天700萬條的數(shù)據(jù)進(jìn)行了對(duì)賬;準(zhǔn)實(shí)時(shí)對(duì)賬,數(shù)據(jù)同步存在性能瓶頸,只能開放部分集群,采樣1%,不能對(duì)數(shù)據(jù)進(jìn)行全量對(duì)賬。
第三,發(fā)現(xiàn)問題數(shù)量。實(shí)驗(yàn)中,全量對(duì)賬方法發(fā)現(xiàn)問題最多為5個(gè),增量對(duì)賬發(fā)現(xiàn)2個(gè),準(zhǔn)實(shí)時(shí)最少為1個(gè)。準(zhǔn)實(shí)時(shí)對(duì)賬,采集到的數(shù)據(jù)量少,所以發(fā)現(xiàn)問題也少;增量對(duì)賬,一些余額類的對(duì)賬需要對(duì)跨時(shí)間段全量數(shù)據(jù)驗(yàn)證,增量數(shù)據(jù)對(duì)賬無法完成,導(dǎo)致發(fā)現(xiàn)的問題較少;全量對(duì)賬,采集到的數(shù)據(jù)量最全,余額類的對(duì)賬功能可以完成,數(shù)據(jù)偏移最少,所以發(fā)現(xiàn)問題最多。
第四,維護(hù)成本。分布式金融系統(tǒng)異步交互,數(shù)據(jù)會(huì)產(chǎn)生偏移、消息延時(shí)大于1小時(shí)的現(xiàn)象,導(dǎo)致增量對(duì)賬誤報(bào)較多,增加人工排查成本。全量數(shù)據(jù)對(duì)賬,數(shù)據(jù)偏移和消息延時(shí)大大減少。準(zhǔn)實(shí)時(shí)對(duì)賬,根據(jù)系統(tǒng)代碼維護(hù)對(duì)賬腳本,受到代碼變更的影響,維護(hù)量適中。
綜上,本文提出的金融大數(shù)據(jù)對(duì)賬方法,可以很好地發(fā)現(xiàn)金融領(lǐng)域的數(shù)據(jù)問題,對(duì)問題數(shù)據(jù)進(jìn)行及時(shí)處理,避免造成資金損失,保障金融系統(tǒng)質(zhì)量,是金融系統(tǒng)可靠性的重要保障。但離線數(shù)據(jù)對(duì)賬和準(zhǔn)實(shí)時(shí)對(duì)賬各有優(yōu)缺點(diǎn),工作中需要相互結(jié)合、相互補(bǔ)充,這增加了開發(fā)人員的工作量、不同對(duì)賬腳本維護(hù)和問題排查的成本,這是下一步工作需要解決的問題。