騰訊云在PostgreSQL領(lǐng)域的‘‘再次突破’’

來源: 騰訊云數(shù)據(jù)庫
作者:劉少蓉
時(shí)間:2022-01-12
14047
日前,第11屆PostgreSQL中國技術(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ì)介紹。

日前,第11屆PostgreSQL中國技術(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ù)庫開源產(chǎn)品TDSQL PostgreSQL版(開源代號(hào)Tbase)再次公布升級(jí):分區(qū)表能力增強(qiáng),分區(qū)剪枝性能提升30%,分布區(qū)表關(guān)聯(lián)查詢性能(Join)提升超十倍。此外,異地多活易用性增強(qiáng)、分布式死鎖自動(dòng)檢測并解鎖功能上線,2PC殘留自動(dòng)檢測并清理等多方面升級(jí),全方位的展示了騰訊云在PG技術(shù)領(lǐng)域的突破和服務(wù)。

同時(shí)在本次大會(huì),騰訊云TDSQL憑借成熟的一站式解決方案和行業(yè)應(yīng)用實(shí)踐,斬獲“數(shù)據(jù)庫最佳應(yīng)用獎(jiǎng)’’,這是既獲得中國開源軟件聯(lián)盟PostgreSQL分會(huì)頒發(fā)的‘‘2021 PostgreSQL中國最佳數(shù)據(jù)庫產(chǎn)品’’獎(jiǎng)之后,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)用場景,今天帶大家一文縱覽劉少蓉博士的演講精華。

640.webp.jpg

(數(shù)據(jù)庫最佳應(yīng)用獎(jiǎ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è)級(jí)分布式數(shù)據(jù)庫PG版,為用戶提供TP、AP整體解決方案),TDSQL-A(基于分布式TDSQL架構(gòu)專門研發(fā)的一款分析型產(chǎn)品)和TDSQL-C PG版(云原生數(shù)據(jù)庫)。下面我們會(huì)詳細(xì)介紹每款產(chǎn)品的架構(gòu)和應(yīng)用場景。

TencentDB for PG是騰訊云在PG方面的RDS,用于給用戶提供開箱即用的云端數(shù)據(jù)庫服務(wù)。用戶可以通過云控制臺(tái)一鍵創(chuàng)建和管理數(shù)據(jù)庫。騰訊云負(fù)責(zé)處理絕大部分復(fù)雜而耗時(shí)的管理工作,如PostgreSQL軟件安裝、存儲(chǔ)管理等,這樣用戶就可以更專注于業(yè)務(wù)程序開發(fā)。

我們來看一下TencentDB for PG的架構(gòu),這也是比較典型的單機(jī)云數(shù)據(jù)庫的架構(gòu)。一主一從的強(qiáng)同步保障服務(wù)的高可用。同時(shí)呢,在線的熱數(shù)據(jù)也會(huì)定時(shí)的備份到COS上面,以便在數(shù)據(jù)庫災(zāi)難時(shí)進(jìn)行數(shù)據(jù)恢復(fù),這也保證了高可靠性。TencentDB for PG也跟多種騰訊云產(chǎn)品集成和聯(lián)通,比方說云監(jiān)控可以自動(dòng)監(jiān)控?cái)?shù)據(jù)庫,省去了人工DBA,ES集群提供了日志查詢服務(wù)等。

640.webp (1).jpg

除了典型RDS服務(wù),騰訊云TencentDB for PG還有一些比較獨(dú)特的優(yōu)勢,可以根據(jù)業(yè)務(wù)的需求來定制化內(nèi)核優(yōu)化。舉個(gè)例子,曾經(jīng)有個(gè)用戶在使我們RDS服務(wù)的時(shí)候,

反饋說當(dāng)出現(xiàn)頻繁CREATE TABLE/DROP TABLE的時(shí)候,尤其是大表的操作時(shí),會(huì)造成主備之間較大的延遲,導(dǎo)致WAL大量的堆積、來不及重放并回收。根據(jù)這個(gè)場景我們在內(nèi)核上加入異步DDL方式,在收到DROP TABLE的WAL時(shí),先進(jìn)行標(biāo)記,在空閑時(shí)逐步從shared_buffer和存儲(chǔ)上刪除數(shù)據(jù)。從而實(shí)現(xiàn)備庫上DDL的異步處理、及時(shí)響應(yīng)后續(xù)WAL的重放,避免了堆積。

TencentDB for PG在一定數(shù)量下提供了一種All In One的數(shù)據(jù)解決方案。大家也都知道PG本身是一款非常好的開源軟件,也有著比較好的TP和AP能力。當(dāng)用戶在使用PG時(shí)業(yè)務(wù)不斷擴(kuò)大,數(shù)據(jù)量超過單機(jī)limit的時(shí)候,那么騰訊云數(shù)據(jù)庫能夠提供什么解決方案呢?

傳統(tǒng)的方法是多加幾臺(tái)機(jī)器,分庫分表,把一張邏輯表分為很多物理表,這個(gè)好處也是非常明顯的,比如說插入性能會(huì)比較高,點(diǎn)查也很快。當(dāng)然問題也很多。業(yè)務(wù)本身需要實(shí)現(xiàn)非常復(fù)雜的分布式邏輯,比方說分布式事務(wù),數(shù)據(jù)庫跨表查詢等。對(duì)用戶更友好的解決方案是數(shù)據(jù)庫本身提供分布式架構(gòu),比方說share-nothing MPP,提供存儲(chǔ)和計(jì)算的水平擴(kuò)展能力。把復(fù)雜的分布式邏輯留給數(shù)據(jù)庫解決,業(yè)務(wù)邏輯簡單。

TDSQL PG版架構(gòu),可以從三個(gè)角度來看,首先是GTM事務(wù)管理器,它是負(fù)責(zé)分布式架構(gòu)下全局事務(wù)管理,以及全局的對(duì)象管理。同時(shí)事務(wù)管理器是通過一主多從來保證它的可靠性、可用性。架構(gòu)圖中右側(cè)上層是Coordinator(協(xié)調(diào)節(jié)點(diǎn)CN),它主要提供業(yè)務(wù)訪問入口。協(xié)調(diào)節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)之間是對(duì)等的,也就是說業(yè)務(wù)訪問這三個(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)管控,比如說指標(biāo)監(jiān)測、運(yùn)維管理、告警、安全審計(jì)、數(shù)據(jù)治理等等。

640.webp (2).jpg

分布式事務(wù)系統(tǒng)里的一個(gè)核心設(shè)計(jì)難題就是如何高性能,低成本的保障事務(wù)的一致性。針對(duì)這個(gè)問題,我們TDSQL PG版也發(fā)明了一套基于Global TimeStamp(全局時(shí)間戳)的MVCC可見性判斷協(xié)議來提供高性能可擴(kuò)展的分布式事務(wù)能力。這種協(xié)議下GTM只需要去分配全局的GTS,CN,DN節(jié)點(diǎn)上的事務(wù)會(huì)向GTM請(qǐng)求GTS來作為事務(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ù),主備之間通過日志同步時(shí)間戳狀態(tài),保障了GTM服務(wù)的高可靠性。

TDSQL PG版經(jīng)過十余年研發(fā),在2019年11月7號(hào)進(jìn)行開源,開源代號(hào)TBase,歐洲航空航天局曾利用TDSQL開源版進(jìn)行航行探索項(xiàng)目,數(shù)據(jù)量高達(dá)300多TB,是一個(gè)比較成功的案例。在2019年開源以后這中間進(jìn)行過多次版本升級(jí)。在2021年7月開源了新版本,提高了性能以及管理方面。2022年1月1號(hào)再次升級(jí)全新版本,在分區(qū)能力方面以及易用性方面都有重磅升級(jí)。

接下來要介紹的是我們的分析型產(chǎn)品TDSQL-A,TDSQL-A是基于TDSQL PG版架構(gòu)上全面優(yōu)化來打造關(guān)于分析性能AP方面的數(shù)據(jù)庫。TDSQL-A定位是希望能夠提供海量數(shù)據(jù)實(shí)時(shí)分析,所謂海量數(shù)據(jù)是指10PB以上秒級(jí)分析查詢功能,同時(shí)TDSQL-A也100%兼容PG,也高度兼容Oracle,兼容性在特定場景下達(dá)到98%。

640.webp (3).jpg

下面大概介紹一下TDSQL-A的核心技術(shù)。首先它是行列混存,在過去十年間有很多商業(yè)級(jí)數(shù)據(jù)庫為分析場景研發(fā)推出列存引擎。每個(gè)列單獨(dú)存儲(chǔ),可以達(dá)到比較高的壓縮比。分析型的查詢通常只涉及到一個(gè)數(shù)據(jù)庫的某些列,不需要查詢一個(gè)行的所有列。我們TDSQL-A給列式數(shù)據(jù)提供多級(jí)壓縮,比如說透明級(jí)、輕量級(jí)。我們還根據(jù)數(shù)據(jù)本身的類型選擇和定制壓縮技術(shù)。

同時(shí)我們也有著非常高效的向量執(zhí)行引擎,以及多種并行策略:節(jié)點(diǎn)間的并行MPP,進(jìn)程間的并行SMP,以及指令型的并行SIMD。最后不得不提一下的是我們獨(dú)特的分布式延遲物化能力。延遲物化是一種常用的數(shù)據(jù)庫常優(yōu)化技術(shù)。但是分布式分布式延遲物化技術(shù)目前在我們是業(yè)界第一個(gè)提出和實(shí)現(xiàn)。我們的優(yōu)化器是基于代價(jià)的,它會(huì)根據(jù)具體查詢來決定,比如說什么時(shí)候要延遲物化什么時(shí)候要提前物化。我們的分布式延遲優(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)下,計(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ù)庫架構(gòu)。這個(gè)架構(gòu)也是云原生數(shù)據(jù)庫的基石。云原生的本質(zhì)就是資源池化,降本增效。用戶可以按需彈性靈活地?cái)U(kuò)展計(jì)算或者存儲(chǔ)。如果有需求需要增加存儲(chǔ)就在共享存儲(chǔ)里增加,如果計(jì)算節(jié)點(diǎn)方面有瓶頸就可以增加計(jì)算節(jié)點(diǎn)。比如說這個(gè)架構(gòu)下面通常一主多從,主RW提供讀寫能力,從RO提供讀的能力。

Aurora在提出存算分離時(shí)也提出了一個(gè)觀點(diǎn),就是日志即數(shù)據(jù)庫log is thedatabase。Log is the database的核心思想是主備是基于同一份數(shù)據(jù)。在這個(gè)思想之上當(dāng)我們寫數(shù)據(jù)的時(shí)候,只需要把日志寫到共享存儲(chǔ)里就可以了。為什么呢?因?yàn)楣蚕泶鎯?chǔ)上面它完全可以通過存放日志來實(shí)現(xiàn)存儲(chǔ)節(jié)點(diǎn)上面修改,存儲(chǔ)層以Page為單位來維護(hù)數(shù)據(jù)。因?yàn)椴恍枰缇W(wǎng)絡(luò)寫數(shù)據(jù)本身到共享存儲(chǔ)上面,所以極大優(yōu)化了寫的性能。在讀的性能上面也有優(yōu)化,每個(gè)RO節(jié)點(diǎn)它可以在很多情況下從主節(jié)點(diǎn)上面接收日志重放來滿足讀的請(qǐng)求,在少的情況下還需要從共享存儲(chǔ)上去讀數(shù)據(jù)。

基于存算分離,日志即數(shù)據(jù)庫的設(shè)計(jì)思想,我們在去年11月份商業(yè)化了云原生數(shù)據(jù)庫TDSQL-C PG版。TDSQL-C由騰訊完全自研,融合了傳統(tǒng)數(shù)據(jù)庫、云計(jì)算、新硬件技術(shù)的優(yōu)勢。高可用、高可靠、高性能以及極致彈性,能夠達(dá)到秒級(jí)備份和回答。

下面來講一下云原生數(shù)據(jù)庫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ǔ)上面,所以也就省去了不必要的,比如說Full page write、臟頁刷盤。計(jì)算層中間一層是用戶態(tài)文件系統(tǒng)Cynos File System,它主要是提供了分布式文件管理。最下面一層是Cynos Store Agent,它提供了計(jì)算存儲(chǔ)之間的讀寫交互,以及主備之間日志流的同步。

640.webp (4).jpg

在存儲(chǔ)層方面首先需要記錄日志,需要回放日志,同時(shí)也提供了CRC日志校驗(yàn)以及備份/恢復(fù)等。同時(shí)數(shù)據(jù)也會(huì)定時(shí)地冷備到COS上來保證高可靠性。

分布式存儲(chǔ)方面的架構(gòu),首先大家可以看到有很多StoreNode,我們簡稱SN,StoreNode提供的是數(shù)據(jù)服務(wù),StoreNode維度可以看到不同的pool。每個(gè)pool對(duì)應(yīng)了一個(gè)數(shù)據(jù)庫實(shí)例,每個(gè)pool下面又同時(shí)劃分為不同的segment,每個(gè)segment基于Raft多數(shù)派提交保證多副本。

以segment維度來存儲(chǔ)數(shù)據(jù)它其實(shí)有很多優(yōu)點(diǎn),第一個(gè)是彈性,我們有專門的監(jiān)控系統(tǒng)監(jiān)測存儲(chǔ)方面的是否情況,當(dāng)存儲(chǔ)節(jié)點(diǎn)的使用沒有達(dá)到一定閾值時(shí),就會(huì)從空閑StoreNode加一個(gè)到共享存儲(chǔ)池里面,同時(shí)可以從segment進(jìn)行搬遷,這樣做的好處是它并不會(huì)影響到主segment的讀寫請(qǐng)求。另外以segment可以實(shí)行并行搬遷。多個(gè)segment同時(shí)并發(fā)的搬遷,提高效率。

最后關(guān)于我們TDSQL-C PG版方面,計(jì)算節(jié)點(diǎn)方面也是高可用的彈性,比如說當(dāng)業(yè)務(wù)需求需要增加或減少計(jì)算節(jié)點(diǎn)時(shí),同樣也可以很快拉起一個(gè)新的計(jì)算節(jié)點(diǎn),而且這個(gè)計(jì)算節(jié)點(diǎn)基本上是無狀態(tài)。同時(shí)這個(gè)計(jì)算節(jié)點(diǎn)可以自由地添加,根據(jù)業(yè)務(wù)訴求可以添加不同規(guī)格來彈性地實(shí)現(xiàn)彈出鏈路業(yè)務(wù)需求。

未來機(jī)遇與展望

最后分享一下未來我們會(huì)在PG生態(tài)方面有什么樣的規(guī)劃,首先我們生態(tài)是要不停地跟進(jìn)社區(qū)發(fā)展,同時(shí)我們也會(huì)持續(xù)開源我們的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ù)庫,下一步更希望能夠把HTAP搬到云原生上面,同時(shí)實(shí)現(xiàn)Serverless以及Multi-master,能夠高效地實(shí)現(xiàn)數(shù)據(jù)共享,保證安全性。

第三個(gè)角度是從怎么充分利用我們新硬件,來實(shí)現(xiàn)軟硬協(xié)同提高性能。最后可能就是智能化,可以理解為怎么能夠,比如說智能調(diào)優(yōu)是一方面,騰訊云方面有DBBrain(智能管家),再一個(gè)就是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ù)庫黃金時(shí)代,所以我們會(huì)一起共同努力,謝謝大家!

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于騰訊云數(shù)據(jù)庫,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家