銀行前置系統(tǒng)

大家好,我是落雨塵,今天我們來聊一聊銀行前置系統(tǒng),還是隨便聊點兒。

作為曾經(jīng)銀行前置系統(tǒng)的全棧型工程師,有一段時間沉浸甚至是沉迷在寫“交易”的快樂中。由于受系統(tǒng)和眼界所限,這里所寫的銀行前置系統(tǒng),更多的是基于中小型商業(yè)銀行的系統(tǒng)架構(gòu)。

我們今天聊的金融前置系統(tǒng),更多是依托銀行的業(yè)務(wù)背景下進(jìn)行描述。

前置系統(tǒng)是什么

所謂前置系統(tǒng),顧名思義,置于前面的平臺系統(tǒng)都可以稱為前置系統(tǒng)。

今天老李為了周轉(zhuǎn)資金,要去找銀行貸款,來到銀行大廳被告知先要進(jìn)行征信查詢,在大廳找到一臺征信查詢機,輸入個人信息點擊查詢,幾秒后老李就在屏幕上看到了自己所有的征信內(nèi)容。

這個查詢機,就是一種前置機,TA部署在各個銀行大廳,后臺通過專線連接著征信中心的后臺系統(tǒng)。指令信息通過銀行系統(tǒng)的處理再經(jīng)過這個前置系統(tǒng)進(jìn)行數(shù)據(jù)傳輸,最終拿到征信中心的數(shù)據(jù)并展示在屏幕上。

快過年了,騙子們也要張羅年貨。這不劉大媽剛被電信詐騙了,她趕緊給自己開戶的銀行打電話,銀行客服進(jìn)行了快速止付的操作后,劉大媽的錢得以被凍結(jié),沒有匯入到騙子的賬戶內(nèi)。

針對電信詐騙,公安部和人民銀行聯(lián)合部署了一套防控系統(tǒng),這套系統(tǒng)同樣擁有前置機,TA部署在各銀行網(wǎng)點,通過金融城域網(wǎng)接入公安部后臺系統(tǒng)。

每天銀行可通過這臺前置機查詢客戶的身份信息是否在電信詐騙的黑名單中;同時公安部每天也會將涉及該銀行的電信詐騙相關(guān)信息推送在這臺前置機上,供銀行查閱處理。

公司會計小張每天都要統(tǒng)計公司賬戶出入賬情況,每天下班前,他都會打開銀行專用的軟件,選擇要查詢的公司賬戶,點擊查詢后,幾秒后就能看到今天該賬戶的進(jìn)出資金明細(xì)。

小張使用的其實就是銀行針對企業(yè)的銀企直聯(lián)的前置接口軟件,這種軟件往往部署在各公司的電腦上,需要u-key的認(rèn)證,通過互聯(lián)網(wǎng)或者專線接入到銀行前置系統(tǒng)。每次公司客戶在軟件操作后,數(shù)據(jù)通過前置接口軟件傳輸?shù)姐y行前置系統(tǒng),最終拿到業(yè)務(wù)數(shù)據(jù)返回到企業(yè)客戶的電腦上。

以上三種場景下,前置系統(tǒng)可以是一臺機器搭載著接口軟件,也可以僅僅是一款軟件安裝在任何一臺電腦上。TA更多的工作是用來連接兩邊系統(tǒng),身份驗證、接收指令、傳輸數(shù)據(jù)...

銀行為什么需要前置系統(tǒng)

傳統(tǒng)銀行系統(tǒng)更像是手動記賬的延續(xù),在系統(tǒng)設(shè)計也是點對點的處理模式,即前臺(柜臺)輸入,后臺(核心系統(tǒng))記賬。如果需要有外聯(lián)系統(tǒng)的,由后臺直接聯(lián)動外聯(lián)系統(tǒng)的一個軟件或前置機,將請求發(fā)出去。這種系統(tǒng)框架安裝實施方便、部署快捷,供規(guī)模較小的銀行使用,足以滿足其需要。

但隨著銀行規(guī)模的擴大,現(xiàn)有的系統(tǒng)模式越發(fā)的滿足不了區(qū)域性業(yè)務(wù)的差異性復(fù)雜性。尤其是客戶端種類的創(chuàng)新,各種自助終端、移動端接入層出不窮,以往的銀行架構(gòu)牽一發(fā)而動全身,升級優(yōu)化都造成了很大的不便。

于是,漸漸的我們把系統(tǒng)中用來與外部通訊的、身份校驗的、加密驗簽的等等功能都剝離出來,讓原本的后臺(核心系統(tǒng))更專注于銀行業(yè)務(wù)的本質(zhì)工作(記賬)。

這些剝離出來的功能,組合在一起就形成了前置系統(tǒng)。

銀行前置系統(tǒng)在什么位置、能做什么

就如之前所說的,銀行的前置系統(tǒng)是連接兩邊系統(tǒng),期間進(jìn)行身份驗證、接收指令、傳輸數(shù)據(jù)、后臺調(diào)度等工作。

前置系統(tǒng)獨立出來之后,慢慢的,銀行的架構(gòu)變成“前端(柜臺、ATM、網(wǎng)銀等)-前置-后臺”,前端發(fā)起的交易指令,由前置統(tǒng)一接入,并進(jìn)行報文格式校驗、解密驗簽等工作,之后將業(yè)務(wù)信息組成銀行核心系統(tǒng)需要的報文格式,統(tǒng)一調(diào)度核心系統(tǒng)交易接口完成交易處理。

同時前置還負(fù)責(zé)與外聯(lián)的渠道(銀聯(lián)、網(wǎng)聯(lián)、二付支付、征信中心等等)接入,所有外聯(lián)系統(tǒng)只需要跟前置做接口,包括消息報文接口、文件傳輸接口,簡化了后臺業(yè)務(wù)處理接口。

對于全國性銀行系統(tǒng)架構(gòu)主要體現(xiàn)在區(qū)域的前置分級和后臺的業(yè)務(wù)系統(tǒng)化上,一般采用“前臺-市級渠道前置-省級渠道前置(-地方性業(yè)務(wù)系統(tǒng))-綜合大前置-各個業(yè)務(wù)系統(tǒng)”,省市級渠道前置除了分擔(dān)龐大的交易連接壓力外,還擔(dān)任了級聯(lián)架構(gòu)中地方獨有業(yè)務(wù)的大前置角色,對于它來說,地方性業(yè)務(wù)系統(tǒng)就是本級的后臺。

綜合大前置包容了前置的交易統(tǒng)一調(diào)度功能,還把后臺的一些公共的業(yè)務(wù)邏輯處理移過來,一方面以減少與后臺的交互環(huán)節(jié),另一方面也達(dá)到基礎(chǔ)數(shù)據(jù)統(tǒng)一管理。

前置系統(tǒng)功能模式

這里需要將前置系統(tǒng)分成兩個功能部分來說,一部分是渠道功能,一部分是大前置的業(yè)務(wù)處理、流程調(diào)試功能。

渠道功能

這部分主要實現(xiàn)了通訊接入和渠道報文轉(zhuǎn)換的功能。面對各種各樣的通訊方式和報文格式,前置系統(tǒng)既要“海納百川”又要“雜而不亂”,需要具有一定的靈活性和擴展性。

通訊方面,傳統(tǒng)銀行以及與外聯(lián)單位間使用的協(xié)議和中間件主要是TCP、IBM MQ、CICS、Tuxedo、SNA等。由于銀行間大部分的數(shù)據(jù)是流轉(zhuǎn)于金融城域網(wǎng)的(各運營商的金融專線),所以對于通訊安全這塊兒有了一定的保障。

其中TCP就是簡單的建立一個Socket,點對點的連接互發(fā)消息;IBM MQ更是央媽推的產(chǎn)品,所以大家也都在用;剩下的幾個用的相對較少了,我當(dāng)時就一直在使用Tuxedo,不過也就停留在建好通道消息能通的基礎(chǔ)使用程度,維護(hù)上實在不敢造次,更別提改造和開發(fā)了。

隨著技術(shù)框架的發(fā)展和革新,一些開源的中間件Rabbit MQ、Kafka等也漸漸的在對老的體系進(jìn)行著替換,有些技術(shù)服務(wù)商的成熟產(chǎn)品比如金證的kcxp、先進(jìn)數(shù)通的Starring平臺等等也有著不俗的表現(xiàn)。

報文方面,主要使用的是固定長度格式、分隔符格式、8583格式、XML格式等等。

固定長度格式報文,優(yōu)點在于簡單,打包解包速度快;缺點是可能會浪費存儲空間,一般用于重視處理效率的場景。

分隔符格式報文,節(jié)約存儲空間,但是打包解包速度稍慢于固定長度格式,還要注意雙字節(jié)引起的解包錯位問題,而且還要考慮分隔符轉(zhuǎn)義,一般用于字符取值空間比較單純,數(shù)據(jù)域長度差異性比較大的場景。

8583格式報文,銀聯(lián)卡交易報文接口標(biāo)準(zhǔn),和銀聯(lián)打交道離不開這個。8583報文的TLV模式可以擴展成通用交易報文格式來使用,其中T=Tag,L=Lenth,V=Value,其實就是數(shù)據(jù)字典和固定長度格式的結(jié)合體。我覺得這是一種最直觀的最原始的標(biāo)記報文,每個Tag域都代表了不同的業(yè)務(wù)含義,按照業(yè)務(wù)流程的需要,對相關(guān)域信息進(jìn)行解析即可得到需要的業(yè)務(wù)內(nèi)容。

XML格式報文,現(xiàn)在十分普遍了,最近幾年新的項目和接口大多會使用XML報文,這種報文可以附帶前面幾種報文格式所不能包含的大量完備信息,具有自描述性、人可讀性。但它的缺點也是比較明顯的,就是“體積”偏大,打包解包速度慢,同時編碼難度和繁復(fù)度也比以上幾種格式都要大一些。

最后再說一種,JSON報文,準(zhǔn)確的說應(yīng)該是key-value格式報文,這種報文體量小、結(jié)構(gòu)簡單清晰、便于解析,尤其是在各技術(shù)框架的大力支持下,越來越多的系統(tǒng)間交互都采用了這種格式進(jìn)行數(shù)據(jù)傳輸。特別是在webservice、restful接口以及微服務(wù)調(diào)用的“風(fēng)靡”下,大有可為。

業(yè)務(wù)調(diào)度功能

業(yè)務(wù)調(diào)度,或者說是交易路由更形象一些。

核心思想就是根據(jù)接收到的報文中交易碼以及其他業(yè)務(wù)信息,判斷需要調(diào)用后臺的哪一個交易進(jìn)行處理。

交易路由的控制可以是多種形式的,最省事兒的甚至可以將處理邏輯寫到代碼里,也可以通過配置文件、數(shù)據(jù)庫表等方式進(jìn)行。交易路由控制中應(yīng)盡量少的摻入業(yè)務(wù)邏輯的內(nèi)容,保證簡潔、可復(fù)用的完成一個“路由”的功能。

在進(jìn)行業(yè)務(wù)調(diào)度的同時,由于前端接收到的報文信息以及格式是五花八門的,前置系統(tǒng)在這兒還會將接收到的報文內(nèi)容進(jìn)行整理和轉(zhuǎn)換。將后臺處理需要的信息進(jìn)行篩選和整理,并按照內(nèi)部約定好的報文格式進(jìn)行轉(zhuǎn)換輸出。

這樣的模式,前置系統(tǒng)相當(dāng)于一個水龍頭,進(jìn)水管可以是各種管道來水,而出水口的大小、孔徑都規(guī)整成了一種規(guī)格。前置渠道和后臺只能考慮將N種外部報文轉(zhuǎn)化成一種內(nèi)部報文即可,避免了多對多轉(zhuǎn)換的組合復(fù)雜度。

前置交易設(shè)計基本原則

交易的表現(xiàn)形式千千萬萬種,體現(xiàn)在后臺的處理上除了各業(yè)務(wù)流程的特殊約定外,無外乎就落在“增刪改查”四個字上。

結(jié)合上面對前置系統(tǒng)的功能理解,我們針對這四處數(shù)據(jù)操作來聊一聊。

首先考慮的是增的內(nèi)容,前置系統(tǒng)的新增操作,主要是將接收到的數(shù)據(jù)進(jìn)行落地,所以新增的內(nèi)容主要包括消息的通訊部分、交易明細(xì)部分以及流程標(biāo)識狀態(tài)等字段內(nèi)容。

通訊部分內(nèi)容,主要是消息頭中的消息ID、版本信息、渠道類型等等內(nèi)容。

交易明細(xì)內(nèi)容,主要是看業(yè)務(wù)形式了,一般都會包括交易時間、本方信息、對手方信息、業(yè)務(wù)信息等等。

流程標(biāo)識狀態(tài),由于前置系統(tǒng)本身主要是渠道和交易路由的功能作用,所以對每一筆交易我們既要記錄接收進(jìn)來的信息,還要記錄在整個業(yè)務(wù)周期內(nèi)這筆數(shù)據(jù)的狀態(tài)變化。從接收進(jìn)來時的“初始化”、“待處理”,到分發(fā)給后臺處理時的“處理中”、“已發(fā)送”,再到接收到返回信息后的“交易成功/失敗”、“已接收”等等狀態(tài)信息,都需要在前置系統(tǒng)中記錄。

再者考慮的是增的地方,包括使用的數(shù)據(jù)庫是Oracle、DB2還是MySQL,主要是考慮對金額字段總長度和保留位數(shù)的處理、某些庫對字符集是否要特殊處理、時間格式是否要進(jìn)行轉(zhuǎn)換等等。

最后考慮的是增的方式,一是接數(shù)據(jù)是文件還是消息的,對文件的解析落庫還是直接處理文件數(shù)據(jù)落庫,消息的要考慮是哪種模式的報文以便采用對應(yīng)的解析方式進(jìn)行數(shù)據(jù)落地;再者是針對數(shù)據(jù)量比較大時,對系統(tǒng)的處理效率又有要求的情況下,就要考慮落庫的方式是sql語句的insert到表里,還是import進(jìn)行數(shù)據(jù)導(dǎo)入。在落庫的過程還要結(jié)合業(yè)務(wù)的整體性和系統(tǒng)效率,設(shè)定每個事務(wù)提交多少條數(shù)據(jù)。

金融系統(tǒng)里大多數(shù)情況下不會對數(shù)據(jù)進(jìn)行真正的刪除,也就是我們說的物理刪除。

所謂刪的動作,在前置系統(tǒng)中,更多的是將數(shù)據(jù)狀態(tài)修改為“注銷”、“失效”等。

當(dāng)然還是有些業(yè)務(wù)場景需要真正刪除數(shù)據(jù)的,特別是一些業(yè)務(wù)處理流程中的中間表,還有就是一些業(yè)務(wù)允許重做多次的情況下,一般在業(yè)務(wù)進(jìn)行到這一步時,都會將當(dāng)天相關(guān)的數(shù)據(jù)先進(jìn)行刪除操作,再將新的數(shù)據(jù)落地,以避免數(shù)據(jù)的混亂導(dǎo)致處理錯誤。

前置系統(tǒng)中改的功能,我覺得大都體現(xiàn)在對流程的異常處理上??蛻魪那岸税l(fā)起的交易重發(fā)是業(yè)務(wù)的異常處理;運維人員在后臺管理柜臺上選擇的交易狀態(tài)修改也可以看作是業(yè)務(wù)流程的異常處理;對于由于網(wǎng)絡(luò)擁塞等因素造成的數(shù)據(jù)丟失,相關(guān)的業(yè)務(wù)流程無法繼續(xù)運轉(zhuǎn)下去了,我們同樣能技術(shù)層面可以將相關(guān)的數(shù)據(jù)狀態(tài)改成一個結(jié)束的終態(tài)。

我們還是從幾個方面來聊一聊改這個行為。

首先是改這個動作的發(fā)起方??蛻羲闶前l(fā)起方之一,客戶的修改動作更多的是對業(yè)務(wù)數(shù)據(jù)的修改,比如剛做了一筆申購交易,狀態(tài)已經(jīng)是提交成功了,現(xiàn)在又發(fā)起了一筆撤單,如果前置系統(tǒng)里記錄了這一單的狀態(tài),就需要找到原交易成功的交易記錄,將其狀態(tài)撤銷掉。技術(shù)人員和業(yè)務(wù)人員也是發(fā)起方之一,通過后臺管理柜面,對交易記錄進(jìn)行修改,這種修改更多的就是對業(yè)務(wù)流程的控制了,將無法完成的交易修改為終態(tài),對錯誤的業(yè)務(wù)數(shù)據(jù)進(jìn)行修改以便后續(xù)流程可以進(jìn)行下去。

再者是改的內(nèi)容,哪些內(nèi)容是可以修改的,這其實是一個權(quán)限問題,比如金額方面的內(nèi)容,對金額修改一定是由一個單獨的交易流程中進(jìn)行的,存款、撤單等等交易都對應(yīng)了金額字段的增減,這種修改不可能也不可以由運維人員在后臺管理界面上就執(zhí)行了。再比如一些交易狀態(tài)的修改,特別是一些異步交易的狀態(tài),由狀態(tài)A能修改為狀態(tài)B,能不能修改成狀態(tài)CDEF...這都是和業(yè)務(wù)流程息息相關(guān)的,不能說是修改了狀態(tài)成“交易完成”了,結(jié)果客戶端又沒辦法收到正常正確的信息。

在設(shè)計和編寫修改類交易時,我們更多的是要注意到修改的動作是否會影響到原交易的進(jìn)行。尤其是正在進(jìn)行中,非終態(tài)的交易數(shù)據(jù),是否在修改時有“鎖”或者“互斥”的機制。

對于有一定體量的金融系統(tǒng),前置系統(tǒng)所承受的最大的數(shù)據(jù)壓力一定是查詢功能。

由于對客戶需要提供全方位多樣式的服務(wù),導(dǎo)致查詢后臺數(shù)據(jù)的條件也是各種組合各種形式。對于某些重要的業(yè)務(wù)數(shù)據(jù)表(比如客戶信息表、交易明細(xì)表等等)壓力巨大,同時由于這些數(shù)據(jù)還在頻繁的進(jìn)行著新增、修改等操作,導(dǎo)致查詢交易設(shè)計不好,有可能直接影響正常的交易。

目前對查詢交易設(shè)計我覺得可以分成事前分析和事后優(yōu)化兩部分進(jìn)行。

事前分析主要集中以下幾個方面:

  1. 根據(jù)以往的業(yè)務(wù)經(jīng)驗,對數(shù)據(jù)量有一定的預(yù)估,采用現(xiàn)有類似的查詢模式進(jìn)行復(fù)用。
  2. 根據(jù)設(shè)定的查詢條件,做好表索引的規(guī)劃。
  3. 壓力測試很重要,壓力測試很重要,壓力測試很重要。

事后優(yōu)化的手段就各顯神通了,業(yè)務(wù)不同,數(shù)據(jù)量不同,可以操作的空間也不盡相同,主要體現(xiàn)在以下幾個方面:

  1. 對數(shù)據(jù)庫表索引的優(yōu)化。
  2. 對交易流程中耗時瓶頸的優(yōu)化。
  3. 分庫分表,減少單張表的數(shù)據(jù)量。
  4. 復(fù)制出一個查詢庫,與主數(shù)據(jù)庫間做數(shù)據(jù)同步,將主業(yè)務(wù)與查詢業(yè)務(wù)分別處理。
  5. 對整批數(shù)據(jù)采用export導(dǎo)出,以文件等形式進(jìn)行傳輸。

當(dāng)然現(xiàn)在還有各種把數(shù)據(jù)往內(nèi)存里放的,甚至還會將一些固定數(shù)據(jù)暫存到客戶端本地,以方便快速查詢并減少服務(wù)器的壓力。

觀其本質(zhì),在設(shè)計和開發(fā)查詢交易時,除開數(shù)據(jù)的準(zhǔn)確性之外,最需要考慮的就是效率問題?;谛蔬@個基本上,利用現(xiàn)有的技術(shù)架構(gòu),根據(jù)業(yè)務(wù)的頻度進(jìn)行數(shù)據(jù)分離,從而達(dá)到高效的處理查詢業(yè)務(wù)。

隨便聊點兒

整體看下來,大家是不是有一種莫名的熟悉感。

其實前置系統(tǒng)的演變和功能劃分,很像是現(xiàn)在被講來講去的微服務(wù)概念。

伴隨著業(yè)務(wù)區(qū)域的劃分以及系統(tǒng)邊界的設(shè)定,將更多的渠道工作交給前置來做,讓核心系統(tǒng)更專注于會計相關(guān)事務(wù)的處理。

同時在前置系統(tǒng)內(nèi)部,又可以依據(jù)業(yè)務(wù)線的不同和技術(shù)框架的不同,對前置系統(tǒng)進(jìn)行拆份、集群化、微服務(wù)化。

但萬變不離其宗,不管中間穿透了幾層系統(tǒng),使用的多少中間件,走過了多少隊列通道,我們都要用前置系統(tǒng)的本質(zhì)作用來衡量這些動作的意義。

作為技術(shù)人員,我依然倡導(dǎo)的是要以不變應(yīng)萬變,抽絲剝繭出適合自己的精準(zhǔn)模型來設(shè)計交易、設(shè)計系統(tǒng)。

好了,今天就聊到這里~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近再做銀行支付移動端的前置系統(tǒng),對這個之前幾乎完全不懂,現(xiàn)在小馬過河,自己摸索些經(jīng)驗,寫下來供后人參考,正確與否...
    sweallow閱讀 902評論 0 1
  • 記賬核心與綜合前置 在貸款中介紹過記賬核心,與綜合前置相對應(yīng),記賬核心是核心的“里”(中央處理器),而綜合前置就是...
    JC1265閱讀 7,802評論 0 19
  • 前置系統(tǒng)項目原計劃時間 6.12~7.20上線;開發(fā)時間 測試時間 項目總結(jié) 1,產(chǎn)品溝通不全面 整個認(rèn)證改版流...
    forwarder閱讀 474評論 0 0
  • 中間業(yè)務(wù) 中間業(yè)務(wù)定義 所謂中間業(yè)務(wù)是指不構(gòu)成商業(yè)銀行資產(chǎn)負(fù)債表內(nèi)資產(chǎn)、表內(nèi)負(fù)債,形成非利息收入的業(yè)務(wù)。中間業(yè)務(wù)意...
    JC1265閱讀 7,901評論 0 9
  • 支付 1992 年中國人民銀行引入世界銀行的技術(shù)援助,著手中國現(xiàn)代支付系統(tǒng)一期工程的研究和建設(shè)。2000 年 10...
    JC1265閱讀 9,797評論 0 21

友情鏈接更多精彩內(nèi)容