作為數據基礎設施的重要組成部分,數據庫在其中扮演著重要的角色。近些年來,數據庫整體發展也呈現出較之以往很大的不同。
其一是開源數據庫受到更為廣泛的關注,從多家機構的最新報告來看,開源數據庫無論從產品數量還是受關注程度都超過商業數據庫。開源這一新模式,正成為未來數據庫發展的主流。
其二是云計算成為未來主要資源供給方式得到普遍共識。已經有越來越多的企業選擇在云上構建基礎環境,包括云上數據庫的發展速度也遠高于非云環境。據樂觀估計,在未來 5~10 年云數據庫將占據整體數據庫市場的七成以上。此外,對遷移到公有云、使用多云環境等問題,也普遍被企業所接受。
其三是數據融合趨勢,針對數據多場景應用,使用融合技術簡化訪問,提升效率。作為數據使用高地,金融行業一方面對數據庫有著極高的要求,一方面又面臨很多來自數據新的挑戰,諸如海量規模、高并發、數據安全、實時分析等訴求亟待解決。分布式數據庫的出現,迎合這一發展趨勢,對于金融企業解決上述問題帶來新的解決思路。
本文從金融用戶角度入手,對如何選擇分布式數據庫及選型后的最優實踐進行闡述。
金融業數據庫選型背景
隨著企業數字化轉型深入,對于數據使用場景也呈現多元化趨勢,正有越來越多數據被企業利用起來。金融行業作為數據庫應用“高地”,這一趨勢表現更為明顯。同時我們也看到,近些年來數據庫領域也發展迅速,有分布式數據庫、多模數據庫、云數據庫為代表的產品不斷涌現。這些新興數據庫在特定場景有很好的使用前景。基于上面兩種趨勢,金融行業很多企業都在面臨選擇數據庫的問題。
選型技術層面要素分析
從技術角度來看,在數據庫選型中有哪些要素需要考慮呢?下面以近期比較關注的分布式數據庫的選型為例,說明下重點考量的技術要素。
分布式事務
分布式架構,自然會帶來分布式事務的問題。由于需要跨節點的網絡交互,因此較單機事務會有很多損耗,隨之帶來的是事務處理時間較長、事務期間的鎖持有時間也會增加,數據庫的并發性和擴展性也會受到影響。針對單筆事務來說,分布式事務執行效率是肯定會有降低的,分布式帶來的更多是整體處理能力的提升。
性能
由于分布式數據庫通常使用的二階段提交和各節點之間的網絡交互會有性能損耗,分布式數據庫優勢不是單個簡單 SQL 的性能,而是大數據量的 SQL 查詢,每個節點會將過濾之后的數據集進行返回,會提升性能,并且分布式數據庫的優勢是并發,大量的 SQL 并發也會比單機數據庫強大,應用需要做分布式架構的適配,將串行執行機制盡量都改造成并發處理。對于含有需要節點間數據流動的 SQL 語句的事務,OLTP 類的分布式數據庫處理效率一般較差,事務處理時間會較長,事務期間的鎖持有時間也會增加,數據庫的并發性和擴展性也會受到影響。建議盡量改造存在跨節點數據流動的 SQL 語句(主要是多表關聯)的事務。
數據備份
分布式數據庫的一致性保證通過內部時鐘機制所提供的全局時間戳,所有節點都會遵循該機制,所以備份恢復的增量也是基于全局時間戳,但是分布式數據庫的備份解決方案最重要的標志為是否支持物理級的備份,物理級的備份會比邏輯的備份性能吞吐大很多,還有就是是否支持一些分布式備份方案,比如 S3 協議接口,是否支持壓縮等功能。分布式數據庫基本都具備備份和恢復方案,通常從備節點進行連續備份(全量+日志),恢復的時候指定節點進行恢復到指定時間點,整個過程可配置自動任務、自動執行。
高可用
分布式數據庫大多都是基于多數派協議,同城雙中心不適合多數派的要求,同城數據級多活建議采用三中心部署。如果同城主備可以采用集群級的異步復制,異地建議采用集群級的 binlog 異步復制,建議實例的主備節點設置在同城兩個雙活數據中心,仲裁節點三機房部署;異地災備單獨啟實例與本地實例進行數據庫間同步,也可以將本地備份文件 T+1 恢復到異地災備。
數據一致性
分布式數據庫大多都是通過獲取全局時鐘時間戳,采用二階段提交,可以實現一致性的保證,分庫分表架構對于事務的一致性,需要應用層考慮,比如通過合理的分區鍵設計來規避。部分分布式數據庫對于跨節點事務目前還是實現的最終一致,對于全局一致性讀,一般通過引入類似全局時間戳的組件統一管理全局事務,在數據庫選型時可以重點關注廠商對這一塊的實現。如果目前暫時無法提供全局一致性讀的分布式數據庫,對于要依賴分布式事務“中間狀態”的業務,優先進行業務改造進行規避,其次通過合理的數據分片設計讓其在單節點內完成。
數據分析
分布式數據庫,大多采用存算分離架構。針對數據分析場景,需要對數據從下層存儲節點上移到計算節點,這對分布式數據庫提出了更高的要求。一方面可通過算子下推等技術,減少需傳輸到計算節點的數量;一方面針對匯聚后的結果需要通過流式處理等方式,規避諸如 OOM 的問題;此外也可采用如 MPP 等并行處理技術,加速數據分析過程。
選型過程問題痛點分析
在選型過程中,會遇到來自以下幾方面的痛點:
由于分布式數據庫整體架構還比較新,也是近十年來逐步發展完善的。針對新型架構的諸多特點,包括廠商和用戶還都在不斷摸索積累之中,還需要有個長期實踐的過程。此外,新架構也需要有個逐步成熟完善的過程。
大量產品來自國內數據庫廠商,其發展周期相對較短,還需要在產品成熟度、穩定性、周邊生態等方面不斷完善。對于用戶來說,一方面需面臨產品多、技術棧多的現狀;另一方面還需面對成熟度不足等問題,存在較多痛點。
近些年金融行業發展迅速,各種新的業態產品不斷涌現,這些對作為底層數據基礎的數據庫也提出了更高的要求。
數據庫選型技術架構
分布式路線分析
針對分布式數據庫的發展路線,大體可分為兩種:
分布式中間件
這種架構是從中間件路線演進而來。其采用存儲與計算分離架構,底層采用標準單機數據庫,副本間基于數據庫主從復制機制。上層承擔計算,并可將部分計算下推到存儲節點執行。這種架構在分布式事務、全局 MVCC 等方面,往往存在一定難點,各廠商也有各自解決之道。
原生分布式
這種架構正是受到 Google 論文影響演進而來。其采用存儲與計算分離架構,底層采用單機庫(不一定是關系型),副本間采用分布式一致性協議完成復制,支持多數派提交。上層承擔計算,并可將部分計算下推到存儲節點執行。
重點需求滿足情況
針對上述遇到的痛點,兩類產品實現邏輯也所有不同:
路線場景分析
從數據使用場景來講,可大致按下面進行劃分:
針對不同的場景,不同分布式數據庫路線產品各有所長:
針對事務類場景下,強調高并發聯機交易、對分析能力要求不高的場景比較適合分布式中間件路線產品。
針對事務類及事務/分析混合類場景,既要滿足常規聯機交易場景的同時,還需滿足分析類的一部分能力,這種情況比較適合原生分布式產品。基于原生分布式的 HTAP 數據庫,用一個數據平臺應對規模化交易和實時分析,提升業務決策的時效性,降低數據技術棧的復雜性,越來越多的混合負載需求推動了 HTAP 在金融場景的落地。
金融業 HTAP 應用場景實踐
金融場景下 HTAP 的分析
在金融企業數字化轉型的過程中,各類業務對“海量、實時、在線”的數據需求變得愈發迫切。在金融企業運營場景中,實時推薦、精準營銷是企業提升競爭力的一大因素。在企業風險控制場景中,實時風控、反欺詐等業務開展可以更早地識別和阻斷風險可以讓企業減少損失,HTAP 正是基于上述背景誕生出的需求,為各類實時數據處理需求提供了解決方案。
某金融用戶 HTAP 的架構設計和實踐
隨著金融市場同業業務的蓬勃發展,業務部門對于交易數據的實時統計分析和展現有了急切的需求。基于大數據技術棧的 T+1 報表模式,已無法滿足業務部門通過實時分析交易發生情況來防范風險以及提供決策的需求,迫切的需要找到一種能讓數據實時變現的解決方案。結合金融行業特點,在技術選型過程中,重點考察待選產品如下能力:包括承載業務復雜查詢處理、海量數據容量存儲、應用透明無侵入、開發協議可適配及混合負載下的表現等。經過測試,選擇 TiDB 作為基礎數據庫平臺,基于其 HTAP 的特性,打造金融市場實時數據平臺,目前已投產了靈活報表和交易對手分析等應用場景。整個處理流程包括:
· Flink 消費交易系統產生的實時增量數據,對部分事實表進行拉寬處理并寫入 TiDB
· 維表和其他明細表直接寫入 TiDB
· BI 工具直接連接 TiDB,提供秒級的實時計算和分析能力
這一案例中,構建千萬及以上數據規模、超過五張表的復雜關聯實時查詢能力,讓業務人員在極短的時間內(大部分報表執行時間為幾十到幾百毫秒、個別報表秒級別)獲得實時交易的詳情。
未來 HTAP 的場景發展
實時數據處理技術還以某些具體的應用場景為主,從現狀來看以事件驅動類、流式管道數據計算類為代表的場景,已經開始使用 HTAP 場景的。未來隨著 HTAP 計算能力進一步的提升,實時全量數據的計算將帶來更多場景。
面向未來的架構趨勢
云原生
從未來的發展趨勢來看,云方向是一個大的趨勢。
從上圖可見,云數據庫的發展經歷了幾個階段,從云托管、云服務、云原生之路。
云托管,是最接近傳統數據庫系統的部署模式。本質是將原本部署于 IDC 機房內物理服務器上的傳統數據庫軟件部署在了云主機上。這種模式下,云平臺提供諸如高可用、異地災備、備份恢復、數據安全、SQL 審計、性能優化和狀態監測等企業級數據庫管理能力,用戶可減少運維投入即可享受之前同等的服務水平。
云服務,之前的托管架構中,受限于傳統數據庫架構的局限,未能完全發揮云計算的優勢。在諸如彈性擴展、高性能、高可用等方面,均有不足。到了云服務時代,充分利用云基礎設施的底層能力,提供定制化的數據庫產品。
云原生,與之前的云服務架構不同,這一階段產品將更為充分地利用云基礎設施的能力,通過多層資源解耦,可享受云帶來的彈性擴展、按需供給、超大規模能力,真正做到了數據庫與云的深度結合。從長期來看,金融機構逐漸把業務和技術向云原生演進,實現傳統應用遷移上云和云原生改造是重要的方向。在這個過程中需要考慮分布式數據庫對 K8s、微服務應用的支持,提供高效、彈性調度能力,同時需要兼顧開發運維和敏捷度。
多云方向
云作為未來主流的資源供給方式,多云必然是企業不得不考慮的問題。多云通常指金融機構同時采用多種不同的云環境組合來滿足業務需求的多樣性和金融業監管的要求。如何圍繞數據打造面向未來的多云 IT 架構,滿足在多云之間提供數據服務能力,擺脫單一供應商的弊端,是必須考慮的問題。多云架構對分布式數據庫的考察重點聚焦于跨地域、跨公有私有云、跨本地 IDC 和 K8s 的部署、服務提供與統一運維能力等。