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