訂閱
糾錯
加入自媒體

首款國產(chǎn)開源數(shù)據(jù)庫TBase核心架構(gòu)演進(jìn)

2020-06-09 10:15
IT168
關(guān)注

在執(zhí)行計(jì)劃生成層面,我們生成執(zhí)行計(jì)劃的策略有兩種。

第一種是規(guī)則優(yōu)化(RBO),即 RULE BASED OPTIMIZER,顧名思義就是在生成執(zhí)行計(jì)劃的時(shí)候,是根據(jù)SQL的模式,遇到了什么條件,就生成什么樣的執(zhí)行計(jì)劃給它。這種方式其實(shí)在實(shí)踐起來比較簡單,某些方面比較高效,缺點(diǎn)是彈性不足,對一些復(fù)雜場景,它很難去應(yīng)對,沒有足夠的彈性。

第二種是代價(jià)優(yōu)化(CBO),即COST BASED OPTIMIZER,這是用的比較多的主流優(yōu)化方式。它主要會從目標(biāo)SQL諸多可能的執(zhí)行路徑中選擇成本比較小的一條作為執(zhí)行計(jì)劃,成本值是根據(jù)目標(biāo)SQL語句所涉及到的表、索引、列等相關(guān)對象的統(tǒng)計(jì)信息算出來的。它的適用性會比較好,特別適合一些復(fù)雜的場景,而且在一些復(fù)雜場景下會性能表現(xiàn)比較穩(wěn)定。缺點(diǎn)是復(fù)雜度比較高的,有一定的前置條件,包括我們統(tǒng)計(jì)信息的準(zhǔn)確度,代價(jià)計(jì)算模型的一個(gè)精確度。TBase來講的話,兩塊都會有,更多的會偏向于后面的代價(jià)優(yōu)化(CBO)。

TBase在整個(gè)設(shè)計(jì)分布式執(zhí)行方式的時(shí)候,我們有一個(gè)很明確的目標(biāo):希望業(yè)務(wù)的SQL不需要感知集群結(jié)構(gòu),它可以像使用單機(jī)的數(shù)據(jù)庫一樣來使用TBase。

也就是說客戶和業(yè)務(wù)在使用TBase的時(shí)候,他不用考慮分庫分表的問題,也不用考慮這個(gè)集群里面有多少個(gè)節(jié)點(diǎn),SQL是怎么寫的,他就可以像使用普通的單機(jī)的數(shù)據(jù)庫一樣來使用TBase。為了達(dá)成這個(gè)目標(biāo),我們使用了前面我們講到的各種各樣能夠幫助我們解決問題的技術(shù)。比如說我們在進(jìn)行查詢優(yōu)化的的時(shí)候,如果發(fā)現(xiàn)表這一列都是按照分布列來進(jìn)行查詢的,就走規(guī)則的優(yōu)化,查詢直接下推;如果我們不是按照分布列來進(jìn)行查詢的,是按照表A是分布列,表B是非分布列,這個(gè)時(shí)候進(jìn)行查詢的時(shí)候就會根據(jù)代價(jià)來進(jìn)行判斷。如果這個(gè)表B足夠小的話,會通過廣播的方式,把表B在每個(gè)節(jié)點(diǎn)上都形成一個(gè)完美的副本,拿表A進(jìn)行查詢。如果表A和表B都很大,這個(gè)時(shí)候我們就會選擇一個(gè)成本相對比較低的表來進(jìn)行重分布,選擇的方式是表B。假如說表B相對于表A要小一點(diǎn),按照表B來進(jìn)行重分布,來完成整個(gè)查詢。這個(gè)用在上面,我提到了包括redistribution和replication,還有push down。后面兩個(gè)我們push的是PLAN。

在TBase里面,在MPP的架構(gòu)下,我們具備了并行計(jì)算的架構(gòu)基礎(chǔ)。

全并行大概分幾級,其中第一級是節(jié)點(diǎn)級的,也就是說一個(gè)SQL來了之后,我們會把這個(gè)查詢的同時(shí)發(fā)給三個(gè)節(jié)點(diǎn),三個(gè)節(jié)點(diǎn)同時(shí)開始計(jì)算。然后在節(jié)點(diǎn)內(nèi)部的話,我們會進(jìn)行算子級的并行。比如說進(jìn)行一個(gè)Hash JOIN,我們會多進(jìn)程的完成這樣一個(gè)Hash JOIN的過程。在每一步計(jì)算的過程中,還會使用指令級的SIMD的一些指令來加速。這樣其實(shí)做到了從節(jié)點(diǎn)級到進(jìn)程級以及指令級的一個(gè)并行。

前面介紹了我們對性能進(jìn)行優(yōu)化的方式,這里講一下數(shù)據(jù)庫常見的容災(zāi)方式。

數(shù)據(jù)庫容災(zāi)方式大概分幾種:

第一種是我們傳統(tǒng)單機(jī)數(shù)據(jù)庫,包括MySQL、PG、ORACLE,常規(guī)的這種容災(zāi)方式也是通過流復(fù)制的方式,流復(fù)制的基礎(chǔ)是基于日志,或者是基于數(shù)據(jù)塊。復(fù)制方式有同步復(fù)制和異步復(fù)制,所謂同步復(fù)制是等主機(jī)返回請求之前一定要等到備機(jī)的日志可靠落地之后,它才會返回成功給客戶端。異步的話是主機(jī)事務(wù)日志落盤后,異步把日志發(fā)送到備機(jī),不用等待備機(jī)事務(wù)的可靠落盤。同步和異步對外體現(xiàn)的主要是業(yè)務(wù)的RTO、RPO的影響。這種方式一般來講下,我們在主機(jī)上提供讀寫能力,在備機(jī)上提供只讀能力。

第二種容災(zāi)方式大家看到的比較多,主要是使用一致性協(xié)議來復(fù)制日志,也就是說每個(gè)寫入請求來的時(shí)候,它都會通過一致性協(xié)議進(jìn)行集群內(nèi)部的協(xié)商來達(dá)成最終的一致。這樣的架構(gòu)的好處是每個(gè)副本都可以寫入,但缺點(diǎn)也比較明顯,每個(gè)寫入都需要經(jīng)過若干次的網(wǎng)絡(luò)同步,效率其實(shí)要比基于流復(fù)制的容災(zāi)方式弱一些。因?yàn)樗拿總(gè)副本都有完整的一個(gè)數(shù)據(jù),而且都可以進(jìn)行導(dǎo)換,所以它的RTO表現(xiàn)會好一點(diǎn)。從這里其實(shí)我們可以看出來,數(shù)據(jù)庫容災(zāi)的本質(zhì)其實(shí)就是數(shù)據(jù)的多副本,各種方案的區(qū)別主要是在于多副本我們是怎么實(shí)現(xiàn)的。TBase多副本實(shí)現(xiàn)沒有使用一致性協(xié)議。

接下來給大家介紹下TBase運(yùn)維管控架構(gòu),TBase作為一個(gè)分布式系統(tǒng),整體的架構(gòu)是比較復(fù)雜。

我們需要一個(gè)運(yùn)維管控系統(tǒng)來保證整個(gè)系統(tǒng)的可靠運(yùn)行和高效的運(yùn)維。整個(gè)TBase的運(yùn)維管控系統(tǒng)如圖所示,圖中最上層是ETCD集群,即TBase的元數(shù)據(jù)管控集群。另外它提供一些控制中心的選主的能力。第二層是運(yùn)維管控中心,它實(shí)時(shí)的監(jiān)控集群的狀態(tài),同時(shí)這里也可以去觸發(fā)一些故障處理邏輯。第三層是數(shù)據(jù)探活集群,這一層主要是有部署在每臺服務(wù)器上的Agent來完成,它會實(shí)時(shí)的去探測每個(gè)數(shù)據(jù)庫實(shí)例的健康度并進(jìn)行上報(bào),同時(shí)它也會執(zhí)行上層的運(yùn)維管控中心下發(fā)的一些指令。最下層是數(shù)據(jù)庫實(shí)例,這一層其實(shí)是通過資源池化的方式來進(jìn)行資源隔離,同時(shí)內(nèi)部也進(jìn)行了一些容災(zāi)的控制。

這里我提一下數(shù)據(jù)庫里面比較重要的備份問題。我們?yōu)槭裁匆M(jìn)行冷備?

前一段時(shí)間發(fā)生的數(shù)據(jù)冷備被刪除,導(dǎo)致業(yè)務(wù)中斷估計(jì)大家還有印象。所謂的冷備其實(shí)也是數(shù)據(jù)庫安全的最后一套防線,我們一般什么時(shí)候用到冷備呢?經(jīng)常是在發(fā)生重大的誤操作的時(shí)候,比如說我不小心把庫刪了,或者說整個(gè)機(jī)房所有的副本都掛了,另外如果說數(shù)據(jù)做了惡意的修改或者篡改之后,需要把數(shù)據(jù)恢復(fù)到一定時(shí)間以前的數(shù)據(jù),冷備是數(shù)據(jù)庫的最后一個(gè)保護(hù)傘,對數(shù)據(jù)庫來講是非常重要的。

冷備可能會存在的一些問題。

分布式場景下數(shù)據(jù)庫的冷備存在的問題和分布式事務(wù)存在的問題是很類似的。我們集群內(nèi)部會有多個(gè)節(jié)點(diǎn)在并行跑事務(wù),最難搞的問題是在分布式冷備系統(tǒng)中如何找到一致性的恢復(fù)點(diǎn)。如圖,集群里有兩個(gè)節(jié)點(diǎn)DB1和DB2,冷備點(diǎn)1和4的,恢復(fù)就是一致的。冷備點(diǎn)2和冷備點(diǎn)3就是不一致的。整體一致點(diǎn)的選擇非常重要。如果選擇不當(dāng)就會造成數(shù)據(jù)的損失和不一致。

分布式數(shù)據(jù)庫里面,如何尋找一致的冷備點(diǎn)也有一些方法可以參考。

第一種是要求在做冷備的時(shí)候,通過設(shè)置事務(wù)柵欄來保證整個(gè)事務(wù)的一致性,我們會在所有的日志里面設(shè)置一致性標(biāo)簽,然后恢復(fù)的時(shí)候,指令說恢復(fù)這個(gè)標(biāo)簽就停下來,這樣可以保證整個(gè)事務(wù)的一致性。但是這里有一個(gè)缺點(diǎn),在進(jìn)行一致創(chuàng)建的時(shí)候,必須得去阻塞或者延遲當(dāng)前事務(wù)的執(zhí)行,對系統(tǒng)的影響其實(shí)還是比較大的。TBase是通過時(shí)間戳的方式,每個(gè)事務(wù)都有一個(gè)時(shí)間戳,那么在選擇冷備點(diǎn)的時(shí)候,就可以決定說要恢復(fù)到某個(gè)具體的時(shí)間戳,通過事務(wù)的時(shí)間戳我們就可以很好的保證整個(gè)冷備恢復(fù)的一致性。

前面介紹了TBase在執(zhí)行和冷備及可靠性分析的設(shè)計(jì),接下來介紹下TBase特有的安全能力,在支撐公司業(yè)務(wù)過程中摸索出來的一套比較有效的數(shù)據(jù)安全管理體系,我們管它叫MLS(multiple layer security)。

這個(gè)數(shù)據(jù)安全體系的基礎(chǔ)是三權(quán)分立,所謂的三權(quán)分立指的是:安全管理員、審計(jì)管理員、數(shù)據(jù)管理員三個(gè)角色在系統(tǒng)里面相互隔離。安全管理員主要是負(fù)責(zé)安全規(guī)則的制定;審計(jì)管理員主要負(fù)責(zé)審計(jì)規(guī)則的制定;數(shù)據(jù)管理員更多的相當(dāng)于我們之前的DBA的一個(gè)角色。這三個(gè)角色之間在權(quán)限上和能力上來講是完全隔離的,相互之間在功能上沒有交叉。安全管理員的安全規(guī)則會約束到審計(jì)管理員和數(shù)據(jù)管理員,然后審計(jì)管理員的審計(jì)規(guī)則會約束到安全管理員和數(shù)據(jù)管理員。接下來給大家分別介紹下:TBase的行級強(qiáng)制安全規(guī)則、列級的安全規(guī)則、數(shù)據(jù)脫敏和加密。

1、TBase的行級強(qiáng)制安全規(guī)則。

行級安全規(guī)則保證在TBase中我們可以做到數(shù)據(jù)行級安全的權(quán)限控制。安全規(guī)則三元組:一個(gè)是level(安全級別),這個(gè)安全級別是從上往下兼容,也就是說我如果具有絕密級別的安全權(quán)限的話,我就可以獲取到機(jī)密、保密和公開級別的數(shù)據(jù)的一個(gè)訪問權(quán)限。第二個(gè)是Catalog/compartment(目錄控制Catalog/compartment,這是一個(gè)集合的概念。也就是說如果有了α、β和∑這三個(gè)對象整體的權(quán)限的話,我就可以單獨(dú)的去訪問只有α或者β或者∑其中一個(gè)或者幾個(gè)組合的數(shù)據(jù)。最后一個(gè)是Group(組),這個(gè)概念比較容易理解,類似于公司組織關(guān)系,上級節(jié)點(diǎn)具有下級節(jié)點(diǎn)的權(quán)限。

<上一頁  1  2  3  4  下一頁>  余下全文
聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

    掃碼關(guān)注公眾號
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯
    x
    *文字標(biāo)題:
    *糾錯內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號