騰訊云數(shù)據(jù)庫TDSQL PG版(原TBase)分布式關(guān)系型數(shù)據(jù)庫是一款面向海量在線實時分布式事務(wù)交易高性能數(shù)據(jù)庫系統(tǒng)。面對應(yīng)用業(yè)務(wù)產(chǎn)生的不定性數(shù)據(jù)爆炸需求,無論是高并發(fā)的交易還是海量的實時數(shù)據(jù)分析,TDSQL PG版都有足夠能力處理。
在此基礎(chǔ)上構(gòu)造發(fā)行了具有功能更豐富、穩(wěn)定性更好、兼容性更廣、安全性更高、性能更強、擴展性極好的分布式數(shù)據(jù)庫TDSQL PG版產(chǎn)品。本文由騰訊云數(shù)據(jù)庫高級工程師謝燦揚先生帶來分享,主要介紹企業(yè)級產(chǎn)品TDSQL PG版在分布式全局事務(wù),數(shù)據(jù)安全,成本優(yōu)化,復(fù)雜查詢性能等方面做的工作,以下為分享實錄:
TDSQL PG版產(chǎn)品介紹
TDSQL PG版經(jīng)過十余年打磨大概可以分為以下幾個階段,第一個是單機時代引入PostgreSQL做為騰訊大數(shù)據(jù)平臺TDW的一個補充,彌補了小數(shù)據(jù)量分析能力不足。隨著業(yè)務(wù)發(fā)展,單機瓶頸逐步凸顯,促使團隊推出了更具有擴展性的SQL和兼容V1版本,并在2015年上線微信支付系統(tǒng)。
此外,TDSQL PG版提前布局ToB市場,在V2版本支持三權(quán)分立,加密透明等安全特性,并在2018年拿下數(shù)字廣東和云南公安等多個標桿客戶。TDSQL V3主要定位HTAP,在2019年上線PICC核心業(yè)務(wù),直到去年發(fā)布V5版本,主要是為了去O,內(nèi)核具備去O和讀寫分離能力,同時上線的運營商用戶還有保險系統(tǒng)。
TDSQL PG版是基于騰訊及PostgreSQL開源的自主分布式HTAP國產(chǎn)數(shù)據(jù)庫,其全面兼容PostgreSQL,高度兼容Oracle語法,產(chǎn)品采用無共享架構(gòu),在提供數(shù)據(jù)倉庫處理的能力的同時,還能支持完整的事物分布式ACID能力。
TDSQL PG版整體能力,從支持上來說它的支持接口比較豐富,比如libpq里的C、C++,Jdbc/odbc、Python、Ecpg,各種常用語言接口都是支持的,同時它也支持用戶自定義函數(shù)操作服務(wù)。很多企業(yè)用戶關(guān)心的數(shù)據(jù)安全方面,TDSQL PG版用三權(quán)分立安全體系,支持數(shù)據(jù)脫敏同時還有加密功能,并且支持多種國密算法。
同時作為HTAB數(shù)據(jù)庫,TDSQL PG版支持千萬級TPS事務(wù)處理,全并行分布式計算框架,可以讓業(yè)務(wù)高效完成OLAP計算。在數(shù)據(jù)治理方面,可以支持在線擴縮容,用戶無感知數(shù)據(jù)Rebalance,使用透明的冷熱數(shù)據(jù)分離來減少用戶業(yè)務(wù)成本。此外,還支持多種窗口分析常函數(shù),并且高度兼容Oracle常見語法。
針對TDSQL PG版適用場景從兩方面看,一是業(yè)務(wù)特征,如果業(yè)務(wù)滿足這些特征,比如在數(shù)據(jù)量OLAP超過1個T,OLAP超過5個T或并發(fā)鏈接達到2000以上,業(yè)務(wù)峰值每秒100萬筆左右,同時還必須要有一個分布式的水平擴展能力,需要OLTP和OLAP(03:55英混合場景,并需要嚴格的事務(wù)保證,TDSQL PG版是很適合的。第二是業(yè)務(wù)場景,例如TDSQL在地理信息系統(tǒng),高并發(fā)實時計算方面或Oracle兼容都是一個非常好的選擇。
TDSQL PG版架構(gòu)
下面和大家分享TDSQL PG版整體架構(gòu)。GTM全局事務(wù)管理器,它是全局事務(wù)信息的管理節(jié)點并管理全局對象。Coordinator協(xié)調(diào)節(jié)點主要是業(yè)務(wù)訪問入口,CN節(jié)點中每個節(jié)點都對等,訪問三個節(jié)點中任意一個結(jié)果都是一樣。圖中下層是一個數(shù)據(jù)節(jié)點,數(shù)據(jù)節(jié)點是實際處理數(shù)據(jù)的一些地方,每個數(shù)據(jù)節(jié)點都會有一份本地的原數(shù)據(jù),并且還有一些本地數(shù)據(jù)分片,中間數(shù)據(jù)交互總線也會把所有的節(jié)點有機聯(lián)合起來,負責(zé)整個集群中所有的數(shù)據(jù)交互。最左邊我們的管控系統(tǒng),就負責(zé)我們節(jié)點的資源分配、高級安全審計、數(shù)據(jù)治理、擴容等運維能力。
下面對重點能力進行介紹。今年支持了一個多引擎、支持集中式部署模式和分布式部署模式,其中集中式部署模式和單機PostgreSQL相同,沒有分布式開銷,并且支持一組多備的部署模式和兩地三中心,都具有完備的Oracle兼容能力。在金融或運營商保險這種場景中,可以達到98%兼容性。在業(yè)務(wù)需要擴容時可以無縫擴展成分布式集群。
從集中式擴展到分布式,我們擁有完整的ACID能力,并且在分布式場景,也支持分部件更新全局索引,可以極大減少我們業(yè)務(wù),進行一些分布式適配的改造量。并且在分布式場景中,TDSQL PG版也支持提供高性能OLAP能力,支持業(yè)務(wù)做分類型查詢工作。
TDSQL PG版同時支持集中式和分布式,集中式與分布式支持完整的ACID,其中分布式事務(wù),是基于GTS提供的MVCC并發(fā)控制邏輯,這里一個核心點是GTS時間戳,是由GTS集群進行提供。
GTS集群是從零開始單向遞增的邏輯時鐘,通過硬件提供足夠穩(wěn)定保障,并且是單向遞增,我們利用這個特性來進行高性能分布式事務(wù)。而GTS對硬件沒有要求,可以通用服務(wù)器來做GTM節(jié)點,同時GTS本身可以通過流復(fù)制來保證可靠性。在性能方面,24核服務(wù)器能夠處理1200萬的QPS,幾乎可以滿足所有場景的需要。
TDSQL PG版性能
TDSQL PG版在全并行計算方面的并行能力分為三個層級:
一是節(jié)點級并行,所謂節(jié)點級并行是系統(tǒng)拿到一個查詢后,會把查詢下發(fā)給不同的DN,并且通過DN之間的分片查詢節(jié)點級并行。
二是進程中并行,在執(zhí)行器拿到算子以后,把它算子并行化,允許多個CPU同時用資源來完成查詢工作。
三是通過指令級,比如可以通過特殊的CPU指令,SIMD指令,進行算術(shù)運算等,來提升計算效率。
今年新增另一特性全局索引,要知道如果在分布式設(shè)計中,表配置非分布鍵性能它比分布鍵性能差距是比較大的。舉個例子,比如說分布鍵是其它鍵,那這里用一個非分布鍵,比如說Mike這個名稱。
由于這個鍵它不是我們的分布鍵,數(shù)據(jù)庫其實不知道它在到底存儲到哪個節(jié)點。那這樣我們就需要在節(jié)點上,比如說DN1、DN2、DN3都需要掃描。假設(shè)這條數(shù)據(jù)只有一條,多了很多無用掃描,特別是節(jié)點數(shù)越來越多時。當(dāng)然有了全局索引,相當(dāng)于有一個全局索引來存儲MAC這條記錄對應(yīng)的存儲節(jié)點,那這樣就可以比較快的去找到這一個節(jié)點。并且隨著節(jié)點數(shù)的增多,性能也是穩(wěn)步提升。
這里需要一個全局事務(wù)來保證全局索引,保證數(shù)據(jù)表之間的一致性??梢钥吹接蚁陆沁@個圖,藍色是非分布鍵的索引,黃色的是分布鍵,灰色的是全局索引。可以看到相對于非全局索引它的提升還是很大的。相對于我們的分布鍵查詢,它的性能是比較接近的。全局索引的高性能還可以用在外鍵或者全局唯一約束上,這樣可以極大減少業(yè)務(wù)的分布式改造成本。
這里有一個特性透明壓縮,支持數(shù)據(jù)庫透明壓縮能力,這個是完全對業(yè)務(wù)透明。通過簡單的Alter table,可以把一個表直接壓縮成它的1/3,或者它的1/4、1/5。然后從左邊的圖可以看到透明壓縮主要存儲層工作,頁面在落盤的時候,調(diào)用指定的一個壓縮算法,然后存儲在對應(yīng)文件系統(tǒng)里面來減少磁盤空間。
當(dāng)業(yè)務(wù)需要使用一個頁面讀取出去時,我們會在內(nèi)存里進行解壓,供業(yè)務(wù)來使用。下面是TPCC模型測試結(jié)果。可以看到一個磁盤壓縮率大概是降低了70%左右,CPU大概是增加20%,因為要花額外CPU去做壓縮,性能TPCC查詢性能是降28%。
另外TDSQL PG版支持全面的循環(huán)校驗。這是對磁盤損壞的保障方案。我們都知道磁盤壞塊概率相對較低,但隨著業(yè)務(wù)量增長,集群數(shù)、服務(wù)器數(shù)增多,它會成為一個必然事件。TDSQL PG版支持全流程校驗,例如定期全量校驗,主動實施故障探測,故障阻斷,在故障發(fā)現(xiàn)之后,會自動發(fā)起增量修復(fù)去完成副本的修復(fù)。在這樣一個手段中,可以保證壞塊不會擴散到冷備還有備機,相當(dāng)于病毒,不能讓它擴散到所有副本上。
在表上我們的一個數(shù)據(jù)中,維護了一個塊級別的CRC信息,從介質(zhì)里面讀取的時我們可以校驗來做數(shù)據(jù)保護。最后來說當(dāng)故障發(fā)生時,做數(shù)據(jù)儲備轉(zhuǎn)換時,可以保證在數(shù)據(jù)正確情況下,第一時間恢復(fù)業(yè)務(wù),再異步修復(fù)流程。通過備份或者說冷備中,來拿取受損頁面推進修復(fù)。在線修復(fù)可以通過可用的副本來進行,沒有可用副本才會從冷備中拉取。
另外一點Direct IO因為Page 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)存使用量進行一些統(tǒng)計。
用戶案例
接下來是我們的經(jīng)典用戶案例。TDSQL PG版是在2015年,替換微信支付的分庫分表系統(tǒng)上線,支撐微信支付從500萬筆到1000萬再到10億筆,保證業(yè)務(wù)穩(wěn)定性還有連續(xù)性,這里用到了數(shù)據(jù)治理功能。圖上右上角是我們的CLB騰訊的內(nèi)部的一個負載均衡的組件。
CLB是我們接入的節(jié)點,在DN上漲,我們是存儲四個月數(shù)據(jù),四個月內(nèi)數(shù)據(jù)是存在一個高性能的SSD里面,四個月前的數(shù)據(jù)會存到比較普通設(shè)備,比如大存儲硬盤。它使用了大小商戶策略,可以解決不同體量用戶傾斜問題,從而高效保證系統(tǒng)運行。通過這種方式,把整個業(yè)務(wù)成本降低到1/4左右。
在外部有比較大的一個保險公司,上線了非常多的實例。這里只展現(xiàn)了我們的一個部署架構(gòu)。首先分為兩個平面,一個是讀寫平面,一個只讀平面,讀寫平面業(yè)務(wù)可以通過VIP來提供讀寫能力,我們的只讀平面,VIP在多個節(jié)點中做負載均衡,提供一個業(yè)務(wù)只讀的能力。
TDSQL PG版在數(shù)據(jù)生成后,需要把數(shù)據(jù)同步到其它的系統(tǒng)上,例如Elasticsearch、MySQL、INFORMIX或者Oracle在TDSQL PG版中可以在通訊的同時把它解成一個Json形式,同步到Kafka同步工具,最后通過Kafka通到其它業(yè)務(wù)系統(tǒng)。
最后一個案例是去年上線的的七人普系統(tǒng),這個項目是國家核心重點項目,涉及700萬的普查員以及1億人自主申報,并且在15天內(nèi)完成數(shù)據(jù)量采集。在項目中PostgreSQL承擔(dān)了非常重要的分析業(yè)務(wù),同時具備了實時寫入還有海量數(shù)據(jù)同時分析能力。目前PG已經(jīng)成為新應(yīng)用的首選?,F(xiàn)在屬于數(shù)據(jù)庫黃金時代,所以我們會一起共同努力,謝謝大家!