騰訊雲資料庫的企業級分散式技術創新與實踐

語言: CN / TW / HK

騰訊雲資料庫TDSQL PG版(原TBase)分散式關係型資料庫是一款面向海量線上實時分散式事務交易高效能資料庫系統。 面對應用業務產生的不定性資料爆炸需求,無論是高併發的交易還是海量的實時資料分析,TDSQL PG版都有足夠能力處理。

在此基礎上構造發行了具有功能更豐富、穩定性更好、相容性更廣、安全性更高、效能更強、擴充套件性極好的分散式資料庫TDSQL PG版產品。本文由騰訊雲資料庫高階工程師謝燦揚先生帶來分享,主要介紹企業級產品TDSQL PG版在分散式全域性事務,資料安全,成本優化,複雜查詢效能等方面做的工作,以下為分享實錄:

TDSQL PG版產品介紹

TDSQL PG版經過十餘年打磨大概可以分為以下幾個階段,第一個是單機時代引入 PostgreSQL做為騰訊大資料平臺 TDW 的一個補充,彌補了小資料量分析能力不足。隨著業務發展,單機瓶頸逐步凸顯,促使團隊推出了更具有擴充套件性的SQL和相容V1版本,並在2015年上線微信支付系統。

此外,TDSQL PG版提前佈局ToB市場,在V2版本支援三權分立,加密透明等安全特性,並在2018年拿下數字廣東和雲南公安等多個標杆客戶。TDSQL V3主要定位 HTAP,在2019年上線PICC核心業務,直到去年釋出V5版本,主要是為了去 O,核心具備去O和讀寫分離能力,同時上線的運營商使用者還有保險系統。

TDSQL PG版是基於騰訊及PostgreSQL開源的自主分散式 HTAP國產資料庫 ,其全面相容PostgreSQL,高度相容Oracle語法,產品採用無共享架構,在提供資料倉庫處理的能力的同時,還能支援完整的事物分散式ACID能力。

TDSQL PG版整體能力,從支援上來說它的支援介面比較豐富,比如libpq裡的C 、C++,Jdbc/odbc、Python、Ecpg,各種常用語言介面都是支援的,同時它也支援使用者自定義函式操作服務。很多企業使用者關心的資料安全方面,TDSQL PG版用三權分立安全體系,支援資料脫敏同時還有加密功能,並且支援多種國密演算法。

同時作為HTAB資料庫,TDSQL PG版支援千萬級TPS事務處理,全並行分散式計算框架,可以讓業務高效完成OLAP計算。在資料治理方面,可以支援線上擴縮容,使用者無感知資料Rebalance,使用透明的冷熱資料分離來減少使用者業務成本。此外,還支援多種視窗分析常函式,並且高度相容Oracle常見語法。

針對TDSQL PG版適用場景從兩方面看 ,一是業務特徵,如果業務滿足這些特徵,比如在資料量OLAP超過1個T,OLAP超過5個T或併發連結達到2000以上,業務峰值每秒 100萬筆左右,同時還必須要有一個分散式的水平擴充套件能力,需要OLTP和OLAP(03:55 英混合場景,並需要嚴格的事務保證,TDSQL PG版是很適合的。第二是業務場景,例如TDSQL在地理資訊系統,高併發實時計算方面或Oracle相容都是一個非常好的選擇。

TDSQL PG版架構

下面和大家分享TDSQL PG版整體架構 。GTM全域性事務管理器,它是全域性事務資訊的管理節點並管理全域性物件。 Coordinator協調節點主要是業務訪問入口,CN節點中每個節點都對等,訪問三個節點中任意一個結果都是一樣。圖中下層是一個數據節點,資料節點是實際處理資料的一些地方,每個資料節點都會有一份本地的原資料,並且還有一些本地資料分片,中間資料互動匯流排也會把所有的節點有機聯合起來,負責整個叢集中所有的資料互動。最左邊我們的管控系統,就負責我們節點的資源分配、高階安全審計、資料治理、擴容等運維能力。

下面對重點能力進行介紹。今年支援了一個多引擎、支援集中式部署模式和分散式部署模式,其中集中式部署模式和單機PostgreSQL相同,沒有分散式開銷,並且支援一組多備的部署模式和兩地三中心,都具有完備的Oracle相容能力。在金融或運營商保險這種場景中,可以達到98%相容性。在業務需要擴容時可以無縫擴充套件成分散式叢集。

從集中式擴充套件到分散式,我們擁有完整的ACID能力 ,並且在分散式場景,也支援分部件更新全域性索引,可以極大減少我們業務,進行一些分散式適配的改造量。並且在分散式場景中,TDSQL PG版也支援提供高效能OLAP能力,支援業務做分型別查詢工作。

TDSQL PG版同時支援集中式和分散式,集中式與分散式支援完整的 ACID,其中分散式事務,是基於GTS提供的MVCC併發控制邏輯,這裡一個核心點是GTS時間戳,是由 GTS叢集進行提供。

GTS叢集是從零開始單向遞增的邏輯時鐘,通過硬體提供足夠穩定保障,並且是單向遞增,我們利用這個特性來進行高效能分散式事務。而GTS對硬體沒有要求,可以通用伺服器來做GTM節點,同時GTS本身可以通過流複製來保證可靠性。在效能方面,24 核伺服器能夠處理1200萬的QPS,幾乎可以滿足所有場景的需要。

TDSQL PG版效能

TDSQL PG版在全平行計算方面的並行能力分為三個層級:

一是節點級並行,所謂節點級並行是系統拿到一個查詢後,會把查詢下發給不同的 DN,並且通過 DN 之間的分片查詢節點級並行。

二是程序中並行,在執行器拿到運算元以後,把它運算元並行化,允許多個 CPU 同時用資源來完成查詢工作。

三是通過指令級,比如可以通過特殊的 CPU 指令,SIMD 指令,進行算術運算等,來提升計算效率。

今年新增另一特性 全域性索引 ,要知道如果在分散式設計中,表配置非分佈鍵效能它比分佈鍵效能差距是比較大的。舉個例子,比如說分佈鍵是其它鍵,那這裡用一個非分佈鍵,比如說 Mike 這個名稱。

由於這個鍵它不是我們的分佈鍵,資料庫其實不知道它在到底儲存到哪個節點。那這樣我們就需要在節點上,比如說DN1、DN2、DN3都需要掃描。假設這條資料只有一條,多了很多無用掃描,特別是節點數越來越多時。當然有了全域性索引,相當於有一個全域性索引來儲存MAC這條記錄對應的儲存節點,那這樣就可以比較快的去找到這一個節點。並且隨著節點數的增多,效能也是穩步提升。

這裡需要一個全域性事務來保證全域性索引,保證資料表之間的一致性 可以看到右下角這個圖,藍色是非分佈鍵的索引,黃色的是分佈鍵,灰色的是全域性索引。可以看到相對於非全域性索引它的提升還是很大的。相對於我們的分佈鍵查詢,它的效能是比較接近的。全域性索引的高效能還可以用在外來鍵或者全域性唯一約束上,這樣可以極大減少業務的分散式改造成本。

這裡有一個特性透明壓縮, 支援資料庫透明壓縮能力,這個是完全對業務透明 。通過簡單的Alter table,可以把一個表直接壓縮成它的 1/3,或者它的 1/4、1/5。然後從左邊的圖可以看到透明壓縮主要儲存層工作,頁面在落盤的時候,呼叫指定的一個壓縮演算法,然後儲存在對應檔案系統裡面來減少磁碟空間。

當業務需要使用一個頁面讀取出去時,我們會在記憶體裡進行解壓,供業務來使用。下面是TPCC模型測試結果。可以看到一個磁碟壓縮率大概是降低了70%左右,CPU大概是增加20%,因為要花額外CPU去做壓縮,效能TPCC查詢效能是降28%。

另外TDSQL PG版支援全面的迴圈校驗 。這是對磁碟損壞的保障方案。我們都知道磁碟壞塊概率相對較低,但隨著業務量增長,叢集數、伺服器數增多,它會成為一個必然事件。TDSQL PG版支援全流程校驗,例如定期全量校驗,主動實施故障探測,故障阻斷,在故障發現之後,會自動發起增量修復去完成副本的修復。在這樣一個手段中,可以保證壞塊不會擴散到冷備還有備機,相當於病毒,不能讓它擴散到所有副本上。

在表上我們的一個數據中,維護了一個塊級別的CRC資訊,從介質裡面讀取的時我們可以校驗來做資料保護。最後來說當故障發生時,做資料儲備轉換時,可以保證在資料正確情況下,第一時間恢復業務,再非同步修復流程。通過備份或者說冷備中,來拿取受損頁面推進修復。線上修復可以通過可用的副本來進行,沒有可用副本才會從冷備中拉取。

另外一點Direct IO因為Page Buffer問題,導致記憶體的利用率並不高,並且在某些情況下容易引起效能波動。 TDSQL PG版支援 Direct IO,經過測試可以提高記憶體的使用率。 並且在TPCC測試,它的波動是更加平穩的,也就是說它能夠提高業務穩定性。在新版本中, 我們支援多種定位檢視 ,一是全域性事物檢視,支援全域性連結管理。第二是我們記憶體佔用檢視,可以對當前記憶體使用量進行一些統計。

使用者案例

接下來是我們的經典使用者案例。TDSQL PG版是在2015年,替換微信支付的分庫分表系統上線,支撐微信支付從500萬筆到1000萬再到10億筆,保證業務穩定性還有連續性,這裡用到了資料治理功能。圖上右上角是我們的 CLB 騰訊的內部的一個負載均衡的元件。

CLB是我們接入的節點,在DN上漲,我們是儲存四個月資料,四個月內資料是存在一個高效能的SSD裡面,四個月前的資料會存到比較普通裝置,比如大儲存硬碟。它使用了大小商戶策略,可以解決不同體量使用者傾斜問題,從而高效保證系統執行。通過這種方式,把整個業務成本降低到1/4左右。

在外部有比較大的一個保險公司,上線了非常多的例項。這裡只展現了我們的一個部署架構。首先分為兩個平面,一個是讀寫平面,一個只讀平面,讀寫平面業務可以通過 VIP 來提供讀寫能力,我們的只讀平面,VIP在多個節點中做負載均衡,提供一個業務只讀的能力。

TDSQL PG版在資料生成後,需要把資料同步到其它的系統上,例如Elasticsearch、MySQL、INFORMIX 或者Oracle在TDSQL PG版中可以在通訊的同時把它解成一個 Json 形式,同步到Kafka同步工具,最後通過Kafka通到其它業務系統。

最後一個案例是去年上線的的七人普系統,這個專案是國家核心重點專案,涉及700萬的普查員以及1億人自主申報,並且在15天內完成資料量採集。在專案中 PostgreSQL 承擔了非常重要的分析業務,同時具備了實時寫入還有海量資料同時分析能力。目前PG已經成為新應用的首選。現在屬於資料庫黃金時代,所以我們會一起共同努力,謝謝大家!

-- 更多精彩 --

點選 閱讀原文 ,瞭解更多優惠