日前,第11屆PostgreSQL中國(guó)技術(shù)大會(huì)圓滿落幕,大會(huì)上騰訊云多位頂級(jí)技術(shù)達(dá)人攜手亮相,分別對(duì)騰訊云PostgreSQL系列產(chǎn)品技術(shù)亮點(diǎn)和創(chuàng)新實(shí)踐案例進(jìn)行了深入解讀,針對(duì)TDSQL-C PostreSQL高可用特性、TDSQL-A發(fā)展歷程、技術(shù)架構(gòu)等做出了詳細(xì)介紹。
會(huì)上騰訊云數(shù)據(jù)庫(kù)開(kāi)源產(chǎn)品TDSQL PostgreSQL版(開(kāi)源代號(hào)Tbase)再次公布升級(jí):分區(qū)表能力增強(qiáng),分區(qū)剪枝性能提升30%,分布區(qū)表關(guān)聯(lián)查詢性能(Join)提升超十倍。此外,異地多活易用性增強(qiáng)、分布式死鎖自動(dòng)檢測(cè)并解鎖功能上線,2PC殘留自動(dòng)檢測(cè)并清理等多方面升級(jí),全方位的展示了騰訊云在PG技術(shù)領(lǐng)域的突破和服務(wù)。
同時(shí)在本次大會(huì),騰訊云TDSQL憑借成熟的一站式解決方案和行業(yè)應(yīng)用實(shí)踐,斬獲“數(shù)據(jù)庫(kù)最佳應(yīng)用獎(jiǎng)’’,這是既獲得中國(guó)開(kāi)源軟件聯(lián)盟PostgreSQL分會(huì)頒發(fā)的‘‘2021 PostgreSQL中國(guó)最佳數(shù)據(jù)庫(kù)產(chǎn)品’’獎(jiǎng)之后,TDSQL在PostgreSQL領(lǐng)域的出色表現(xiàn)再獲認(rèn)可。本次主論壇現(xiàn)場(chǎng),騰訊云數(shù)據(jù)庫(kù)專(zhuān)家工程師劉少蓉詳細(xì)解讀了騰訊云在PostgreSQL領(lǐng)域的全線產(chǎn)品技術(shù)架構(gòu)演進(jìn)和應(yīng)用場(chǎng)景,今天帶大家一文縱覽劉少蓉博士的演講精華。
(數(shù)據(jù)庫(kù)最佳應(yīng)用獎(jiǎng))
騰訊云PostgreSQL家族
早在2008年開(kāi)始,騰訊在PG方面就開(kāi)始做相關(guān)數(shù)據(jù)庫(kù)研發(fā),經(jīng)過(guò)十幾年的研發(fā)和業(yè)務(wù)打磨,我們騰訊也為業(yè)界貢獻(xiàn)了比較豐富的產(chǎn)品線:RDS云數(shù)據(jù)庫(kù)(TencentDB for PG),TDSQL PG版(企業(yè)級(jí)分布式數(shù)據(jù)庫(kù)PG版,為用戶提供TP、AP整體解決方案),TDSQL-A(基于分布式TDSQL架構(gòu)專(zhuān)門(mén)研發(fā)的一款分析型產(chǎn)品)和TDSQL-C PG版(云原生數(shù)據(jù)庫(kù))。下面我們會(huì)詳細(xì)介紹每款產(chǎn)品的架構(gòu)和應(yīng)用場(chǎng)景。
TencentDB for PG是騰訊云在PG方面的RDS,用于給用戶提供開(kāi)箱即用的云端數(shù)據(jù)庫(kù)服務(wù)。用戶可以通過(guò)云控制臺(tái)一鍵創(chuàng)建和管理數(shù)據(jù)庫(kù)。騰訊云負(fù)責(zé)處理絕大部分復(fù)雜而耗時(shí)的管理工作,如PostgreSQL軟件安裝、存儲(chǔ)管理等,這樣用戶就可以更專(zhuān)注于業(yè)務(wù)程序開(kāi)發(fā)。
我們來(lái)看一下TencentDB for PG的架構(gòu),這也是比較典型的單機(jī)云數(shù)據(jù)庫(kù)的架構(gòu)。一主一從的強(qiáng)同步保障服務(wù)的高可用。同時(shí)呢,在線的熱數(shù)據(jù)也會(huì)定時(shí)的備份到COS上面,以便在數(shù)據(jù)庫(kù)災(zāi)難時(shí)進(jìn)行數(shù)據(jù)恢復(fù),這也保證了高可靠性。TencentDB for PG也跟多種騰訊云產(chǎn)品集成和聯(lián)通,比方說(shuō)云監(jiān)控可以自動(dòng)監(jiān)控?cái)?shù)據(jù)庫(kù),省去了人工DBA,ES集群提供了日志查詢服務(wù)等。
除了典型RDS服務(wù),騰訊云TencentDB for PG還有一些比較獨(dú)特的優(yōu)勢(shì),可以根據(jù)業(yè)務(wù)的需求來(lái)定制化內(nèi)核優(yōu)化。舉個(gè)例子,曾經(jīng)有個(gè)用戶在使我們RDS服務(wù)的時(shí)候,
反饋說(shuō)當(dāng)出現(xiàn)頻繁CREATE TABLE/DROP TABLE的時(shí)候,尤其是大表的操作時(shí),會(huì)造成主備之間較大的延遲,導(dǎo)致WAL大量的堆積、來(lái)不及重放并回收。根據(jù)這個(gè)場(chǎng)景我們?cè)趦?nèi)核上加入異步DDL方式,在收到DROP TABLE的WAL時(shí),先進(jìn)行標(biāo)記,在空閑時(shí)逐步從shared_buffer和存儲(chǔ)上刪除數(shù)據(jù)。從而實(shí)現(xiàn)備庫(kù)上DDL的異步處理、及時(shí)響應(yīng)后續(xù)WAL的重放,避免了堆積。
TencentDB for PG在一定數(shù)量下提供了一種All In One的數(shù)據(jù)解決方案。大家也都知道PG本身是一款非常好的開(kāi)源軟件,也有著比較好的TP和AP能力。當(dāng)用戶在使用PG時(shí)業(yè)務(wù)不斷擴(kuò)大,數(shù)據(jù)量超過(guò)單機(jī)limit的時(shí)候,那么騰訊云數(shù)據(jù)庫(kù)能夠提供什么解決方案呢?
傳統(tǒng)的方法是多加幾臺(tái)機(jī)器,分庫(kù)分表,把一張邏輯表分為很多物理表,這個(gè)好處也是非常明顯的,比如說(shuō)插入性能會(huì)比較高,點(diǎn)查也很快。當(dāng)然問(wèn)題也很多。業(yè)務(wù)本身需要實(shí)現(xiàn)非常復(fù)雜的分布式邏輯,比方說(shuō)分布式事務(wù),數(shù)據(jù)庫(kù)跨表查詢等。對(duì)用戶更友好的解決方案是數(shù)據(jù)庫(kù)本身提供分布式架構(gòu),比方說(shuō)share-nothing MPP,提供存儲(chǔ)和計(jì)算的水平擴(kuò)展能力。把復(fù)雜的分布式邏輯留給數(shù)據(jù)庫(kù)解決,業(yè)務(wù)邏輯簡(jiǎn)單。
TDSQL PG版架構(gòu),可以從三個(gè)角度來(lái)看,首先是GTM事務(wù)管理器,它是負(fù)責(zé)分布式架構(gòu)下全局事務(wù)管理,以及全局的對(duì)象管理。同時(shí)事務(wù)管理器是通過(guò)一主多從來(lái)保證它的可靠性、可用性。架構(gòu)圖中右側(cè)上層是Coordinator(協(xié)調(diào)節(jié)點(diǎn)CN),它主要提供業(yè)務(wù)訪問(wèn)入口。協(xié)調(diào)節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)之間是對(duì)等的,也就是說(shuō)業(yè)務(wù)訪問(wèn)這三個(gè)節(jié)點(diǎn)里面的任何一個(gè),它得到的結(jié)果都會(huì)是相同的。圖中下層是我們的數(shù)據(jù)節(jié)點(diǎn)(Datanode)。數(shù)據(jù)節(jié)點(diǎn)是我們實(shí)際存儲(chǔ)數(shù)據(jù)的地方。每個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)存儲(chǔ)一份本地的數(shù)據(jù)分片還有本地元數(shù)據(jù)。Datanode同時(shí)提供了計(jì)算功能,例如本地?cái)?shù)據(jù)的計(jì)算以MPP架構(gòu)下數(shù)據(jù)重分布的計(jì)算,e.g.join,aggregation。我們這個(gè)架構(gòu)下也有相應(yīng)管控,比如說(shuō)指標(biāo)監(jiān)測(cè)、運(yùn)維管理、告警、安全審計(jì)、數(shù)據(jù)治理等等。
分布式事務(wù)系統(tǒng)里的一個(gè)核心設(shè)計(jì)難題就是如何高性能,低成本的保障事務(wù)的一致性。針對(duì)這個(gè)問(wèn)題,我們TDSQL PG版也發(fā)明了一套基于Global TimeStamp(全局時(shí)間戳)的MVCC可見(jiàn)性判斷協(xié)議來(lái)提供高性能可擴(kuò)展的分布式事務(wù)能力。這種協(xié)議下GTM只需要去分配全局的GTS,CN,DN節(jié)點(diǎn)上的事務(wù)會(huì)向GTM請(qǐng)求GTS來(lái)作為事務(wù)的版本標(biāo)識(shí)。這樣就可以把提交協(xié)議從GTM的單點(diǎn)瓶頸下放到每一個(gè)節(jié)點(diǎn)上,減輕壓力。同時(shí)多個(gè)GTM節(jié)點(diǎn)構(gòu)成集群,主節(jié)點(diǎn)對(duì)外提供服務(wù),主備之間通過(guò)日志同步時(shí)間戳狀態(tài),保障了GTM服務(wù)的高可靠性。
TDSQL PG版經(jīng)過(guò)十余年研發(fā),在2019年11月7號(hào)進(jìn)行開(kāi)源,開(kāi)源代號(hào)TBase,歐洲航空航天局曾利用TDSQL開(kāi)源版進(jìn)行航行探索項(xiàng)目,數(shù)據(jù)量高達(dá)300多TB,是一個(gè)比較成功的案例。在2019年開(kāi)源以后這中間進(jìn)行過(guò)多次版本升級(jí)。在2021年7月開(kāi)源了新版本,提高了性能以及管理方面。2022年1月1號(hào)再次升級(jí)全新版本,在分區(qū)能力方面以及易用性方面都有重磅升級(jí)。
接下來(lái)要介紹的是我們的分析型產(chǎn)品TDSQL-A,TDSQL-A是基于TDSQL PG版架構(gòu)上全面優(yōu)化來(lái)打造關(guān)于分析性能AP方面的數(shù)據(jù)庫(kù)。TDSQL-A定位是希望能夠提供海量數(shù)據(jù)實(shí)時(shí)分析,所謂海量數(shù)據(jù)是指10PB以上秒級(jí)分析查詢功能,同時(shí)TDSQL-A也100%兼容PG,也高度兼容Oracle,兼容性在特定場(chǎng)景下達(dá)到98%。
下面大概介紹一下TDSQL-A的核心技術(shù)。首先它是行列混存,在過(guò)去十年間有很多商業(yè)級(jí)數(shù)據(jù)庫(kù)為分析場(chǎng)景研發(fā)推出列存引擎。每個(gè)列單獨(dú)存儲(chǔ),可以達(dá)到比較高的壓縮比。分析型的查詢通常只涉及到一個(gè)數(shù)據(jù)庫(kù)的某些列,不需要查詢一個(gè)行的所有列。我們TDSQL-A給列式數(shù)據(jù)提供多級(jí)壓縮,比如說(shuō)透明級(jí)、輕量級(jí)。我們還根據(jù)數(shù)據(jù)本身的類(lèi)型選擇和定制壓縮技術(shù)。
同時(shí)我們也有著非常高效的向量執(zhí)行引擎,以及多種并行策略:節(jié)點(diǎn)間的并行MPP,進(jìn)程間的并行SMP,以及指令型的并行SIMD。最后不得不提一下的是我們獨(dú)特的分布式延遲物化能力。延遲物化是一種常用的數(shù)據(jù)庫(kù)常優(yōu)化技術(shù)。但是分布式分布式延遲物化技術(shù)目前在我們是業(yè)界第一個(gè)提出和實(shí)現(xiàn)。我們的優(yōu)化器是基于代價(jià)的,它會(huì)根據(jù)具體查詢來(lái)決定,比如說(shuō)什么時(shí)候要延遲物化什么時(shí)候要提前物化。我們的分布式延遲優(yōu)化的能力,能夠減少不必要的網(wǎng)絡(luò)開(kāi)銷(xiāo)。
介紹完了我們的單機(jī)云數(shù)據(jù)庫(kù)TencentDB for PG,我們的share-nothing MPP架構(gòu)下的分布式數(shù)據(jù)庫(kù)(TDSQL PG版和TDSQL-A)。接下來(lái)我們來(lái)聊一聊云原生數(shù)據(jù)庫(kù)。首先為什么有云原生數(shù)據(jù)庫(kù)的需求呢?在無(wú)共享的MPP架構(gòu)下,計(jì)算和存儲(chǔ)是緊耦合的。那么當(dāng)業(yè)務(wù)有瓶頸的時(shí)候,不管是計(jì)算瓶頸還是存儲(chǔ)瓶頸都需要加資源,而且兩者的瓶頸的時(shí)間點(diǎn)通常不一樣,那么這樣必然浪費(fèi)資源而且不容易擴(kuò)展。針對(duì)這些痛點(diǎn),AWS Aurora在2017年提出了計(jì)算存儲(chǔ)分離的數(shù)據(jù)庫(kù)架構(gòu)。這個(gè)架構(gòu)也是云原生數(shù)據(jù)庫(kù)的基石。云原生的本質(zhì)就是資源池化,降本增效。用戶可以按需彈性靈活地?cái)U(kuò)展計(jì)算或者存儲(chǔ)。如果有需求需要增加存儲(chǔ)就在共享存儲(chǔ)里增加,如果計(jì)算節(jié)點(diǎn)方面有瓶頸就可以增加計(jì)算節(jié)點(diǎn)。比如說(shuō)這個(gè)架構(gòu)下面通常一主多從,主RW提供讀寫(xiě)能力,從RO提供讀的能力。
Aurora在提出存算分離時(shí)也提出了一個(gè)觀點(diǎn),就是日志即數(shù)據(jù)庫(kù)log is thedatabase。Log is the database的核心思想是主備是基于同一份數(shù)據(jù)。在這個(gè)思想之上當(dāng)我們寫(xiě)數(shù)據(jù)的時(shí)候,只需要把日志寫(xiě)到共享存儲(chǔ)里就可以了。為什么呢?因?yàn)楣蚕泶鎯?chǔ)上面它完全可以通過(guò)存放日志來(lái)實(shí)現(xiàn)存儲(chǔ)節(jié)點(diǎn)上面修改,存儲(chǔ)層以Page為單位來(lái)維護(hù)數(shù)據(jù)。因?yàn)椴恍枰缇W(wǎng)絡(luò)寫(xiě)數(shù)據(jù)本身到共享存儲(chǔ)上面,所以極大優(yōu)化了寫(xiě)的性能。在讀的性能上面也有優(yōu)化,每個(gè)RO節(jié)點(diǎn)它可以在很多情況下從主節(jié)點(diǎn)上面接收日志重放來(lái)滿足讀的請(qǐng)求,在少的情況下還需要從共享存儲(chǔ)上去讀數(shù)據(jù)。
基于存算分離,日志即數(shù)據(jù)庫(kù)的設(shè)計(jì)思想,我們?cè)谌ツ?1月份商業(yè)化了云原生數(shù)據(jù)庫(kù)TDSQL-C PG版。TDSQL-C由騰訊完全自研,融合了傳統(tǒng)數(shù)據(jù)庫(kù)、云計(jì)算、新硬件技術(shù)的優(yōu)勢(shì)。高可用、高可靠、高性能以及極致彈性,能夠達(dá)到秒級(jí)備份和回答。
下面來(lái)講一下云原生數(shù)據(jù)庫(kù)PG架構(gòu),左邊這個(gè)圖大概可以分為兩個(gè)部分,上面是計(jì)算層,下面是存儲(chǔ)層。計(jì)算層大概分為三個(gè)部分,首先是CynosPG,CynosPG是基于PG研發(fā)的計(jì)算引擎,它提供通常計(jì)算引擎的功能,查詢處理器、事務(wù)管理、緩存實(shí)現(xiàn)等等。因?yàn)橛?jì)算層并不存儲(chǔ)數(shù)據(jù),而且我們只是把日志存儲(chǔ)在存儲(chǔ)上面,所以也就省去了不必要的,比如說(shuō)Full page write、臟頁(yè)刷盤(pán)。計(jì)算層中間一層是用戶態(tài)文件系統(tǒng)Cynos File System,它主要是提供了分布式文件管理。最下面一層是Cynos Store Agent,它提供了計(jì)算存儲(chǔ)之間的讀寫(xiě)交互,以及主備之間日志流的同步。
在存儲(chǔ)層方面首先需要記錄日志,需要回放日志,同時(shí)也提供了CRC日志校驗(yàn)以及備份/恢復(fù)等。同時(shí)數(shù)據(jù)也會(huì)定時(shí)地冷備到COS上來(lái)保證高可靠性。
分布式存儲(chǔ)方面的架構(gòu),首先大家可以看到有很多StoreNode,我們簡(jiǎn)稱(chēng)SN,StoreNode提供的是數(shù)據(jù)服務(wù),StoreNode維度可以看到不同的pool。每個(gè)pool對(duì)應(yīng)了一個(gè)數(shù)據(jù)庫(kù)實(shí)例,每個(gè)pool下面又同時(shí)劃分為不同的segment,每個(gè)segment基于Raft多數(shù)派提交保證多副本。
以segment維度來(lái)存儲(chǔ)數(shù)據(jù)它其實(shí)有很多優(yōu)點(diǎn),第一個(gè)是彈性,我們有專(zhuān)門(mén)的監(jiān)控系統(tǒng)監(jiān)測(cè)存儲(chǔ)方面的是否情況,當(dāng)存儲(chǔ)節(jié)點(diǎn)的使用沒(méi)有達(dá)到一定閾值時(shí),就會(huì)從空閑StoreNode加一個(gè)到共享存儲(chǔ)池里面,同時(shí)可以從segment進(jìn)行搬遷,這樣做的好處是它并不會(huì)影響到主segment的讀寫(xiě)請(qǐng)求。另外以segment可以實(shí)行并行搬遷。多個(gè)segment同時(shí)并發(fā)的搬遷,提高效率。
最后關(guān)于我們TDSQL-C PG版方面,計(jì)算節(jié)點(diǎn)方面也是高可用的彈性,比如說(shuō)當(dāng)業(yè)務(wù)需求需要增加或減少計(jì)算節(jié)點(diǎn)時(shí),同樣也可以很快拉起一個(gè)新的計(jì)算節(jié)點(diǎn),而且這個(gè)計(jì)算節(jié)點(diǎn)基本上是無(wú)狀態(tài)。同時(shí)這個(gè)計(jì)算節(jié)點(diǎn)可以自由地添加,根據(jù)業(yè)務(wù)訴求可以添加不同規(guī)格來(lái)彈性地實(shí)現(xiàn)彈出鏈路業(yè)務(wù)需求。
未來(lái)機(jī)遇與展望
最后分享一下未來(lái)我們會(huì)在PG生態(tài)方面有什么樣的規(guī)劃,首先我們生態(tài)是要不停地跟進(jìn)社區(qū)發(fā)展,同時(shí)我們也會(huì)持續(xù)開(kāi)源我們的TBase的新功能。第二個(gè)是關(guān)于Oracle兼容性、應(yīng)用性方面,我們現(xiàn)在在這四款PG產(chǎn)品方面都高度兼容,當(dāng)然離目標(biāo)100%兼容還有一定距離,所以我們肯定需要持續(xù)發(fā)展進(jìn)行深耕。
第二個(gè)角度,架構(gòu)方面我們現(xiàn)已有云原生的數(shù)據(jù)庫(kù),下一步更希望能夠把HTAP搬到云原生上面,同時(shí)實(shí)現(xiàn)Serverless以及Multi-master,能夠高效地實(shí)現(xiàn)數(shù)據(jù)共享,保證安全性。
第三個(gè)角度是從怎么充分利用我們新硬件,來(lái)實(shí)現(xiàn)軟硬協(xié)同提高性能。最后可能就是智能化,可以理解為怎么能夠,比如說(shuō)智能調(diào)優(yōu)是一方面,騰訊云方面有DBBrain(智能管家),再一個(gè)就是AI in DB,怎么實(shí)現(xiàn)in-database machine learning和analytics。
最后我想引用一下之前看到的一篇文章,CMU數(shù)據(jù)庫(kù)教授Andy Palvo寫(xiě)的關(guān)于2021年數(shù)據(jù)庫(kù)的review,提到的一句話是"PostgreSQL has become the first choice in new applications."。PG已經(jīng)成為新應(yīng)用的首選。我們現(xiàn)在屬于數(shù)據(jù)庫(kù)黃金時(shí)代,所以我們會(huì)一起共同努力,謝謝大家!