分布式数据库在金融应用场景中的探索与实践
分布式數據庫在金融應用場景中的探索與實踐
劉雷, 郭志軍, 馬海欣, 趙瓊, 胡卉芪, 蔡鵬, 杜洪濤, 周傲英, 李戰懷
交通銀行軟件開發中心,上海 201201
華東師范大學數據科學與工程學院,上海 200062
西北工業大學計算機學院,陜西 西安 710072
?
摘要:金融互聯網化的迅速發展要求金融數據庫系統同時具備高性能、可擴展、高可用和高容錯等特性,傳統數據庫管理系統難以同時滿足這些特性。為了應對金融互聯網化帶來的挑戰,響應國家對技術自主可控需求,交通銀行專注于支持金融行業典型交易的新一代數據庫系統研發,通過實現輕量級分布式選舉協議和分布式事務功能,開發了具備高性能、可擴展、高可用和高容錯特性的分布式數據庫,并成功將其運用于交通銀行多個關鍵業務系統中。
關鍵詞:分布式數據庫 ; CBASE ; 高可用性 ; 可容錯 ; 可擴展
論文引用格式:
劉雷, 郭志軍, 馬海欣, 趙瓊, 胡卉芪, 蔡鵬, 杜洪濤, 周傲英, 李戰懷. 分布式數據庫在金融應用場景中的探索與實踐. 大數據[J], 2019, 5(1):77-86
LIU L,GUO Z J, MA H X, ZHAO Q, HU H Q, CAI P, DU H T, ZHOU A Y, LI Z H. Exploration and applications of distributed database in financial area. Big data research[J], 2019, 5(1): 77-86
1 引言
近年來,隨著國際信息安全形勢的日益嚴峻,國家信息安全戰略逐步深入。為了應對金融業核心技術受制于人的嚴峻形勢,中國人民銀行、中國銀行保險監督管理委員會相繼提出了金融業應加快推進國產自主可控替代計劃,以滿足構建安全可控的信息技術體系的要求。然而,當前大型國有金融企業的核心系統主要依賴于國外IT巨頭的集中式數據庫產品和配套的底層硬件,核心技術缺乏突破,無法做到完全自主可控。
互聯網金融化帶來的主要挑戰是數據量、交易量大幅度提高,并伴隨數十倍于正常負載的交易高峰壓力以及交易復雜度的增加。而商業銀行采用的傳統數據庫在處理此類應用場景時,在擴展性、性能、吞吐量和可靠性等方面遇到了明顯的瓶頸,只能通過簡單的升級硬件的方式提升性能,不僅成本昂貴,而且面對互聯網金融交易的指數級增長,這樣的方式也無法保證系統的可持續正常服務。
近年來,大容量內存、高速網絡和集群構建等技術的發展,為解決金融行業核心數據庫系統支持互聯網化改造提供了全新的思路。和傳統的小型機、大型機相比,服務器集群具有更好的彈性,成本更低。此外,基于集群的分布式數據庫在基礎架構、事務處理、查詢優化與處理、容錯與高可用保障等方面都需要重新設計,才能保障數據庫系統滿足負擔金融行業核心應用的高要求。
在此形勢與背景下,交通銀行聯合華東師范大學和西北工業大學,于2013年開始共同研發可以支持銀行核心交易的新一代關系型數據庫系統,通過實現分布式選舉和分布式事務兩大核心功能,成功實現了具備高可用性、高可擴展性和高吞吐量特性的分布式數據庫(以下簡稱CBASE),并將其應用于交通銀行多個關鍵業務系統中。這是我國首例在大型銀行的事務處理型應用中使用自主研發的數據庫系統,打破了大型銀行核心系統被國外IT公司壟斷的局面,成功驗證了國內商業銀行使用自主研發數據庫支撐銀行應用的可行性,促進了金融領域自主可控技術的發展。
2 現有技術方案的局限性
2.1 傳統集中式關系數據庫
關系數據庫理論誕生于20世紀60年代,經過幾十年的發展與完善,技術已基本成熟。大多數企業的數據管理離不開關系數據庫,其典型代表(如DB2、Oracle、MySQL等)廣泛應用于各行各業中。關系數據庫在工業生產、金融交易、企業管理方面占有舉足輕重的地位。
然而,傳統關系數據庫系統的設計主要面向企業級應用,系統運行在獨立的服務器上,而現代金融應用更多的是面向互聯網用戶。隨著用戶及相應數據量的急劇增加,傳統的集中式關系數據庫在可擴展性上的弊端日益顯現。其技術缺陷可以簡單歸納為以下幾個方面:
單點處理性能瓶頸,即單節點的數據庫系統無法處理大規模的用戶并發訪問計算;
單點運行風險高,容災容錯能力差;
單節點存儲能力有局限;
應用擴容升級難度大,需要購置成本更高的高性能服務器。
金融行業、商業銀行主要使用國外成熟的商業數據庫產品,其對底層的硬件和配套軟件有特定的要求,配套成本高,這樣的模式不符合企業、銀行控制成本的要求。此外,在核心業務上長期使用國外廠商的數據庫產品,容易產生暴露信息安全的風險。最后,傳統數據庫廠商的核心代碼都是在國外進行開發維護的,企業、銀行在系統出現故障時,需要依賴數據庫廠商到現場解決,溝通成本高,技術支持效率低。
2.2 NoSQL
互聯網企業在發展過程中逐漸形成了一套基于非關系型數據庫(not only SQL,NoSQL)的替代方案。在谷歌等公司發布了GFS 可擴展分布式文件系統、MapReduce分布式計算模型、BigTable分布式非關系型數據存儲系統之后,在探索大數據存儲、處理問題的過程中,逐漸誕生了一系列新型的數據庫產品,其中包括列簇數據庫、key-value存儲數據庫和文檔數據庫,這些數據庫統稱為NoSQL,如HBase、Cassandra、MongoDB和Dynamo等,這類數據庫主要用于各大互聯網公司的大數據和實時Web應用中。
NoSQL泛指不遵守傳統關系數據、事務處理模型的下一代分布式數據庫產品。NoSQL系統的分布式架構提供了一定的擴展性,同時通過備份保證了系統的容錯性和可靠性。但是這類系統的數據模型采用按列存儲或者key-value存儲模式,更適合簡單的數據操作,主要使用應用程序編程接口(application programming interface,API)的方式訪問數據,對SQL標準化的支持較弱且對SQL功能支持不足。NoSQL對金融業務的支持并不友好,這是因為金融行業應用中交易業務流程復雜,只能通過刻畫業務能力更強的關系型模型實現。如果使用NoSQL直接替換傳統關系型商業數據庫,應用改造成本太高;而且這類系統犧牲了CAP理論中的數據一致性,只保證了系統的可用性和分區容忍性,這使得復雜的事務處理需要在應用層中實現,但是金融行業對風險控制要求嚴格,交易復雜度、業務一致性等方面的要求也不同于互聯網企業,現有的NoSQL系統無法滿足需求。因此金融行業系統普遍使用標準SQL訪問數據。
2.3 基于數據庫中間件
為了突破磁盤、CPU和內存等單機瓶頸,應對數據進行在線遷移。為了解決這個問題,除了購買成本難以控制的高規格服務器之外,有很多企業采用一種可以支持水平擴展的“數據庫+數據庫中間件”的解決方案。這種方案將數據庫劃分成兩個層次:底層為在成本可控的商用服務器上使用成熟的關系數據庫產品(如MySQL等);然后在其上部署一層中間件,用于管理底層的數據庫,并為應用提供透明的數據庫服務。
這種方法需要對業務及數據進行分庫分表處理,因此產生了一些局限性,如中間件的解決方案導致SQL功能受限,不能友好地支持復雜的跨分區連接操作。此外,由于缺乏統一的數據庫鎖管理機制,很多分布式事務難以實現。中間件本身的可用性也必須保證,在一定程度上增加了維護成本。
從數據庫技術角度而言,無論是傳統關系型數據庫,還是互聯網企業采用的NoSQL解決方案,在金融行業的應用中均存在一定的局限性。面對金融互聯網化的挑戰,迫切需要數據庫技術的升級。為此,交通銀行自主研發了一套分布式數據庫系統,打破了上述瓶頸。下面將主要介紹系統的架構及特性。
3 系統架構與特性
3.1 設計目標
為實現自主可控、降低成本、可以承載金融業核心系統的目標,筆者團隊對新一代分布式數據庫期望的目標如下:
使用成本可控的普通服務器,能夠以線性擴展的方式部署面向大規模用戶與數據的應用;
可對外提供7×24 h、不間斷、穩定的金融服務;
能提供豐富、高可靠、強一致性保證的數據處理服務,使之支撐各種復雜的金融應用;
能夠應對應用高峰造成的壓力(如金融優惠活動等特殊場景);
方便系統的運維及管理。
上述特征表現在數據庫系統上,即原子性、一致性、隔離性、持久性、可擴展性、高可用性、高可靠性、高吞吐量和高性能特性。數據庫系統本身的復雜性決定了設計同時具備以上特性的系統存在很大的挑戰。針對這一難題,在調研了大量的開源分布式系統后,筆者團隊選取HBase和OceanBase等產品作為重點研究對象,沿用了HBase和OceanBase底層分布式存儲模型,并在其基礎上實現了基于讀寫分離的分布式數據庫CBASE,從系統架構層面支持上述特性。
3.2 系統架構
如圖1所示,CBASE的系統架構可以被劃分為以下4個功能模塊。
集群管理節點:主要負責管理集群中所有的服務器、數據分布及副本。
事務處理節點:主要負責響應更新操作,存儲系統的增量更新數據。
圖1???系統架構
數據存儲節點:主要負責存儲集群的基準數據,為了保證數據的可靠性,一般基準數據會存儲多份。
SQL處理節點:主要負責接收并解析客戶端的SQL請求,經過詞法、語法分析和查詢優化等一些列操作后,發送給相應的數據存儲節點或事務處理節點進行執行。如果請求的數據分布在多臺服務器上,SQL處理節點還需要將這些數據進行合并。
該分布式架構具備若干優勢:
SQL處理節點、事務處理節點、數據存儲節點分離解耦,各司其職,可根據需求對查詢、事務、存儲做到動態擴展;
對于大量改動不頻繁的靜態數據,利用普通的PC服務器進行多備份存儲,通過冗余保證系統的高可靠性和高可用性,對于少量高并發事務產生的更新數據,配置大容量內存的事務處理節點處理,有效提高了事務的處理性能,并能有效應對高并發應用;
通過系統集群管理節點及事務處理節點間精確的一致性協議,做到數據存儲節點及事務處理節點都具備多個實時同步的備份,主備角色間實現了快速切換,實現了系統的高可用性,即保證系統99.999 9%的時間是對外可用的。
此外,筆者在SQL標準化、查詢支持、系統運維方面也做了很多努力,使之能支持復雜的金融業務場景。下面將簡單介紹CBASE中使用的幾個關鍵技術。
3.3 分布式數據庫關鍵技術實現
3.3.1 寫性能優化
CBASE設計和實現了讀寫分離的系統架構,區別對待讀負載和寫負載,并分別對其進行優化。對于未修改的冷數據,采用大量普通PC服務器進行存儲,解決海量數據的可擴展管理問題。更新的熱點數據被存儲于內存大的少量事務處理節點中,當事務處理節點內存達到一定大小時,可以通過自動或者手動凍結的方式將數據存儲到固態硬盤(solid state disk,SSD)中,然后通過定期合并的方式將這些數據分散存儲到靜態數據節點中。這樣的設計能支持可擴展的、高吞吐量的事務處理請求。大部分事務處理無須跨越事務處理節點,因此可以通過增加事務處理節點的方式提高系統的處理能力。對于少量分布式事務,可以通過優化的兩階段提交降低事務延遲。事務處理節點采用大容量內存存儲數據,回避了傳統數據庫中集中式的鎖管理器,采用更輕量級的基于行鎖、多版本的并發控制協議以及混合存儲介質存儲日志等技術,極大地提升了系統性能。
3.3.2 高可用性保障
為提高系統的可用性,利用普通服務器集群以及主備同步的方案,實現系統對外7×24 h的可用性保證。傳統的主備同步方案無法在保證數據一致性的同時,滿足系統的高可用性。CBASE系統突破傳統數據庫難以同時兼顧高可用性與高一致性的困境,設計和實現了集群環境下分布式數據庫的高可用性和高一致性日志強同步。基于Raft協議,設計和實現了輕量級分布式選舉協議。在故障發生時,系統能夠快速地從多個集群管理節點中選出主集群管理節點,并保證該主集群管理節點選舉出包含全部已提交數據的主事務處理節點,實現了系統的高可用性以及數據不丟失。圖2為CBASE中實現的分布式選舉協議的狀態轉化,這是一個不確定性有限自動機。節點角色隨著選舉的進行可能隨時出現以下變化。
當一個節點剛啟動或從故障中恢復時,其角色為備節點,同時會設定一個定時器。如果該節點收到主節點發送的更新日志,則會重置定時器,保持角色狀態不變。否則,定時器超時后,即認為集群中沒有有效的主節點,該節點會轉變為候選者,準備競爭成為新的主節點。
圖2???分布式選舉過程狀態轉化
候選者向其他節點發送投票請求后,可能出現3種情況:獲得多數節點投票的節點成為主節點;收到更新日志信息,說明集群中已有主節點,候選者轉變為備節點;選舉超時,重新發起新一輪選舉。
節點成為主節點后,便會向備節點發送更新日志,并重置其他節點的定時器。
分布式一致性算法(如Paxos、Raft算法)選主節點的過程可能出現活鎖、多主節點、頻繁選主節點的現象,這些對銀行核心系統的可用性和可靠性有著不可預測的影響。本文使用一組輕量級的無狀態集群管理節點選擇事務處理節點的主節點。當集群管理節點選舉主事務處理節點時,無須通過傳統投票方式進行選舉,直接根據事務處理節點的日志信息選主節點即可,從而解決了活鎖問題;對于多主節點問題,本文提出在主節點上添加日志復制租約機制,如果主節點在租約時間內無法將日志成功復制給多數節點,主節點將會放棄主節點身份,等待重新選主節點;對于網絡分區造成的頻繁選主節點問題,新的選主節點請求需要先等待舊主節點租約過期,而此時集群管理節點能夠與每個事務處理節點保持正常通信,不會發起新的選主節點過程,從而避免了事務處理節點的頻繁選主節點的問題。
3.3.3 分布式事務
事務處理是支持金融行業應用的關鍵技術,保證了業務數據的完整性和一致性。現代大型銀行應用除了要求數據庫系統提供完整的事務功能支持外,還需要數據庫系統具備互聯網級并發事務處理能力。針對金融業務系統事務處理類應用的特征, CBASE設計和實現了支持高通量事務處理的分布式數據庫系統,相比原來采用的集中式數據庫(DB2、Oracle),CBASE無須用戶設計、維護分庫分表規則,系統會自動根據主鍵將數據劃分到不同的事務處理節點,實現業務邏輯和數據存儲解耦合,減少開發和維護復雜度,實現了資源線性擴展,集群解決I/O上限瓶頸。
在CBASE的分布式事務引擎實現中,采用如圖3所示的優化的兩階段提交,保證事務的強一致性。當無故障時,該協議實現比較簡單;但當發生故障時,如服務器下線、消息丟失或網絡故障,采用超時動作防止進程無限阻塞,因此協議實現時,在進程可能阻塞的每一步都加入超時動作。在最壞的情況下,兩階段提交協議在執行過程中可能出現任意多次服務器故障和通信故障,并造成參與者很長時間停留在不確定狀態上,這就是未決事務。
圖3???優化的兩階段提交
未決事務處理其實就是兩階段提交協議的恢復流程。分布式事務在執行過程中的決定都保存在一個或多個恢復文件中,恢復過程就是根據持久存儲中的內容恢復對象的值,也就是分布式事務的最終狀態。對于參與者處理事務請求的過程中出現的等待超時的情況,參與者依次向其他參與者或Paxos組內的其他備協調者獲取當前事務的最終狀態。如果當前參與者無法獲取事務最終狀態,由于參與者也是Paxos組,可嘗試切換主參與者。如果始終無法獲取當前事務的最終狀態,該參與者將不可用,需等待數據庫管理員干預。
4 應用與實踐
數據庫屬于系統底層核心組件,且分布式數據庫技術存在大量的技術難點,此前金融領域也沒有相關案例,因此在應用與實踐過程中,交通銀行遵循“穩定第一、謹慎試點、穩步推廣”的原則,先后在金融行業查詢類業務、流程類業務和高并發類業務中逐步推廣應用,試點均取得了良好的效果,節省了大量的成本。下面以查詢類業務(歷史數據查詢系統)和高并發類業務(貸記卡授權系統)為例,介紹分布式數據庫在金融行業的實踐。
4.1 分布式數據庫在歷史數據查詢系統中的應用
隨著時間的推移和業務的發展,各企業歷史數據查詢系統都會面臨歷史數據量不斷增加、系統架構中傳統數據庫難以滿足日益增長的需求的問題,這些問題逐漸成為系統瓶頸。金融行業的歷史數據涵蓋范圍更廣,以交通銀行歷史數據查詢系統為例,其涵蓋了主機業務、賬務系統、貸記卡等上百個業務系統的歷史數據,這就要求數據庫具備良好的擴展性,以滿足業務量的快速增長需求。除了存儲歷史數據外,歷史數據查詢系統還需要對外提供聯機事務查詢和部分更新服務業務,以減少其他在線業務的歷史數據管理壓力,這就要求數據庫能夠快速響應聯機查詢服務。
歷史數據查詢系統要求數據庫同時滿足高性能、高可靠性和高可擴展性,分布式數據庫可以很好地滿足這些要求。在經過大量的評估和測試后,交通銀行于2014年在歷史庫系統中使用CBASE。目前系統整體數據量已超過上百TB,且以每日超1 TB的量不斷增加。在大并發查詢下,查詢響應時間均保證在毫秒級別。多年的穩定運行充分驗證了自主研發的分布式數據庫應用于金融領域的可行性。
4.2 分布式數據庫在貸記卡授權系統中的應用
信用卡業務的縱深發展和客戶量的增加使交易量不斷上升,需求變更越來越頻繁,迫切需要貸記卡授權系統提供持續高效、可在線升級、7×24 h穩定的交易服務。另外,隨著互聯網金融的崛起,支付寶等電商“雙11”網購促銷引發的交易爆發式增長,更加重了系統的負擔,給傳統數據庫帶來了前所未有的挑戰,不僅系統資源無法滿足高脈沖的沖擊,數據庫系統本身也存在著潛在的性能瓶頸。
為更好地保證貸記卡授權系統的穩定性,大幅提升系統整體處理能力,筆者團隊在原有系統架構的基礎上,利用CBASE對高并發業務產生的系統壓力進行分流。基于CBASE的新一代貸記卡授權系統具有如下特點。
高并發處理能力:高峰每秒事務處理量(transaction per second,TPS)上萬。
彈性擴展能力:系統處理能力可以快速彈性擴容。
高可用性:保證業務系統7×24 h在線服務,該系統經受了“雙11”時業務量的考驗,成功分流了高并發時的主機壓力。
在銀行的多個關鍵系統試點過程中, CBASE架構逐漸成型,功能逐步完善,性能逐漸提升,可靠性逐步增強,向著產品化方向穩步發展,取得了良好的社會效益和經濟效益。未來筆者將繼續擴大CBASE試點范圍,充分發揮分布式數據庫的技術優勢、成本優勢。
5 結束語
針對金融行業的業務需求,筆者團隊對數據庫系統架構、功能和實施方案進行了重新思考。為了滿足金融互聯網化對系統可擴展性和事務處理的雙重要求,在借鑒開源分布式系統的基礎上,實現了面向金融行業應用需求的新一代NewSQL數據庫——CBASE,并將其成功應用于交通銀行多個關鍵業務系統中。國內外流行的同期數據庫產品包括以HBase為代表的NoSQL和以VoltDB為代表的NewSQL。前者為了獲取高可擴展性和可用性,降低了對數據一致性的要求,這與金融行業系統的需求相悖;后者為了追求對寫負載的高性能而犧牲掉其他負載的能力,而金融行業體系非常復雜,需要數據庫能夠同時應對多種負載和應用需求。因此,無論是NoSQL還是已有的NewSQL,都難以滿足金融領域復雜的業務需求。CBASE成功填補了這一空白,并在交通銀行的關鍵應用中得到了充分驗證。
作者簡介
劉雷(1972- ),男,交通銀行軟件開發中心高級工程師,主要研究方向為信息安全、核心系統、大數據、IT架構和數據治理。
馬海欣(1988- ),女,交通銀行軟件開發中心系統分析工程師,主要研究方向為社交媒體大數據分析、分布式數據庫。
郭志軍(1980- ),男,交通銀行軟件開發中心副高級工程師,主要研究方向為云平臺。
趙瓊(1986- ),女,博士,交通銀行軟件開發中心高級系統分析師,分布式數據庫項目經理,主要研究方向為分布式系統設計與實現、人體動作識別算法研究等。
胡卉芪(1988- ),男,博士,華東師范大學數據科學與工程學院助理研究員,主要研究方向為可擴展的分布式存儲系統、數據庫查詢與事務處理、面向新硬件的分布式存儲系統等。
蔡鵬(1978- ),男,博士,華東師范大學數據科學與工程學院副教授,主要研究方向為內存事務處理、基于機器學習技術的自適應數據管理系統。
杜洪濤(1978- ),男,博士,西北工業大學計算機學院副教授,主要研究方向為海量數據管理、分布式數據庫。
周傲英(1965- ),男,博士,華東師范大學副校長、教授,數據科學與工程學院創院院長,主要研究方向為互聯網規模數據庫系統、金融領域分布式數據庫、基于異構體系結構的分布式大數據處理系統、數據驅動的計算教育學、大數據基準測試和性能優化等。
李戰懷(1961- ),男,博士,西北工業大學計算機學院教授、博士生導師,中國計算機學會高級會員,主要研究方向為數據庫理論與技術、海量數據存儲與管理。
《大數據》期刊
《大數據(Big Data Research,BDR)》雙月刊是由中華人民共和國工業和信息化部主管,人民郵電出版社主辦,中國計算機學會大數據專家委員會學術指導,北京信通傳媒有限責任公司出版的中文科技核心期刊。
關注《大數據》期刊微信公眾號,獲取更多內容
往期文章回顧
“全息數字人”——健康醫療 大數據應用的新模式
醫療數據治理——構建高質量醫療大數據智能分析數據基礎
基于深度學習的異構時序事件患者數據表示學習框架
人工智能在醫學影像中的研究與應用
基于數據挖掘的觸診成像乳腺癌智能診斷模型和方法
總結
以上是生活随笔為你收集整理的分布式数据库在金融应用场景中的探索与实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:徐晔(1964-),男,博士,中国
- 下一篇: 指向函数的指针变量