首款國產(chǎn)開源數(shù)據(jù)庫TBase核心架構(gòu)演進(jìn)
舉個例子,比如說上圖中的右邊是我們的數(shù)據(jù),左邊是我們的用戶。
成都分公司總經(jīng)理能夠從級別這里看到所有的數(shù)據(jù)。但是他在目錄這個級別的話,他只能看到成都的機密級別以下的數(shù)據(jù)。同時,因為他的組里面有工程部和人力資源部,他只有這兩個,也就是說他能夠看到工程部和人力資源部的成都的數(shù)據(jù)。對于總部的人力資源總經(jīng)理的話,我們就會發(fā)現(xiàn)他能看到北京和成都的,也就是說能看到所有歸屬地的員工的人力資源里面的數(shù)據(jù)。對于董事長來講,一般董事長的級別能夠看到所有的安全級別的數(shù)據(jù),他能看到北京和成都兩地的數(shù)據(jù)。在組的關(guān)系上來講,董事局一般是整個公司部門里面最高級的部門,所以他在組這個級別上,他就能看到他下屬所有部門的數(shù)據(jù),也就是說對鋼鐵俠來講,他能看到整個公司全部的數(shù)據(jù)。通過這個安全規(guī)則我們就可以做到對數(shù)據(jù)做到行級的過濾、行級的保護(hù)。
2、TBase的列級安全規(guī)則。
在TBase中是通過訪問控制列表來實現(xiàn)的,也就是說我們會在每一個列上加一個ACL的列表來指定這一列對誰有權(quán)限,誰沒有權(quán)限。
比如:我們在薪酬上設(shè)定說普通員工是沒有權(quán)限訪問,對蜘蛛俠或者普通員工來講的話,他看到的數(shù)據(jù)就只有他自己的數(shù)據(jù)。但是對于鋼鐵俠來講,因為鋼鐵俠是董事局的主席,他能看到這兩列所有的數(shù)據(jù)。通過行級權(quán)限控制和列級權(quán)限控制可以得出我們對表里面的數(shù)據(jù)能夠做到行和列的任意訪問的控制。
3、TBase數(shù)據(jù)脫敏和加密。
脫敏和加密面對的場景有一些差別,加密主要面對的是數(shù)據(jù)文件本身的泄露,比如我的文件被別人拖走了,然后他通過代碼可以把數(shù)據(jù)解析出來。我們現(xiàn)在常見的數(shù)據(jù)庫的存儲格式基本上來講是屬于半公開的狀態(tài)。也就是說大家只要拿到了數(shù)據(jù)庫的數(shù)據(jù)文件,只要有一個數(shù)據(jù)程序就可以把它解析出來,我們要通過數(shù)據(jù)中心的加密防止泄露。脫敏主要指的是我的數(shù)據(jù)在訪問的時候,有些數(shù)據(jù)的用戶是沒有權(quán)限去看到它的明文的,但是它還用一些運維的操作或者其他一些工作上的需要,他需要能訪問這些數(shù)據(jù),但是他不需要真正看到這些數(shù)據(jù),這兩個是完全不同的需求。加密在存儲層的時候,存儲的是密文,只有在執(zhí)行這個程序的時候才會對數(shù)據(jù)進(jìn)行解密和加密,然后把它反饋給用戶。對于脫敏的話,存儲的是明文,在buffer里面也是明文,只有在用戶訪問的時候,我們授權(quán)用戶、非授權(quán)用戶來進(jìn)行公平的處理。對授權(quán)用戶得到的就是完整的數(shù)據(jù),對非授權(quán)用戶得到的數(shù)據(jù)就是脫敏以后的結(jié)果。加密和脫敏可以進(jìn)行混合的使用,也就是說我們既可以對存儲內(nèi)容加密,也可以針對不同用戶采用用戶的一個脫敏的規(guī)則,來保證我數(shù)據(jù)訪問的一個隔離。
下面針對TBase MLS透明脫敏和透明加密舉個例子。
我們有兩個脫敏和加密的規(guī)則,也就是說我們會針對非董事長用戶進(jìn)行加密的脫敏。脫敏之后的數(shù)據(jù),我們可以指定一個任意的值來展示給這個非授權(quán)用戶。現(xiàn)在我們對于這個非授權(quán)用戶,也就是說對于成都的分公司總經(jīng)理和總部人力資源總經(jīng)理,他們看到這兩個數(shù)據(jù),一個是0,一個是1。但是對于董事長來講,因為他是超級用戶,他是沒有受到加密和脫敏的約束的,所以他看到的數(shù)據(jù)是正常的數(shù)據(jù)。通過這種方式我們就可以很好的來隔離系統(tǒng)里面不同等級用戶對于同樣一些數(shù)據(jù)看到的視圖,達(dá)到一個隔離的效果。
另外,跟大家分享下TBase MLS的審計能力。
TBase具備完整的審計能力:1、語句審計,對特定的語句類型進(jìn)行審計;2、對象審計,可以針對數(shù)據(jù)庫的某個對象,比如說一張表,或者一個數(shù)據(jù)庫,甚至一個索引來進(jìn)行一個審計。3、記錄用戶審計,記錄用戶所有的訪問。4、還有一個比較好玩兒的功能是TBase的一個系統(tǒng)的審計,我們可以做一些針對用戶自定義的審計規(guī)則,比如審計的時候,我們判斷如果用戶的余額大于這個值的時候,我們就會把它的審計結(jié)果記錄下來。同時我們還會自定義它的審計的一個動作,也就是說如果這個條件被觸發(fā)了之后,我們會去做什么事情。比如說上面這個例子是我們會調(diào)用一個發(fā)文件的功能來做我們的審計。
PartⅢ TBase客戶案例
下面介紹一下TBase的客戶案例。
TBase最早是在2016年初的時候替換了微信支付原有的分庫分表的MySQL集群。當(dāng)時大概每天只有500萬筆,后來支撐到每天數(shù)億筆。整個過程中我們保證了微信支付業(yè)務(wù)的連續(xù)性和穩(wěn)定性。
主要有幾個策略:
第一個是大小商戶策略。微信商戶系統(tǒng),商戶業(yè)務(wù)不同于個人業(yè)務(wù),存在大商戶和小商戶的區(qū)別。大商戶像大型的網(wǎng)購平臺,還有電商平臺,它都屬于大商戶。小商戶就是各種各樣的小店,他們的數(shù)據(jù)量不一樣的,所以我們需要對于不同的用戶量來進(jìn)行一個處理,來保證兩邊服務(wù)的質(zhì)量。
第二個是冷熱分離的策略,因為對于微信支付的系統(tǒng)來講的話,它的冷熱存活都是我們的訂單數(shù)據(jù),都是跟錢相關(guān)的東西。這一塊來講的話,跟我們相關(guān)法律的要求,這些數(shù)據(jù)我們需要存儲四年以上。但是,其實對于其中的數(shù)據(jù),絕大部分來講,比如說三個月以前的數(shù)據(jù)訪問量是非常低的,我們?nèi)绻际褂孟嗤拇鎯Σ呗,我們整個集群有400多T的數(shù)據(jù),如果都是用成本較高的SSD存儲,效率和成本之間不是最優(yōu)的結(jié)果。所以我們就需要一些針對最近3-4個月的熱數(shù)據(jù)和4個月以前的冷數(shù)據(jù)采用不同的存儲策略,來幫助業(yè)務(wù)降低成本,同時來保證我們業(yè)務(wù)的訪問效率。
第三是我們還為業(yè)務(wù)提供了一個跨城容災(zāi)的能力,來保證業(yè)務(wù)的連續(xù)性。
由于來訪問這個系統(tǒng)的業(yè)務(wù)有很多種,運維的同學(xué)也會有潛在的不同的各種各樣的應(yīng)用程序,我們需要針對不同的應(yīng)用程序或者不同的用戶,來提供不同的數(shù)據(jù)視圖,來保證我數(shù)據(jù)整體的可靠性。這個是前面提到的第四是MLS的安全系統(tǒng)。
總結(jié)一下,微信支付整個集群大概是這么一個結(jié)構(gòu)。
圖中最上面是我們CLB,是騰訊內(nèi)部的一個負(fù)載均衡的組件。CLB下面是我們的接入節(jié)點,我們在內(nèi)部首先把數(shù)據(jù)會分為大商戶和小商戶,在下面可以看出來小商戶熱數(shù)據(jù)集群,小商戶冷是商戶冷數(shù)據(jù)集群,大商戶熱是大商戶熱數(shù)據(jù)集群,大商戶冷是大商戶冷數(shù)據(jù)集群。冷熱集群之間的差別在于說存儲設(shè)備是不一樣的。熱集群主要使用的是SSD的設(shè)備,冷集群使用的是普通的TS5的設(shè)備,降低存儲成本。整體來講的話,通過這種方式之后,我們就把我們整個集群的成本降低到了ICB存儲的四分之一左右,全部使用ICB存儲的四分之一。
在外部我們有一個比較大的保險公司,然后上線了200多個TBase實例在跑保險的核心業(yè)務(wù),這里只展示了我們的部署架構(gòu)。
我們上面分為兩個平面,一個是讀寫平面,一個是只讀平面。讀寫平面,業(yè)務(wù)通過VIP來提供讀寫能力。我們的只讀平面通過業(yè)務(wù)VIP在多個節(jié)點做負(fù)載均衡,提供一個業(yè)務(wù)的只讀能力。然后TBase的數(shù)據(jù)在生成之后,我們還需要把這個數(shù)據(jù)同步到我們其他的一些系統(tǒng)里面去,比如說ES、INFORMIX、MONGODB或者說MySQL,甚至同步到Oracle里面去。同步到Oracle和INFORMIX里面去主要是為了保證業(yè)務(wù)切換的可靠性,也就是我們把數(shù)據(jù)再回寫回去,來保證這個切換過程中的穩(wěn)定性。需要補充一下,TBase在往這個后面同步數(shù)據(jù)的時候,其實我們是先通過自己的邏輯解析的數(shù)據(jù),把數(shù)據(jù)解析成了Json格式,通過Kafka同步過去。
PartⅣ 國產(chǎn)化能力建設(shè)
下面介紹一下TBase在數(shù)據(jù)庫國產(chǎn)化方面的工作。第一個,在國產(chǎn)化平臺上面,我們支持了國內(nèi)主要的平臺,包括華為的泰山,還有中標(biāo)麒麟。在操作系統(tǒng)這一塊的話,中標(biāo)麒麟已經(jīng)支持和UOS也在支持中。國產(chǎn)芯片這一塊, X86和ARM我們是支持的比較好的。
在國產(chǎn)化計劃這塊,一定會提到數(shù)據(jù)庫的異構(gòu)遷移,TBase現(xiàn)在已提供了完整的數(shù)據(jù)庫遷移服務(wù)。
主要分為兩部分,一部分是工具,在工具這一塊的話,我們有數(shù)據(jù)的遷移工具,數(shù)據(jù)遷移評估工具以及數(shù)據(jù)校驗的工具。同時我們還提供了專門的專家咨詢服務(wù),專家咨詢的話,我們會有一些遷移評估,方案設(shè)計,改造建議,優(yōu)化建議等等。通過整體的解決方案,我們會把數(shù)據(jù)從原有的商業(yè)數(shù)據(jù)庫,包括Oracle、MySQL等等可以把它很可靠的同步到TBase里面來,來解決數(shù)據(jù)庫國產(chǎn)化替換的一個數(shù)據(jù)遷移的問題。
在硬件這一塊的話,現(xiàn)在我們常見的幾種硬件進(jìn)行了性能的評測,下面是評測結(jié)果。
在前面提到的X86環(huán)境下的話,我們在服務(wù)器上跑了68萬TPM。然后LinuxOne能跑127萬,測試結(jié)果跟服務(wù)器的配置有關(guān)系。說到數(shù)據(jù)庫的國產(chǎn)化替換,肯定是繞不開Oracle兼容的,Oracle兼容TBase做了相當(dāng)多的工作,包括我們的對象的支持,數(shù)據(jù)類型的支持,函數(shù),SQL特性和存儲過程。這一塊我們后續(xù)會進(jìn)行一些增強和擴展,來提升我們的兼容度。
PartⅤ Q&A
Q:分布式表的庫備份,所有的DN都要獨立備份一份嗎?
A:TBase每個DN是整個數(shù)據(jù)庫的數(shù)據(jù)的分片,所以說在備份的時候,至少每個DN是要備份一份出來的,但是它不是獨立的一份,因為在備份邏輯里面會控制保障整個集群的完整性,也就是各個DN之間,每個DN都會有一個相應(yīng)的副本存儲到冷備里面去。
Q:冷備這塊最大一致時間戳方式,會不會因為服務(wù)器之間的時間差異造成備份不一致?
A:冷備的時間戳問題,我覺得這個不用擔(dān)心,分享中我提到有5種方式:1)分布式快照隔離;2)絕對物理時間隔離;3)硬件絕對物理時間隔離;4)本地時間隔離;5)邏輯時間戳的隔離。TBase使用的是邏輯時間戳,這個時間戳不是本地的時間戳,是TBase內(nèi)部的時間戳,我們會保證它的穩(wěn)定性和單向遞增,它不會發(fā)生反轉(zhuǎn),也不會發(fā)生偏移,而且它有容災(zāi)的特性。即使機器發(fā)生故障,然后再把它拉起來,它也是能保證整個穩(wěn)定性的。
Q:時間戳是個全局自增值嗎?gtid?
A:至于說這個時間戳是不是一個自增值,簡單理解上,說是自增值是沒有問題的。但是核心問題是我們需要保證它,不能讓它有全局瓶頸,不能讓它因為一把鎖,把它全局吞吐量都拉下降了。
Q:安全控制方式上,select 如何輸入token?
A:TBase的安全控制方式更多的是通過用戶的接口,比如說安全管理員,他會有自己的一套接口來創(chuàng)建自己的密鑰,創(chuàng)建自己的安全規(guī)則。
Q:冷熱數(shù)據(jù)分離是通過人工方式做的還是自動方式?判斷冷熱數(shù)據(jù)的標(biāo)準(zhǔn)是啥?有沒有采用存儲分層的能力自動來判斷?
A:至于冷熱分離的轉(zhuǎn)儲是存儲層的設(shè)置策略還是在云數(shù)據(jù)庫層去做,其實冷熱轉(zhuǎn)儲這一塊,冷熱的訪問邏輯和邏輯的定義是在數(shù)據(jù)庫里面定義的,但是冷熱的轉(zhuǎn)儲,是通過TBase的管控系統(tǒng)來做,這個邏輯相對來講還是比較重,我們需要有一些專門的機制來保障它的可靠性和易用性,所以TBase整個把它移到了管控系統(tǒng)里面來。
冷熱分離的方式是人工去定義的,我們根據(jù)的業(yè)務(wù)邏輯來定義哪個數(shù)據(jù)是冷,哪個數(shù)據(jù)是熱的。但是它的判斷,它下層的遷移的邏輯是自動的,只要把這個規(guī)則定義好了之后,整個系統(tǒng)會自動的運行,不需要人為干預(yù)。
判斷冷熱的標(biāo)準(zhǔn)是什么,舉個例子,比如說微信支付是四個月的數(shù)據(jù)是熱數(shù)據(jù),四個月之前的數(shù)據(jù)是冷數(shù)據(jù),其實是按照時間來判斷的,我們?nèi)‘?dāng)前的時間往前面算,往前面偏移。超過了一定的閾值它就是冷數(shù)據(jù)。
關(guān)于存儲分層之后,TBase更多是從數(shù)據(jù)庫本身的能力來做。
Q:備份工具是原生內(nèi)置的嗎?
A:TBase的備份工具不是數(shù)據(jù)庫內(nèi)置的,是我們在管控里面做的,說句實在話,冷備這一塊東西需要打交道的周邊模塊比較多。比如需要把冷備的數(shù)據(jù)同步到一個外部存儲里面,外部存儲有可能是一個磁盤陣列,有可能是一個HDFS,也有可能是一個其他的存儲,這些東西放在數(shù)據(jù)內(nèi)核里面不合適,太重了,冷備功能是我們提供的獨立工具來做的。
Q:TBase本身就是一個數(shù)據(jù)庫引擎,它不是一個數(shù)據(jù)庫中間件?
A:TBase本質(zhì)上是一個數(shù)據(jù)庫引擎。今天我講的PPT里面,大家可以看到,整個過程中其實我都沒有提中間件,一直在講數(shù)據(jù)庫底層引擎的一個原理,比如說優(yōu)化器的原理、執(zhí)行器的原理,還有分布式優(yōu)化邏輯,以及我們的分布式事務(wù)的邏輯,其實都是引擎里面的原理。中間件一般只會做SQL解析、SQL轉(zhuǎn)發(fā)和結(jié)果的返回,很少涉及到執(zhí)行計劃。
Q:PUSH QUERY和PULL DATA如何選擇?
A:其實PUSH QUERY和PULL DATA這個選擇沒有一個嚴(yán)格的界限,一般PUSH QUERY在數(shù)據(jù)量相對比較大的時候會比較有效一點,因為把QUERY下推之后,下層節(jié)點的執(zhí)行會過濾掉大部分?jǐn)?shù)據(jù),拉取的數(shù)據(jù)量大大的減小。然后PULL DATA在一些簡單的查詢,表非常小的時候,把它拉回來算可能更快一點。這一塊選擇沒有嚴(yán)格的標(biāo)準(zhǔn),可以根據(jù)我們的場景決定。
Q:如果是從ORACLE轉(zhuǎn)到分布式數(shù)據(jù)庫有哪些知識需要補充?
A:說實在話, Oracle是一個發(fā)展了三四十年的數(shù)據(jù)庫產(chǎn)品,整體的架構(gòu)和功能都非常強大了。分布式數(shù)據(jù)庫是一個新興的領(lǐng)域,產(chǎn)品架構(gòu),包括它的生態(tài)也都是一直處于建設(shè)和完善中,因此在調(diào)優(yōu)、使用和數(shù)據(jù)業(yè)務(wù)的建模這一塊跟以前的Oracle還是有所區(qū)別的。從哪一塊入手,我覺得這要看你使用的是哪些分布式數(shù)據(jù)庫。如果是MPP的話,可能就需要了解一下MPP里面的關(guān)鍵點。比如數(shù)據(jù)的分片怎么分,跑SQL的時候,怎么去結(jié)合分布邏輯去很好的設(shè)計SQL,這個可能是在接觸分布式數(shù)據(jù)庫的時候需要考慮的一個比較重要的問題。
Q:兩個大表分布在不同的DN,做HASH,如何保證選擇正確的執(zhí)行計劃和高效率?
A:兩個大表分布在不同的節(jié)點里面,我們要進(jìn)行一個查詢,如何提升它的效率。如果兩個大表,首先第一個來講,我們得搞清楚這些表進(jìn)行查詢的時候關(guān)聯(lián)的KEY有哪些。比如說如果我們都是使用這一列進(jìn)行關(guān)聯(lián),那是不是可以在設(shè)計的時候就按照性能這一列進(jìn)行數(shù)據(jù)的分片,在進(jìn)行查詢的時候,就可以下推到每個DN節(jié)點來執(zhí)行,換句話說每個DN節(jié)點的執(zhí)行層是并行的,沒有相互之間的交互,這樣效率在分布式的時候是最高的。
如果這個表查詢的SQL非常多,一張表有一兩百個字段,但是關(guān)聯(lián)的時候,有的是按照分布KEY進(jìn)行關(guān)聯(lián),有的不是按照分布KEY進(jìn)行關(guān)聯(lián),這個時候就得有一些取舍。要看一下,如果按照分布KEY進(jìn)行關(guān)聯(lián)效率會最高,而且可能會比不按照分布KEY的效率高不少,那么我們會選擇優(yōu)先的把我們業(yè)務(wù)里面用到的一些頻率比較高的,要求比較高的一些SQL優(yōu)先的按照那些SQL來設(shè)計表的分布方式。然后對于其他的一些SQL,對于那些JOIN的列進(jìn)一步建索引,提升查詢效率。
另外在寫SQL的時候,盡量做到某個節(jié)點上進(jìn)行查詢的時候,能夠通過我們表達(dá)式的過濾掉一些無效的數(shù)據(jù)傳輸,這樣的話就可以保證一個相對比較好的效率。
Q:學(xué)習(xí)分布式數(shù)據(jù)庫有哪些知識要補充?從哪里開始?A:至于說這些數(shù)據(jù)庫知識有哪些需要補充,我覺得是這樣的,數(shù)據(jù)庫本身是一個比較古老的技術(shù),如果說從哪里開始,有機會的話,從使用開始就最好了。比如說先做一些最簡單的數(shù)據(jù)庫的使用,建表、生成數(shù)據(jù),最好有一個業(yè)務(wù)系統(tǒng)作為驅(qū)動,邊用邊學(xué),這樣上手更快一些。
Q:TBase代碼開源了嗎?A:TBase的代碼已經(jīng)開源,大家有興趣的話,歡迎訪問:https://github.com/Tencent/TBase。TBase預(yù)計今年年中左右會重新推動一個新的版本出來,大家敬請期待。
以上是今天的分享和Q&A的解答,感謝大家的聆聽。
TBase是騰訊TEG數(shù)據(jù)庫工作組三大產(chǎn)品之一,是在開源的PostgreSQL基礎(chǔ)上研發(fā)的企業(yè)級分布式HTAP數(shù)據(jù)庫管理系統(tǒng)。通過單一數(shù)據(jù)庫集群同時為客戶提供高一致性的分布式數(shù)據(jù)庫服務(wù)和高性能的數(shù)據(jù)倉庫服務(wù),形成一套融合完整的企業(yè)級解決方案。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺
- 5 國產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計算迎來商業(yè)化突破,但落地仍需時間
- 7 東陽光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長空間
- 8 地平線自動駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機器人東風(fēng)翻身?