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