大家好,我是飛哥!
咱們很多讀者都是在互聯(lián)網(wǎng)公司工作,大部分同學(xué)會(huì)有一種認(rèn)知偏差,總以為互聯(lián)網(wǎng)的業(yè)務(wù)對(duì)技術(shù)的要求是最高的。但其實(shí)不然。
比如在對(duì)延時(shí)的要求上,高頻量化交易就比互聯(lián)網(wǎng)的延遲要求要高得多。在數(shù)據(jù)庫(kù)上,銀行、證券、電信在這些行業(yè)中對(duì)數(shù)據(jù)庫(kù)的要求也比互聯(lián)網(wǎng)高得多。拿銀行舉例,銀行的系統(tǒng)里是連一分錢都不能錯(cuò)的,而且即使是十幾年前的交易記錄也必須能夠查出來,對(duì)安全性的要求就更不用說了。
在過去很長(zhǎng)的一段時(shí)間里,這些行業(yè)選擇數(shù)據(jù)庫(kù)基本上就是 Oracle 和 IBM 的天下,各家企業(yè)在選型時(shí)基本就是 Oracle 和 DB2 之間二選一。但前幾天看到 IDC 發(fā)布了《中國(guó)分布式關(guān)系型數(shù)據(jù)庫(kù) 2023 年廠商評(píng)估》的報(bào)告,很高興看到國(guó)內(nèi)數(shù)據(jù)庫(kù)已經(jīng)發(fā)展的非常的好了,老東家騰訊云的 TDSQL 也躋身進(jìn)了領(lǐng)導(dǎo)者位置,并在國(guó)內(nèi)市場(chǎng)上取得了第一的成績(jī)。
IDC 是全球最頂級(jí)的市場(chǎng)研究和咨詢機(jī)構(gòu)。它通過大量的數(shù)據(jù)進(jìn)行市場(chǎng)分析,對(duì)科技行業(yè)里的各種技術(shù)各家廠商進(jìn)行分析。為企業(yè)提供專業(yè)的咨詢服務(wù)。這家公司的分析報(bào)告是非常權(quán)威的,在市場(chǎng)中認(rèn)可度非常的高。
圖片
那么什么是分布式數(shù)據(jù)庫(kù),其分布式、強(qiáng)一致性、高可用以及無損升級(jí)等特性又是如何實(shí)現(xiàn)的呢。今天我們?cè)谶@篇文中使用 TDSQL 技術(shù)架構(gòu)來進(jìn)行學(xué)習(xí)和理解。
傳統(tǒng)的 Oracle 和 DB2 都屬于傳統(tǒng)的單體數(shù)據(jù)庫(kù)架構(gòu)。由于數(shù)據(jù)的進(jìn)一步的大規(guī)模的增長(zhǎng),這種傳統(tǒng)架構(gòu)出現(xiàn)了不少的弊端。一個(gè)弊端就是擴(kuò)展性問題。單機(jī)的性能再?gòu)?qiáng)存儲(chǔ)再大都不可能承受這些行業(yè)里的大規(guī)模的存儲(chǔ)和計(jì)算需求。
雖然可以通過分庫(kù)分表的方式來一定程度提供擴(kuò)展性,但這種擴(kuò)展性對(duì)應(yīng)用不透明。應(yīng)用需要知道底層的集群、庫(kù)、表的實(shí)現(xiàn)細(xì)節(jié),代碼寫起來很臟,后期也不好維護(hù)。另一個(gè)弊端是存儲(chǔ)和計(jì)算沒有分離,總有一個(gè)資源是浪費(fèi)的。
另外還有個(gè)更重要的原因是漂亮國(guó)脾氣很不穩(wěn)定,動(dòng)不動(dòng)就封鎖咱一下,搞得國(guó)內(nèi)各行各業(yè)都擔(dān)驚受怕。在銀行、證券、電信這種支柱型的行業(yè)里,數(shù)據(jù)是容不得出一點(diǎn)差錯(cuò)的。所以近年來,這些行業(yè)都在積極地在國(guó)內(nèi)尋找平替產(chǎn)品。
所以數(shù)據(jù)庫(kù)行業(yè)需要一些國(guó)內(nèi)的產(chǎn)品出來解決以上問題。
在騰訊早在 2002 年的時(shí)候,也主要是使用 Mysql 來存儲(chǔ)騰訊的計(jì)費(fèi)等數(shù)據(jù),但后來由于業(yè)務(wù)的快速發(fā)展,用戶量越來越大,增值業(yè)務(wù)收入規(guī)模也越來越大,對(duì)可用性的要求水漲船高,就開始自研分布式數(shù)據(jù)庫(kù),大約到了 2012 年的時(shí)候 TDSQL 就形成了雛形,在公司內(nèi)部提供金融級(jí)的高一致性、可靠性的服務(wù)。
在 2014 年的時(shí)候,騰訊系微眾銀行成立。在做存儲(chǔ)技術(shù)選型的時(shí)候,經(jīng)過反復(fù)的測(cè)試驗(yàn)證,發(fā)現(xiàn) TDSQL 已經(jīng)滿足了銀行對(duì)一致性、可用性的需求。開始采用 TDSQL 作為核心業(yè)務(wù)的底層存儲(chǔ)。
后面公有云蓬勃開始發(fā)展的時(shí)候,TDSQL 自然就作為騰訊分布式關(guān)系型數(shù)據(jù)庫(kù)被推向了很多銀行、金融機(jī)構(gòu)。截止到 2023 年,在 4000 多家國(guó)內(nèi)的各種金融、公共服務(wù)、電信、證券等行業(yè)得到了應(yīng)用,服務(wù)了30家金融機(jī)構(gòu)完成核心系統(tǒng)的替換,中國(guó)十大銀行中七家都應(yīng)用了 TDSQL。
TDSQL 是一個(gè)對(duì)應(yīng)用層透明的分布式數(shù)據(jù)庫(kù)。應(yīng)用可以像使用單機(jī)數(shù)據(jù)庫(kù)一樣簡(jiǎn)單地使用,不必像分庫(kù)分表那樣關(guān)心底層的劃分策略。數(shù)據(jù)庫(kù)自己內(nèi)部封裝事務(wù)、分片、災(zāi)備、擴(kuò)展性等功能。
圖片
從這個(gè)架構(gòu)圖中可見,用戶請(qǐng)求只需要和負(fù)載均衡通信即可,完全不用關(guān)心數(shù)據(jù)庫(kù)底層的實(shí)現(xiàn)。
而在架構(gòu)內(nèi)部主要是三部分組成,一是管理節(jié)點(diǎn)、二是計(jì)算節(jié)點(diǎn)、三是存儲(chǔ)節(jié)點(diǎn)。沒錯(cuò),現(xiàn)代的分布式存儲(chǔ)都是計(jì)算和存儲(chǔ)相分離的。這樣可以做到可以單獨(dú)進(jìn)行擴(kuò)展。
當(dāng)有用戶請(qǐng)求到來時(shí),負(fù)載均衡組件會(huì)把請(qǐng)求發(fā)送給 SQL 引擎。從用戶視角來看,它看到的是一張整體上的表。
SQL 引擎會(huì)對(duì)用戶輸入的 sql 語句進(jìn)行詞法、語法解析,還需要處理分布式場(chǎng)景下的全局自增字段等邏輯。然后根據(jù) MetaCluster 中存儲(chǔ)的元信息決定將請(qǐng)求發(fā)往后面的哪些數(shù)據(jù)節(jié)點(diǎn)。這里要注意的是,用戶訪問的表實(shí)際上是可能被分布在后臺(tái)的多個(gè) SET 內(nèi)的,用戶對(duì)此并不知情。所以 SQL 引擎會(huì)向多個(gè)數(shù)據(jù)節(jié)點(diǎn)發(fā)起請(qǐng)求,各個(gè)節(jié)點(diǎn)返回后,SQL 引擎進(jìn)行聚合后返回給用戶。
這是分布式數(shù)據(jù)庫(kù)的首要目標(biāo),對(duì)用戶屏蔽分布式,只在邏輯上提供整張的表訪問,簡(jiǎn)化用戶使用數(shù)據(jù)庫(kù)的方式。
由于 SQL 引擎只負(fù)責(zé)計(jì)算,不負(fù)責(zé)存儲(chǔ),本身是無狀態(tài)的。該節(jié)點(diǎn)只需要重點(diǎn)關(guān)注 CPU 和 內(nèi)存相關(guān)的性能優(yōu)化即可。在硬件上,也可以選擇計(jì)算型的硬件。
SET 是分布式數(shù)據(jù)庫(kù)實(shí)例。一個(gè) SET 內(nèi)部包含了 Master、Slave 節(jié)點(diǎn)。每個(gè) SET 中存儲(chǔ)哪些數(shù)據(jù)是由 shardkey 來進(jìn)行分散的。在數(shù)據(jù)接入的時(shí)候,TDSQL 采用 raft 協(xié)議的強(qiáng)同步復(fù)制,Master 接收到業(yè)務(wù)請(qǐng)求后,等待其中一個(gè) Slave 應(yīng)答成功后才會(huì)返回成功,否則不返回。通過這種方式實(shí)現(xiàn)強(qiáng)一致性。
在每個(gè)節(jié)點(diǎn)內(nèi)部,都包含一個(gè) Agent 和具體的 Mysql 實(shí)例。這種架構(gòu)有點(diǎn)類似于微服務(wù)中 Mesh 架構(gòu) 中用 Sidecar 把微服務(wù)框架功能獨(dú)立出來一樣。Agent 和存儲(chǔ)解耦,好處是 Agent 可以監(jiān)控并上報(bào) Mysql 的狀態(tài),而且系統(tǒng)升級(jí)的時(shí)候,也可以單獨(dú)升級(jí)和重啟 Agent,而不用重啟 Mysql 進(jìn)程,可以做到無損升級(jí)。
如果 Master 節(jié)點(diǎn)發(fā)生故障,它的 Agent 會(huì)上報(bào)它的異常給 MetaServer。接著 Master 會(huì)降級(jí)成為 Slave。再?gòu)氖O碌?Slave 中選舉一個(gè)出來作為 Master。后面的請(qǐng)求就會(huì)發(fā)送給新的 Master。整個(gè)容災(zāi)切換機(jī)制都無需人為干預(yù),通過這種方式實(shí)現(xiàn)高可用。
圖片
以上就是 TDSQL 的強(qiáng)一致性、無損升級(jí)、高可用在架構(gòu)上實(shí)現(xiàn)的原理。
另外還有一個(gè)我覺得在 TDSQL 中比較值得學(xué)習(xí)的一個(gè)點(diǎn)是它的扁鵲智能化 DBA 平臺(tái)。我們大家在做自己的系統(tǒng)時(shí)也可以借鑒這個(gè)思路實(shí)現(xiàn)自己系統(tǒng)的高效運(yùn)維。
當(dāng)集群規(guī)模大了之后,必然會(huì)出現(xiàn)各種各樣的問題。比如網(wǎng)絡(luò)異常發(fā)生、SSD 衰老,如果這些問題全部依賴人工去排查和處理,效率太低了。而且未來分布式系統(tǒng)的規(guī)模會(huì)越來越大,所以人工維護(hù)必然需要被代替。以下是 TDSQL 的扁鵲平臺(tái)架構(gòu)。
圖片
DBA 靠這個(gè)平臺(tái)可以發(fā)現(xiàn)各種集群中運(yùn)行的問題。比如差 SQL、擴(kuò)容異常、鎖分析等等各種日常運(yùn)維工作。更高效率的運(yùn)維也是實(shí)現(xiàn)高可用的另一個(gè)關(guān)鍵要素。
最后,再次恭喜 TDSQL 登錄中國(guó)分布式關(guān)系型數(shù)據(jù)庫(kù)“領(lǐng)導(dǎo)者”類別,這份來自業(yè)界的高度評(píng)價(jià)十分難得。相信國(guó)產(chǎn)數(shù)據(jù)庫(kù)未來一定會(huì)越來越強(qiáng)!
本文鏈接:http://www.tebozhan.com/showinfo-26-41675-0.html聊聊分布式數(shù)據(jù)庫(kù)TDSQL的技術(shù)架構(gòu)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com