前言
此前,金融信息化建設(shè)主要依托原有集中型 IT 架構(gòu)進(jìn)行維護(hù)擴(kuò)展,系統(tǒng)規(guī)模及復(fù)雜程度呈指數(shù)級(jí)增長(zhǎng),各類瓶頸逐漸暴露,日益增長(zhǎng)的數(shù)字金融需求同舊式的系統(tǒng)架構(gòu)缺陷之間的矛盾愈加凸顯。中國(guó)人民銀行、中國(guó)銀行保險(xiǎn)監(jiān)督管理委員會(huì)等金融監(jiān)管部門逐漸推出分布式轉(zhuǎn)型政策要求,金融企業(yè)開始興起分布式轉(zhuǎn)型浪潮。
民生銀行作為中國(guó)第一家非國(guó)有企業(yè)所有的銀行以及中國(guó)領(lǐng)先的零售銀行,管理的總資產(chǎn)為 3.2 萬(wàn)億人民幣,運(yùn)營(yíng) 33 家分支和超過(guò) 700 家銀行網(wǎng)點(diǎn)。在業(yè)務(wù)創(chuàng)新和技術(shù)創(chuàng)新上,民生銀行一直走在業(yè)界的前列,尤其在人工智能、大數(shù)據(jù)領(lǐng)域,民生銀行做出了很多積極的嘗試,取得了不錯(cuò)的成效。
銀行分布式轉(zhuǎn)型需求
應(yīng)用和業(yè)務(wù)層的壓力,給商業(yè)銀行IT和數(shù)據(jù)架構(gòu)帶來(lái)了新需求和挑戰(zhàn),分布式技術(shù)架構(gòu)轉(zhuǎn)型的需求也就應(yīng)運(yùn)而生。商業(yè)銀行亟需分布式架構(gòu)轉(zhuǎn)型,主要體現(xiàn)在如下幾個(gè)方面:
· 提升海量數(shù)據(jù)系統(tǒng)管理彈性。當(dāng)商業(yè)銀行系統(tǒng)內(nèi)數(shù)據(jù)量急劇增大時(shí),系統(tǒng)需要彈性地?cái)U(kuò)容以應(yīng)對(duì)PB級(jí)別以上的數(shù)據(jù)管理,這種彈性容量調(diào)整可以實(shí)現(xiàn)讓所有數(shù)據(jù)保持在線。
· 提升數(shù)據(jù)系統(tǒng)管理性能。針對(duì)客戶的實(shí)時(shí)需求,商業(yè)銀行數(shù)據(jù)系統(tǒng)需要滿足高并發(fā)業(yè)務(wù)操作需求,實(shí)現(xiàn)海量數(shù)據(jù)超高性能讀寫以及實(shí)時(shí)訪問(wèn)查詢。
· 升級(jí)數(shù)據(jù)安全保障。數(shù)據(jù)安全不僅僅是簡(jiǎn)單的備份,除了實(shí)現(xiàn)數(shù)據(jù)的持續(xù)高可用外,還應(yīng)支持異地容災(zāi)甚至數(shù)據(jù)中心“雙活”,進(jìn)而保障數(shù)據(jù)安全。
· 滿足多類型數(shù)據(jù)處理需求,提升系統(tǒng)效率。在跨業(yè)務(wù)的融合中,亟需實(shí)現(xiàn)對(duì)多模數(shù)據(jù)的統(tǒng)一管理,從結(jié)構(gòu)化數(shù)據(jù)到半結(jié)構(gòu)化數(shù)據(jù)再到非結(jié)構(gòu)化數(shù)據(jù),進(jìn)而實(shí)現(xiàn)不同類型的數(shù)據(jù)統(tǒng)一融合管理,從而大大提升系統(tǒng)效率。
· 簡(jiǎn)化開發(fā)運(yùn)維節(jié)約成本。隨著應(yīng)用的增多,更需要分布式架構(gòu)支持,進(jìn)行數(shù)據(jù)分區(qū)管理,實(shí)現(xiàn)業(yè)務(wù)有效隔離。同時(shí),保持系統(tǒng)的彈性、兼容性,大大簡(jiǎn)化運(yùn)維開發(fā)。
· 有能力支撐核心業(yè)務(wù)系統(tǒng)的國(guó)產(chǎn)產(chǎn)品。除了數(shù)據(jù)安全的要求和“技術(shù)先進(jìn)”,對(duì)于核心業(yè)務(wù),更重要的是對(duì)產(chǎn)品代碼級(jí)具有控制力,這樣可以保證產(chǎn)品針對(duì)用戶共性需求不斷進(jìn)行迭代更新,也帶來(lái)產(chǎn)品穩(wěn)定性以及高效強(qiáng)力的技術(shù)支持。
民生銀行新一代數(shù)據(jù)庫(kù)應(yīng)用情況
目前,在數(shù)據(jù)庫(kù)領(lǐng)域,民生銀行新一代數(shù)據(jù)庫(kù)的應(yīng)用目前主要分為三個(gè)領(lǐng)域。
1)數(shù)據(jù)庫(kù)分庫(kù)分表
針對(duì)數(shù)據(jù)彈性擴(kuò)容和性能、高可用等要求,我們也針對(duì)數(shù)據(jù)庫(kù)進(jìn)行了分庫(kù)分表改造。目前已經(jīng)實(shí)現(xiàn)Oracle、IBM DB2以及MySQL數(shù)據(jù)庫(kù)的分庫(kù)分表改造,總分庫(kù)數(shù)超過(guò)15,分表數(shù)超過(guò)500張。
2)傳統(tǒng)數(shù)據(jù)庫(kù)的跨中心分布和雙活
我們針對(duì)IBM DB2等傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品進(jìn)行了跨中心分布和雙活的改造。提升總體安全性,提升RTO,RPO,實(shí)現(xiàn)“5個(gè)9” ,降低風(fēng)險(xiǎn)提高效率,操作過(guò)程更簡(jiǎn)單透明,同時(shí)大大提高軟硬件資源利用率,節(jié)約了建設(shè)成本。
3)新型分布式數(shù)據(jù)庫(kù)產(chǎn)品使用
除了傳統(tǒng)數(shù)據(jù)庫(kù)的分布式改造,民生銀行也積極嘗試新型分布式數(shù)據(jù)庫(kù)產(chǎn)品。如國(guó)內(nèi)的分布式數(shù)據(jù)庫(kù)SequoiaDB,目前已經(jīng)在海量數(shù)據(jù)查詢、分布式影像平臺(tái)和歸檔數(shù)據(jù)管理等在線業(yè)務(wù)系統(tǒng)中規(guī)模部署使用。
分布式NewSQL創(chuàng)新實(shí)踐
當(dāng)前分布式架構(gòu)轉(zhuǎn)型的改造已經(jīng)取得相當(dāng)成效,但隨著我行各類業(yè)務(wù)負(fù)載的不斷增大,以及直銷銀行、互聯(lián)網(wǎng)金融和人工智能等創(chuàng)新業(yè)務(wù)的拓展,同時(shí)分布式數(shù)據(jù)庫(kù)應(yīng)用也需要向更核心的業(yè)務(wù)系統(tǒng)推進(jìn)。當(dāng)前方案面臨新的挑戰(zhàn):
· 開發(fā)運(yùn)維成本: 分庫(kù)分表方案,在擴(kuò)展性和性能、并發(fā)上仍有瓶頸,且開發(fā)投入的各項(xiàng)成本高。分庫(kù)分表的方案需要預(yù)先根據(jù)業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行切分,這樣的方案喪失了較多的彈性,同時(shí)在運(yùn)維層面,也需要投入不小的人力。
· 降低使用和運(yùn)維成本: MySQL兼容性。開源數(shù)據(jù)庫(kù)MySQL目前在互聯(lián)網(wǎng)行業(yè)應(yīng)用較廣,許多應(yīng)用也基于MySQL開發(fā),但是目前的分布式數(shù)據(jù)庫(kù)很多沒(méi)有實(shí)現(xiàn)完全的MySQL兼容,因此在實(shí)際投產(chǎn)后,實(shí)際的使用和運(yùn)維成本更高了。
· 進(jìn)入核心業(yè)務(wù)場(chǎng)景: 使用開源數(shù)據(jù)庫(kù)、中間件方案,由于沒(méi)有商業(yè)化廠商的支持和行業(yè)積累,穩(wěn)定性沒(méi)有保證,再進(jìn)入核心業(yè)務(wù)系統(tǒng)時(shí)存在一定風(fēng)險(xiǎn)。
· 國(guó)產(chǎn)化要求:在分布式數(shù)據(jù)庫(kù)領(lǐng)域,不能過(guò)分依賴海外開源產(chǎn)品,需要著重考察國(guó)內(nèi)自主可控的分布式數(shù)據(jù)庫(kù)產(chǎn)品。
針對(duì)上述需求,我們?cè)诜植际絅ewSQL的創(chuàng)新實(shí)踐中,經(jīng)過(guò)測(cè)試和對(duì)比,我們最終選擇巨杉的SequoiaDB。SequoiaDB 3.0 版本,目前已經(jīng)實(shí)現(xiàn)完整協(xié)議級(jí)別MySQL兼容,可以在數(shù)據(jù)庫(kù)層面做到分布式并且對(duì)已有業(yè)務(wù)全兼容。同時(shí),巨杉在金融行業(yè)已經(jīng)有過(guò)大規(guī)模使用考驗(yàn),在產(chǎn)品成熟度上更可靠。
分布式NewSQL數(shù)據(jù)庫(kù)平臺(tái),在使用SequoiaDB 3.0 后,體現(xiàn)了幾大業(yè)務(wù)優(yōu)勢(shì):
· 分布式可擴(kuò)展性:存儲(chǔ)層的分布式數(shù)據(jù)引擎,可以實(shí)現(xiàn)數(shù)據(jù)量的彈性擴(kuò)容,靈活應(yīng)對(duì)業(yè)務(wù)需求的調(diào)整。
· 微服務(wù)架構(gòu):整個(gè)平臺(tái)參考了微服務(wù)架構(gòu),接入層的SQL實(shí)例和存儲(chǔ)層的存儲(chǔ)節(jié)點(diǎn)都可以進(jìn)行自由的配置,應(yīng)用可以按需選擇SQL實(shí)例和存儲(chǔ)節(jié)點(diǎn)。
· MySQL完全兼容:接入層實(shí)現(xiàn)了完全協(xié)議級(jí)兼容MySQL,應(yīng)用無(wú)縫對(duì)接,大大降低使用和運(yùn)維成本。
業(yè)務(wù)場(chǎng)景測(cè)試結(jié)果
為了體現(xiàn)NewSQL平臺(tái)的優(yōu)勢(shì),我們選取了SequoiaDB在幾個(gè)主要業(yè)務(wù)場(chǎng)景下的一些測(cè)試數(shù)據(jù)進(jìn)行說(shuō)明,這些業(yè)務(wù)場(chǎng)景可以代表我行的許多重要交易場(chǎng)景:
· 渠道復(fù)雜查詢場(chǎng)景
此場(chǎng)景以查詢?yōu)橹鳎樵冋Z(yǔ)句較復(fù)雜,涉及4張表的關(guān)聯(lián),其中包括2張大的流水表的關(guān)聯(lián)操作,每張表記錄數(shù)達(dá)到數(shù)億條,最終匹配結(jié)果達(dá)到數(shù)百條記錄。
在實(shí)際測(cè)試中系統(tǒng)的業(yè)務(wù)處理能力仍然可達(dá)到平均每分鐘3,916.45筆,并且運(yùn)行過(guò)程系統(tǒng)的吞吐量表現(xiàn)非常平穩(wěn)。
· 高頻交易流水查詢場(chǎng)景
此場(chǎng)景以高頻查詢?yōu)橹鳎饕槍?duì)近期的流水記錄,查詢頻率較高。共涉及3張表,其中小流水表和資料表記錄條數(shù)分別為3000萬(wàn)條,大流水表為3億條。
通過(guò)測(cè)試,在該場(chǎng)景下,每分鐘的業(yè)務(wù)處理能力可達(dá)到1,886,184.03筆,如此高的吞吐量仍然能夠在整個(gè)過(guò)程中持續(xù)保持平穩(wěn)。
· 柜臺(tái)業(yè)務(wù)辦理場(chǎng)景
此業(yè)務(wù)以查詢和更新為主,執(zhí)行頻率高,對(duì)響應(yīng)時(shí)間要求高。其中查詢業(yè)務(wù)涉及3張表,其中兩張資料表為1000萬(wàn),3000萬(wàn)條數(shù)據(jù),維度表數(shù)據(jù)為1萬(wàn)條;更新操作則涉及資料表1000萬(wàn)條記錄和維度表1萬(wàn)條記錄。
混合查詢和更新,在執(zhí)行過(guò)程中可能出現(xiàn)不同事務(wù)對(duì)同一條記錄的讀寫沖突,因此吞吐量表現(xiàn)出現(xiàn)一些小幅度波動(dòng),但總體平均每分鐘的業(yè)務(wù)處理仍然可達(dá)到51,090.03筆。
· 計(jì)費(fèi)業(yè)務(wù)場(chǎng)景
此業(yè)務(wù)場(chǎng)景以插入、更新和查詢?yōu)橹鳎瑘?zhí)行頻率高,對(duì)響應(yīng)時(shí)間要求高。其中查詢涉及兩張資料表和兩張維度表,資料表記錄數(shù)分別為1000萬(wàn)與3000萬(wàn);插入操作涉及兩張流水表,記錄數(shù)分別為3000萬(wàn)與900萬(wàn);更新則涉及一張維度表與一張流水表,記錄數(shù)約為1萬(wàn)與1億。
業(yè)務(wù)場(chǎng)景較為復(fù)雜,每筆業(yè)務(wù)至少包含50余個(gè)數(shù)據(jù)庫(kù)操作,混合著插入、更新以及查詢等多種操作,平均每分鐘的業(yè)務(wù)處理仍然可達(dá)到9,861.57筆。,相對(duì)波動(dòng)也比較小。
小結(jié)
SequoiaDB 3.0 的MySQL兼容性較為優(yōu)秀,擴(kuò)展能力較好,總體性能滿足重要交易系統(tǒng)的要求。后續(xù),我們將會(huì)把更多現(xiàn)有分庫(kù)分表方案難以處理的業(yè)務(wù)向NewSQL平臺(tái)遷移。
我們也會(huì)持續(xù)評(píng)估未來(lái)大規(guī)模使用分布式數(shù)據(jù)庫(kù)的可能性,充分發(fā)揮NewSQL數(shù)據(jù)庫(kù)的優(yōu)勢(shì),幫助我們的業(yè)務(wù)、技術(shù)創(chuàng)新,同時(shí)也希望我行在分布式數(shù)據(jù)庫(kù)建設(shè)過(guò)程中的可以分享更多成功經(jīng)驗(yàn)。