TDSQL 全時態數據庫系統-理念與願景

  • 2019 年 10 月 11 日
  • 筆記

本文大綱:

  • Abstract
  • Introduction
    • 研究動機
    • TDSQL整體架構
    • TDSQL對時態數據庫的需求
    • T-TDSQL核心技術與系統的價值
    • T-TDSQL解決了的問題
  • Acknowledgments
  • References

1 Abstract

TDSQL是騰訊公司研發的一款事務型分佈式數據庫。

T-TDSQL是基於TDSQL的一個分佈式全時態數據庫。其特點是可擴展、多版本事務管理、分佈式存儲和計算、強數據一致性和強同步機制,且提供有效時間、事務時間雙時態的全態數據存儲、管理、計算。

這篇文章描述了T-TDSQL的架構、雙時態特性集,以及全雙時態設計思考點和決策的因素。另外,基於MVCC技術描述了一種「全態數據可見性判斷算法/歷史態數據可見性判斷算法」,這種算法能夠讀取到全態/歷史態數據和其上發生的操作,這是T-TDSQL全時態數據庫系統實現的關鍵算法。另外,T-TDSQL支持多種強大的特性,諸如:無阻塞讀歷史態數據、無鎖只讀事務、增量抽取、增量計算、全時態一致性快照等。

全時態數據庫T-TDSQL核心價值觀是:歷史數據富有價值。

全時態數據庫T-TDSQL核心理念是:為數據賦能。

2 Introduction

  研究動機

騰訊公司的計費業務系統,是世界上領先的金融雲計費業務系統。這個系統包括SAAS、PAAS、IAAS三個層面。在SAAS層面,包括米大師、雲商店、TDSQL等系統。

TDSQL託管賬戶近280億,米大師依託TDSQL進行金融交易,騰訊充值及其相關合作夥伴的日流水量超過150億條,每天處理的交易量超過100億筆。金融數據在TDSQL數據庫中進行結算、對賬、審計、風控數據分析、構建用戶畫像等業務。如王者榮耀遊戲點券的對賬業務、用戶賬戶消費充值變化審計與風控業務等。

要進行諸如對賬、審計等業務,數據來源有兩部分。一部分數據來源是從不同系統(關係數據庫或NoSQL系統)的日誌數據中來,稱為流水日誌。但某個這樣的系統每天的日誌流水數據近百G且從趨勢看增量數據遞增很快。另外,有些數據是在TDSQL中按時間分表,需在一段時間結束後對按時間分表的數據利用流水日誌進行對賬計算。

對賬主要是解決幾種異常情況:

1.  系統存在BUG,或者在故障時,未表現出預期的情況。這可能導致發貨成功扣款不成功,或者扣款成功未發貨的情況。如騰訊視頻VIP管理系統的充值、發貨。

2.  規避黑客/內部風險。例如不法人員繞過業務系統去給自己充值等舞弊行為。

這樣的對賬業務種類很多,不同的應用其日誌流水格式不完全相同,TDSQL託管的賬戶需要定時對多級數千種業務和賬戶做數據一致性對賬檢驗。

從技術的角度看,存在四個問題:

1.  應用開發複雜:使用業務日誌,需要業務系統不斷產生日誌信息,然後耗費計算資源對不同的日誌格式進行解析,把日誌信息存儲到分析系統。由此帶來了開發的負擔和資源的浪費。

2.  數據邏輯割裂:TDSQL中按時間分表,只能按確定的時間段進行結算,不能靈活、方便的計算。如計算任意時間段內的數據,按時間段的分表在物理上割裂了數據按時間的邏輯連續特性,需要指定若干個特定的分表才能進行計算。

3.  實時特性丟失:如上兩個問題,隱含地,意味着進行計算的數據需要導入到一個新的分析系統進行計算,導出/導入數據的過程也帶來了資源和時間的消耗、使得分析系統難以具備實時計算特性。

4.  數據管理複雜:另外,日誌等信息,是歷史態數據,需要長期保存。在騰訊公司每日對不同格式的、超過150億條流水日誌進行生成、存儲、解析與管理等,這成為一個巨大的挑戰。

現代的數據庫系統只保留有數據的當前值,而因存儲成本等原因,歷史態數據被丟棄。而數據作為重要的資產,不管是當前數據,還是歷史上曾經存在過的數據,都具有重要價值。因此,歷史態數據存儲、被分析、被挖掘、被反覆使用,是當前互聯網等企業的需求。尤其是金融類歷史態數據,因為安全、需要被多次計算的原因,在騰訊公司的計費業務中,帶有時態屬性的數據被管理的需求日益旺盛。

基於上述原因,騰訊公司基於TDSQL關係型數據庫研發了時態數據庫 T-TDSQL,由數據庫系統統一管理海量的全時態數據、當前數據,解決了上述四個業務

的問題。

  TDSQL整體架構

TDSQL是騰訊公司基於MySQL/InnoDB實現的一個可擴展的分佈式數據庫,支撐了騰訊公司如2017年的2377.6億人民幣的金融計費業務。

TDSQL整體架構如圖1,採用SHARDING技術把邏輯錶轉換為不同物理實例上的子物理表,從而提供了數據分佈的功能。每份數據為一個SET,一個SET內存在多個副本,副本間通過TDSQL的強同步技術實現數據強一致。

SET中的數據可以線性擴容。節點失效通過ZooKeeper進行管理[2],並提供了兩種節點級、Server級數據恢復技術。跨節點的寫事務通過XA接口和2PC技術實現分佈式事務對數據操作的原子性、一致性。

圖1中的TSI部分,體現了T-TDSQL全時態數據庫在存儲層面對於TDSQL的創新與擴展,通過統一的數據管理接口,以滿足對海量的歷史態數據進行存儲、管理。歷史態數據的計算,則體現在圖1的SQL計算層。詳情參見第三、四章。

圖1 T-TDSQL架構圖

  TDSQL對時態數據庫的需求

基於TDSQL數據庫構建的金融計費業務,存在如上的問題外,還有一些時態需求,如金融監管部門或一位內部審計人員要求計費部門報告在過去5年內一家客戶的金融賬戶所做的更改。

常規的解決辦法,是按業務特點存儲若干年流水日誌數據,當需要時,把5年內的這些流水日誌數據讀取,從中過濾出特定客戶的歷史態數據。

顯然,當需要個別用戶的歷史態數據,要過濾大量非相關用戶的數據,會浪費大量的計算資源和時間,數據的檢索方式原始且低效。

而我們期望,構建一個數據庫系統,解決如上問題,新系統的核心價值觀是「歷史數據富有價值」,新系統應該提供的特性如下:

1.   全時態數據模型。能在數據庫系統內統一管理數據的生命周期,即一個數據的誕生、修改、消亡的全過程、過程中的狀態變遷操作的動作都能被一個數據庫系統管理;也能按照對象的時間屬性對對象進行管理和檢索。如此,需要一個數據模型對數據進行管理。在3.1節討論了全時態數據模型這個問題。

2.   全時態數據存儲。現有的數據庫系統,只能保存數據的當前狀態值(當前態數據)。實現了MVCC技術的數據庫,能在有限時長的時刻內保存尚被活躍事務使用的舊版本數據(過渡態數據)。但不再被活躍的事務操作的舊版本數據(歷史態數據)被清理了,所以保存歷史態數據是一個需要解決的問題,在3.2節討論了如何存儲歷史態數據,並根據數據的特點提供了行存、列存等多種存儲格式。4.3節討論了如何構建合適的索引以助高效讀取歷史態數據。數據的有效時間狀態的存儲和管理(T-TDSQL提供了有效時間時態屬性),類似普通列,4.4節討論。

3.   全時態數據管理。數據一旦轉變為歷史態數據,就只具有歸檔的價值不可再更改。而歷史態數據的數據量越來越大後,單機不能夠容納,存儲海量歷史態數據也將變為挑戰。所以4.5節討論了時態數據的常規管理如備份恢復等、4.6節討論了海量的歷史態數據如何集群化管理的問題。

4.   全時態數據計算。歷史態數據存儲在現有的數據庫系統中,基於現有的MVCC技術是不能夠讀取到歷史態數據的,如何歷史態數據讀取是一個歷史態數據可見性判斷的問題,在4.3節對這個問題進行了描述[1]。第4.3節討論了如何利用索引高效讀取歷史態數據。

這些特性的實現,踐行了「歷史數據富有價值」,是的歷史數據能夠被存儲、管理、參與到計算當中。

  T-TDSQL核心技術與系統的價值

TDSQL Temporal Database SystemOf The Tencent,簡稱T-TDSQL。

T-TDSQL是騰訊公司基於上節需求實現的一個帶有雙時態特徵的分佈式數據庫系統。

其核心思想,是利用MVCC技術,確保數據庫系統中有數據的舊版本,然後在系統清理舊版本數據的時刻,把將被清理的數據存儲而不是被清理,從而實現了歷史態數據的存儲。

之後根據騰訊公司提出的「歷史態數據可見性判斷算法」、基於索引高效地讀取歷史態數據,從而使得獲取歷史態數據時只訪問特定範圍的數據而提高查詢效率。

基於數學中集合對稱差的原理的「歷史態數據可見性判斷算法」(4.1.1節),提出了快照差的概念和元組的歷史態版本可見性算法,可讀取任意歷史時間段的歷史態數據。

當歷史態數據可讀取時,基於歷史上任何一個時間點T,可求出此時節點之後的任意一個時間段內相對於時間點T的數據的變化情況,如新插入的數據、連續被更新的數據、以及被刪除的數據,並能識別出針對數據的操作動作是插入、更新還是刪除。如此能追蹤數據的歷史軌跡,並能方便獲取基於時間點T之後任意時間段的增量數據,還能在增量數據的基礎上進行多表連接的增量計算。

數據庫中存儲有數據的歷史狀態信息,數據的安全性得到保證。防止篡改數據、數據誤刪除的恢復、賬戶變化軌跡追蹤、回溯歷史時空里的「過去的」數據等,在T-TDSQL中成為現實。

數據庫中存儲有數據的歷史狀態信息,基於歷史上任何一個時間點T,可求出此時節點之後的任意一個時間段內相對於時間點T的數據的變化情況,使得基於日誌、觸發器等開發方式獲取數據的變遷流水和增量數據等傳統的開發方式,成為過去。

T-TDSQL存儲、管理海量歷史態數據、當前數據,使得隨時都可以獲取任何時間段的數據,因而流水日誌不再重要。基於索引檢索歷史態數據時如同基於索引檢索當前數據一樣的方便快捷且消耗最少量的計算資源,這對於審計、安全、檔案等部門有幫助。

T-TDSQL方便獲取增量數據使得基於觸發器或日誌方式進行數據同步的系統以實現ETL、OLAP等應用開發變得簡單,基於MVCC的歷史態數據獲取技術不會有讀-寫、寫-讀阻塞,因而數據讀取的效率很高。

根據業務特點,T-TDSQL提供了兩種歷史態數據的存儲方式,一個是行存、一個是列存,使得基於T-TDSQL的OLAP系統成為現實,且計算高效。T-TDSQL結合諸如Spark下推、列存等機制,能有效地支持「數據在生命周期範圍內的聯機分析」而不僅僅是「基於當前狀態值的聯機分析」。

T-TDSQL存儲、管理海量歷史態數據,分為兩個層面:第一,不僅受限於單機系統的存儲能力,其支持分佈式網絡文件系統以支持單機無限數據量的存儲。第二,數據可以從單機系統脫機,然後聯機到一個集群計算系統,把多個單機的海量數據聚集到一個集群中,並支持在集群中進行計算。

T-TDSQL不僅是存儲、管理了歷史數據,而且還參與到了「創造數據」的環節中,為數據賦予了事務時態、與用戶的關聯關係等,甚至還可以創造數據之間的關聯關係以實現Data Lineage等。

富有價值的全時態數據存儲在數據庫中,為數據安全、數據重演、數據挖掘和AI技術的施展提供了物理基礎。

總結T-TDSQL的特點,可以概括為:一切過往(數據的歷史和狀態)兼可追溯。

  T-TDSQL解決了的問題

T-TDSQL基於TDSQL,所做的功能增強如表1所示,主要使用於金融、保險、預訂系統、決策支持、安全等領域。

表1 T-TDSQL功能對比(√數據庫原生支持;û不支持;?通過配套工具支持)

比較項

TDSQL

T-TDSQL

事務型數據庫的一切特性

分佈式特性

有效時間類應用(履歷管理、合同管理、圖書管理、檔案管理)

û

事務時間類應用(按DML操作追溯數據的變遷史)

û

數據增量抽取

û

數據增量計算(對賬:總賬快對、細賬精確)

û

軌跡數據管理(類似軌跡數據庫)

û

消失的數據查詢(歷史值和所發生操作)–數據歷史不丟失

?

海量數據存儲(本地存儲、網絡存儲)

?

數據按熱度存儲

û

歷史數據集群化存儲、管理(HTAP)

û

安全:數據訂正、歷史追蹤、聯機閃回

?

數據重演:在數據庫引擎層提供分析應用負載

û

基於用戶數據的歷史變遷進行用戶畫像多維度分析

û

Acknowledgments

本項目在騰訊TEG計費平台部立項,研究內容和實現過程得到中國人民大學信息學院教育部數據工程和知識工程重點實驗室和騰訊公司的參與和支持,特別向項目參與人、支持者致謝。

References

[1] Haixiang Li et al. 「EfficientTime-interval Data Extraction in MVCC-based RDBMS」. World Wide Web Journal. 2018, pp.922–933.

[2] 姜曉軼 蔣雪中 周雲軒 時態數據庫研究進展 計算機工程與應用 2005

[3] Dharavath Ramesh, Chiranjeev Kumar: A scalablegeneric transaction model scenario for distributed NoSQL databases. Journal ofSystems and Software 101: 43-58 (2015)

[4]湯庸 時態數據庫導論 2004

[5]Haixiang Li, Yi Feng, Pengcheng Fan. The Art ofDatabase Transaction Processiong: Transaction Management and ConcurrencyControl. First edition. Beijing. China Machine Press. 2017-10-01

[6]David B. Lomet, Roger S. Barga, Mohamed F. Mokbel, German Shegalov, Rui Wang,Yunyue Zhu: Transaction Time Support Inside a Database Engine. ICDE 2006: 35

騰訊技術工程官號

騰訊前沿技術 | 產品 | 行業信息交流發佈平台