騰訊云數(shù)據(jù)庫的企業(yè)級分布式技術(shù)創(chuàng)新與實(shí)踐

來源: 騰訊云數(shù)據(jù)庫
作者:謝燦揚(yáng)
時(shí)間:2022-01-28
13894
騰訊云數(shù)據(jù)庫TDSQL PG版(原TBase)分布式關(guān)系型數(shù)據(jù)庫是一款面向海量在線實(shí)時(shí)分布式事務(wù)交易高性能數(shù)據(jù)庫系統(tǒng)。面對應(yīng)用業(yè)務(wù)產(chǎn)生的不定性數(shù)據(jù)爆炸需求,無論是高并發(fā)的交易還是海量的實(shí)時(shí)數(shù)據(jù)分析,TDSQL PG版都有足夠能力處理。

騰訊云數(shù)據(jù)庫TDSQL PG版(原TBase)分布式關(guān)系型數(shù)據(jù)庫是一款面向海量在線實(shí)時(shí)分布式事務(wù)交易高性能數(shù)據(jù)庫系統(tǒng)。面對應(yīng)用業(yè)務(wù)產(chǎn)生的不定性數(shù)據(jù)爆炸需求,無論是高并發(fā)的交易還是海量的實(shí)時(shí)數(shù)據(jù)分析,TDSQL PG版都有足夠能力處理。

在此基礎(chǔ)上構(gòu)造發(fā)行了具有功能更豐富、穩(wěn)定性更好、兼容性更廣、安全性更高、性能更強(qiáng)、擴(kuò)展性極好的分布式數(shù)據(jù)庫TDSQL PG版產(chǎn)品。本文由騰訊云數(shù)據(jù)庫高級工程師謝燦揚(yáng)先生帶來分享,主要介紹企業(yè)級產(chǎn)品TDSQL PG版在分布式全局事務(wù),數(shù)據(jù)安全,成本優(yōu)化,復(fù)雜查詢性能等方面做的工作,以下為分享實(shí)錄:

TDSQL PG版產(chǎn)品介紹

TDSQL PG版經(jīng)過十余年打磨大概可以分為以下幾個(gè)階段,第一個(gè)是單機(jī)時(shí)代引入PostgreSQL做為騰訊大數(shù)據(jù)平臺TDW的一個(gè)補(bǔ)充,彌補(bǔ)了小數(shù)據(jù)量分析能力不足。隨著業(yè)務(wù)發(fā)展,單機(jī)瓶頸逐步凸顯,促使團(tuán)隊(duì)推出了更具有擴(kuò)展性的SQL和兼容V1版本,并在2015年上線微信支付系統(tǒng)。

此外,TDSQL PG版提前布局ToB市場,在V2版本支持三權(quán)分立,加密透明等安全特性,并在2018年拿下數(shù)字廣東和云南公安等多個(gè)標(biāo)桿客戶。TDSQL V3主要定位HTAP,在2019年上線PICC核心業(yè)務(wù),直到去年發(fā)布V5版本,主要是為了去O,內(nèi)核具備去O和讀寫分離能力,同時(shí)上線的運(yùn)營商用戶還有保險(xiǎn)系統(tǒng)。

640.webp.jpg

TDSQL PG版是基于騰訊及PostgreSQL開源的自主分布式HTAP國產(chǎn)數(shù)據(jù)庫,其全面兼容PostgreSQL,高度兼容Oracle語法,產(chǎn)品采用無共享架構(gòu),在提供數(shù)據(jù)倉庫處理的能力的同時(shí),還能支持完整的事物分布式ACID能力。

TDSQL PG版整體能力,從支持上來說它的支持接口比較豐富,比如libpq里的C、C++,Jdbc/odbc、Python、Ecpg,各種常用語言接口都是支持的,同時(shí)它也支持用戶自定義函數(shù)操作服務(wù)。很多企業(yè)用戶關(guān)心的數(shù)據(jù)安全方面,TDSQL PG版用三權(quán)分立安全體系,支持?jǐn)?shù)據(jù)脫敏同時(shí)還有加密功能,并且支持多種國密算法。

同時(shí)作為HTAB數(shù)據(jù)庫,TDSQL PG版支持千萬級TPS事務(wù)處理,全并行分布式計(jì)算框架,可以讓業(yè)務(wù)高效完成OLAP計(jì)算。在數(shù)據(jù)治理方面,可以支持在線擴(kuò)縮容,用戶無感知數(shù)據(jù)Rebalance,使用透明的冷熱數(shù)據(jù)分離來減少用戶業(yè)務(wù)成本。此外,還支持多種窗口分析常函數(shù),并且高度兼容Oracle常見語法。

針對TDSQL PG版適用場景從兩方面看,一是業(yè)務(wù)特征,如果業(yè)務(wù)滿足這些特征,比如在數(shù)據(jù)量OLAP超過1個(gè)T,OLAP超過5個(gè)T或并發(fā)鏈接達(dá)到2000以上,業(yè)務(wù)峰值每秒100萬筆左右,同時(shí)還必須要有一個(gè)分布式的水平擴(kuò)展能力,需要OLTP和OLAP(03:55英混合場景,并需要嚴(yán)格的事務(wù)保證,TDSQL PG版是很適合的。第二是業(yè)務(wù)場景,例如TDSQL在地理信息系統(tǒng),高并發(fā)實(shí)時(shí)計(jì)算方面或Oracle兼容都是一個(gè)非常好的選擇。

TDSQL PG版架構(gòu)

下面和大家分享TDSQL PG版整體架構(gòu)。GTM全局事務(wù)管理器,它是全局事務(wù)信息的管理節(jié)點(diǎn)并管理全局對象。Coordinator協(xié)調(diào)節(jié)點(diǎn)主要是業(yè)務(wù)訪問入口,CN節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)都對等,訪問三個(gè)節(jié)點(diǎn)中任意一個(gè)結(jié)果都是一樣。圖中下層是一個(gè)數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)是實(shí)際處理數(shù)據(jù)的一些地方,每個(gè)數(shù)據(jù)節(jié)點(diǎn)都會有一份本地的原數(shù)據(jù),并且還有一些本地?cái)?shù)據(jù)分片,中間數(shù)據(jù)交互總線也會把所有的節(jié)點(diǎn)有機(jī)聯(lián)合起來,負(fù)責(zé)整個(gè)集群中所有的數(shù)據(jù)交互。最左邊我們的管控系統(tǒng),就負(fù)責(zé)我們節(jié)點(diǎn)的資源分配、高級安全審計(jì)、數(shù)據(jù)治理、擴(kuò)容等運(yùn)維能力。

640.webp (1).jpg

下面對重點(diǎn)能力進(jìn)行介紹。今年支持了一個(gè)多引擎、支持集中式部署模式和分布式部署模式,其中集中式部署模式和單機(jī)PostgreSQL相同,沒有分布式開銷,并且支持一組多備的部署模式和兩地三中心,都具有完備的Oracle兼容能力。在金融或運(yùn)營商保險(xiǎn)這種場景中,可以達(dá)到98%兼容性。在業(yè)務(wù)需要擴(kuò)容時(shí)可以無縫擴(kuò)展成分布式集群。

從集中式擴(kuò)展到分布式,我們擁有完整的ACID能力,并且在分布式場景,也支持分部件更新全局索引,可以極大減少我們業(yè)務(wù),進(jìn)行一些分布式適配的改造量。并且在分布式場景中,TDSQL PG版也支持提供高性能OLAP能力,支持業(yè)務(wù)做分類型查詢工作。

TDSQL PG版同時(shí)支持集中式和分布式,集中式與分布式支持完整的ACID,其中分布式事務(wù),是基于GTS提供的MVCC并發(fā)控制邏輯,這里一個(gè)核心點(diǎn)是GTS時(shí)間戳,是由GTS集群進(jìn)行提供。

GTS集群是從零開始單向遞增的邏輯時(shí)鐘,通過硬件提供足夠穩(wěn)定保障,并且是單向遞增,我們利用這個(gè)特性來進(jìn)行高性能分布式事務(wù)。而GTS對硬件沒有要求,可以通用服務(wù)器來做GTM節(jié)點(diǎn),同時(shí)GTS本身可以通過流復(fù)制來保證可靠性。在性能方面,24核服務(wù)器能夠處理1200萬的QPS,幾乎可以滿足所有場景的需要。

TDSQL PG版性能

TDSQL PG版在全并行計(jì)算方面的并行能力分為三個(gè)層級:

一是節(jié)點(diǎn)級并行,所謂節(jié)點(diǎn)級并行是系統(tǒng)拿到一個(gè)查詢后,會把查詢下發(fā)給不同的DN,并且通過DN之間的分片查詢節(jié)點(diǎn)級并行。

二是進(jìn)程中并行,在執(zhí)行器拿到算子以后,把它算子并行化,允許多個(gè)CPU同時(shí)用資源來完成查詢工作。

三是通過指令級,比如可以通過特殊的CPU指令,SIMD指令,進(jìn)行算術(shù)運(yùn)算等,來提升計(jì)算效率。

今年新增另一特性全局索引,要知道如果在分布式設(shè)計(jì)中,表配置非分布鍵性能它比分布鍵性能差距是比較大的。舉個(gè)例子,比如說分布鍵是其它鍵,那這里用一個(gè)非分布鍵,比如說Mike這個(gè)名稱。

由于這個(gè)鍵它不是我們的分布鍵,數(shù)據(jù)庫其實(shí)不知道它在到底存儲到哪個(gè)節(jié)點(diǎn)。那這樣我們就需要在節(jié)點(diǎn)上,比如說DN1、DN2、DN3都需要掃描。假設(shè)這條數(shù)據(jù)只有一條,多了很多無用掃描,特別是節(jié)點(diǎn)數(shù)越來越多時(shí)。當(dāng)然有了全局索引,相當(dāng)于有一個(gè)全局索引來存儲MAC這條記錄對應(yīng)的存儲節(jié)點(diǎn),那這樣就可以比較快的去找到這一個(gè)節(jié)點(diǎn)。并且隨著節(jié)點(diǎn)數(shù)的增多,性能也是穩(wěn)步提升。

這里需要一個(gè)全局事務(wù)來保證全局索引,保證數(shù)據(jù)表之間的一致性??梢钥吹接蚁陆沁@個(gè)圖,藍(lán)色是非分布鍵的索引,黃色的是分布鍵,灰色的是全局索引??梢钥吹较鄬τ诜侨炙饕奶嵘€是很大的。相對于我們的分布鍵查詢,它的性能是比較接近的。全局索引的高性能還可以用在外鍵或者全局唯一約束上,這樣可以極大減少業(yè)務(wù)的分布式改造成本。

640.webp (2).jpg

這里有一個(gè)特性透明壓縮,支持?jǐn)?shù)據(jù)庫透明壓縮能力,這個(gè)是完全對業(yè)務(wù)透明。通過簡單的Alter table,可以把一個(gè)表直接壓縮成它的1/3,或者它的1/4、1/5。然后從左邊的圖可以看到透明壓縮主要存儲層工作,頁面在落盤的時(shí)候,調(diào)用指定的一個(gè)壓縮算法,然后存儲在對應(yīng)文件系統(tǒng)里面來減少磁盤空間。

當(dāng)業(yè)務(wù)需要使用一個(gè)頁面讀取出去時(shí),我們會在內(nèi)存里進(jìn)行解壓,供業(yè)務(wù)來使用。下面是TPCC模型測試結(jié)果。可以看到一個(gè)磁盤壓縮率大概是降低了70%左右,CPU大概是增加20%,因?yàn)橐~外CPU去做壓縮,性能TPCC查詢性能是降28%。

另外TDSQL PG版支持全面的循環(huán)校驗(yàn)。這是對磁盤損壞的保障方案。我們都知道磁盤壞塊概率相對較低,但隨著業(yè)務(wù)量增長,集群數(shù)、服務(wù)器數(shù)增多,它會成為一個(gè)必然事件。TDSQL PG版支持全流程校驗(yàn),例如定期全量校驗(yàn),主動實(shí)施故障探測,故障阻斷,在故障發(fā)現(xiàn)之后,會自動發(fā)起增量修復(fù)去完成副本的修復(fù)。在這樣一個(gè)手段中,可以保證壞塊不會擴(kuò)散到冷備還有備機(jī),相當(dāng)于病毒,不能讓它擴(kuò)散到所有副本上。

640.webp (3).jpg

在表上我們的一個(gè)數(shù)據(jù)中,維護(hù)了一個(gè)塊級別的CRC信息,從介質(zhì)里面讀取的時(shí)我們可以校驗(yàn)來做數(shù)據(jù)保護(hù)。最后來說當(dāng)故障發(fā)生時(shí),做數(shù)據(jù)儲備轉(zhuǎn)換時(shí),可以保證在數(shù)據(jù)正確情況下,第一時(shí)間恢復(fù)業(yè)務(wù),再異步修復(fù)流程。通過備份或者說冷備中,來拿取受損頁面推進(jìn)修復(fù)。在線修復(fù)可以通過可用的副本來進(jìn)行,沒有可用副本才會從冷備中拉取。

另外一點(diǎn)Direct IO因?yàn)镻age Buffer問題,導(dǎo)致內(nèi)存的利用率并不高,并且在某些情況下容易引起性能波動。TDSQL PG版支持Direct IO,經(jīng)過測試可以提高內(nèi)存的使用率。并且在TPCC測試,它的波動是更加平穩(wěn)的,也就是說它能夠提高業(yè)務(wù)穩(wěn)定性。在新版本中,我們支持多種定位視圖,一是全局事物視圖,支持全局鏈接管理。第二是我們內(nèi)存占用視圖,可以對當(dāng)前內(nèi)存使用量進(jìn)行一些統(tǒng)計(jì)。

用戶案例

接下來是我們的經(jīng)典用戶案例。TDSQL PG版是在2015年,替換微信支付的分庫分表系統(tǒng)上線,支撐微信支付從500萬筆到1000萬再到10億筆,保證業(yè)務(wù)穩(wěn)定性還有連續(xù)性,這里用到了數(shù)據(jù)治理功能。圖上右上角是我們的CLB騰訊的內(nèi)部的一個(gè)負(fù)載均衡的組件。

640.webp (4).jpg

CLB是我們接入的節(jié)點(diǎn),在DN上漲,我們是存儲四個(gè)月數(shù)據(jù),四個(gè)月內(nèi)數(shù)據(jù)是存在一個(gè)高性能的SSD里面,四個(gè)月前的數(shù)據(jù)會存到比較普通設(shè)備,比如大存儲硬盤。它使用了大小商戶策略,可以解決不同體量用戶傾斜問題,從而高效保證系統(tǒng)運(yùn)行。通過這種方式,把整個(gè)業(yè)務(wù)成本降低到1/4左右。

在外部有比較大的一個(gè)保險(xiǎn)公司,上線了非常多的實(shí)例。這里只展現(xiàn)了我們的一個(gè)部署架構(gòu)。首先分為兩個(gè)平面,一個(gè)是讀寫平面,一個(gè)只讀平面,讀寫平面業(yè)務(wù)可以通過VIP來提供讀寫能力,我們的只讀平面,VIP在多個(gè)節(jié)點(diǎn)中做負(fù)載均衡,提供一個(gè)業(yè)務(wù)只讀的能力。

TDSQL PG版在數(shù)據(jù)生成后,需要把數(shù)據(jù)同步到其它的系統(tǒng)上,例如Elasticsearch、MySQL、INFORMIX或者Oracle在TDSQL PG版中可以在通訊的同時(shí)把它解成一個(gè)Json形式,同步到Kafka同步工具,最后通過Kafka通到其它業(yè)務(wù)系統(tǒng)。

最后一個(gè)案例是去年上線的的七人普系統(tǒng),這個(gè)項(xiàng)目是國家核心重點(diǎn)項(xiàng)目,涉及700萬的普查員以及1億人自主申報(bào),并且在15天內(nèi)完成數(shù)據(jù)量采集。在項(xiàng)目中PostgreSQL承擔(dān)了非常重要的分析業(yè)務(wù),同時(shí)具備了實(shí)時(shí)寫入還有海量數(shù)據(jù)同時(shí)分析能力。目前PG已經(jīng)成為新應(yīng)用的首選。現(xiàn)在屬于數(shù)據(jù)庫黃金時(shí)代,所以我們會一起共同努力,謝謝大家!

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于騰訊云數(shù)據(jù)庫,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多