TiDB 探索 | 一棧式 X 規(guī)?;?X 多元化:PingCAP 馬曉宇談 TiDB HTAP 演進(jìn)之路
本文根據(jù) PingCAP DevCon 2021 上 PingCAP HTAP 產(chǎn)品負(fù)責(zé)人馬曉宇的分享整理而成,介紹了 TiDB 在 HTAP 領(lǐng)域探索的過去、現(xiàn)在和未來。
數(shù)據(jù)庫(kù)為何而建

TiDB HTAP 的演進(jìn)之路
現(xiàn)在 TiDB 的 HTAP 走到哪里了呢?從最早開始,TiDB 是一個(gè)單引擎,主 OLTP,輔以 OLAP。那個(gè)時(shí)候 HTAP 的 OLAP 部分是協(xié)處理器,也就是說每個(gè) TiKV 會(huì)分擔(dān)一部分 OLAP 的處理,比如說可以把所有的聚合推到 TiKV,每個(gè) TiKV 分別以分片的方式去聚合部分?jǐn)?shù)據(jù),然后再向 TiDB 去做匯總,可以比較快地實(shí)現(xiàn)類似多維聚合這樣的需求。

到了第二階段,我們發(fā)現(xiàn)光有聚合其實(shí)是不夠的,必須還要有處理復(fù)雜計(jì)算的引擎。那個(gè)時(shí)候公司人也不多,我們就選擇借助其他外部的引擎。TiSpark 這套引擎就是借助 Apache Spark 連接 TiKV 存儲(chǔ)引擎,可以用 Spark 的分布式計(jì)算器直接去讀取 TiKV 的分布式存儲(chǔ)引擎來完成 HTAP 的使命。在這個(gè)場(chǎng)景中,我們以一個(gè) OLTP 引擎加一部分協(xié)處理器的功能,再輔以外部的分析引擎來完成 HTAP 功能。
第三段也就是現(xiàn)在的狀態(tài),TiDB 擁有 OLTP 的主引擎,有一個(gè) TiFlash 分析引擎。TiFlash 實(shí)時(shí)從交易引擎同步數(shù)據(jù)以達(dá)到實(shí)時(shí)分析的目的,并且可以實(shí)現(xiàn)一致性的數(shù)據(jù)讀取。TiFlash 這套分析引擎的速度也完全可以與業(yè)界各種專項(xiàng)的分析引擎媲美。另外,通過大數(shù)據(jù)生態(tài)圈的銜接,例如借助 TiSpark,TiDB 同樣可以獲得更多外部引擎的能力加持。第四階段,TiDB 的HTAP 要走向何方?這個(gè)我們等到最后再講。
TiDB 5.0 HTAP 的特性和場(chǎng)景

舉個(gè)例子,我們?cè)诎l(fā)版之前會(huì)模擬用戶場(chǎng)景進(jìn)行測(cè)試,在交易引擎上不斷地進(jìn)行高頻的轉(zhuǎn)帳模擬,同時(shí)我們會(huì)在分析引擎上做對(duì)帳。在連續(xù)長(zhǎng)時(shí)間的測(cè)試中,但凡有一次數(shù)據(jù)對(duì)不上,產(chǎn)品的發(fā)版是會(huì)停止的。TiDB 的 HTAP 引擎確保了在任何交易發(fā)生的時(shí)候,分析引擎是可以完整地讀到最新而且是一致的數(shù)據(jù)?,F(xiàn)實(shí)中有很多對(duì)數(shù)據(jù)一致性有非常高要求的場(chǎng)景,比如說銀行,假設(shè)有一個(gè)財(cái)務(wù)系統(tǒng),不斷的有財(cái)務(wù)數(shù)據(jù)進(jìn)來,需要通過 TiFlash 或者通過 OLAP 引擎去做對(duì)賬,這個(gè)場(chǎng)景 TiFlash 是完全可以勝任的。
另外,TiDB 的 HTAP 和很多其他產(chǎn)品有非常顯著的區(qū)別。市場(chǎng)上有些 HTAP 產(chǎn)品采用融合引擎的架構(gòu),在同一組資源上通過精巧的資源調(diào)度的方式來實(shí)現(xiàn),在不同的引擎之間進(jìn)行作業(yè)隔離。但是,從工業(yè)界的角度看,不管業(yè)務(wù)隔離做得有多精巧,其實(shí)都沒有辦法匹敵 TiDB HTAP 用兩套資源分別去執(zhí)行 OLTP 和 OLAP。可以說 TiDB HTAP 在資源和業(yè)務(wù)隔離層面的設(shè)計(jì),在業(yè)界是非常優(yōu)秀的。

雖然 TiFlash 不是一個(gè)專門為 OLAP 而設(shè)計(jì)的引擎,但是經(jīng)過實(shí)際場(chǎng)景的 TPC-H 測(cè)試,TiFlash 相對(duì)于業(yè)界比較流行的 OLAP 分析框架具備更快的處理能力。對(duì)比 Greenplum 最新版、Apache Spark 3.1.1 以及 Parquet,TiFlash 在開啟 MPP 的情況下整體的處理性能有 2-3 倍的優(yōu)勢(shì)。
從 TiFlash 發(fā)布至今,通過 Telemetry 數(shù)據(jù)分析,我們發(fā)現(xiàn)在 TiDB 生產(chǎn)規(guī)格的集群中(TiKV大于三個(gè)節(jié)點(diǎn)且運(yùn)行超過一個(gè)月),已經(jīng)有接近三分之一的用戶部署了 TiFlash 節(jié)點(diǎn)。

這些用戶是如何使用 TiFlash 的?從調(diào)研的結(jié)果看,大致有以下三種典型的應(yīng)用場(chǎng)景:

第一種是 OLTP和 OLAP 混合負(fù)載場(chǎng)景。比如說企業(yè)的 ERP 應(yīng)用,或者是類似于經(jīng)營(yíng)分析系統(tǒng),需要做實(shí)時(shí)報(bào)表,OLTP 負(fù)載使用 TiDB,報(bào)表和實(shí)時(shí)看板使用 TiFlash,這是一個(gè)最經(jīng)典的混合架構(gòu)的應(yīng)用。
第二種是流式計(jì)算場(chǎng)景。我們發(fā)現(xiàn) TiDB 的用戶和 Flink 的用戶有比較高的重合度,這些用戶使用 Flink 對(duì) CDC 進(jìn)行加工,比如說平寬表或者做預(yù)聚合,然后把這些數(shù)據(jù)落到 TiFlash 或者落到 TiDB 里面。為什么 TiDB 是一個(gè)很好的承載體?首先 TiDB 是可擴(kuò)展的,它既有行,又有列,并且支持實(shí)時(shí)更新,所以對(duì) Flink 來說是一個(gè)很好的落地點(diǎn)。落地之后,除了 Flink 本身可以計(jì)算指標(biāo)和看板,也可以通過落地的數(shù)據(jù)做一個(gè)輕量級(jí)的實(shí)時(shí) ETL,形成一個(gè)實(shí)時(shí)數(shù)倉(cāng),最后在 TiDB 里面去展示各種各樣的報(bào)表。
另外一種是數(shù)據(jù)中樞場(chǎng)景,這個(gè)場(chǎng)景涉及面比較廣。很多用戶在使用 TiDB 之前已經(jīng)有了 Hadoop,等其他大數(shù)據(jù)分析或數(shù)倉(cāng)類架構(gòu)。在和這些數(shù)據(jù)棧并存的時(shí)候,用戶把 TiDB 作為業(yè)務(wù)層和離線層之間的數(shù)據(jù)中樞層,提供對(duì)數(shù)據(jù)的實(shí)時(shí)訪問和實(shí)時(shí)的收納。數(shù)據(jù)會(huì)從 CDC 實(shí)時(shí)集成到 TiDB,TiDB 也可以分批地歸檔到離線層的數(shù)據(jù)湖和數(shù)據(jù)倉(cāng)庫(kù)。在數(shù)據(jù)中樞層,TiDB 可以直接提供實(shí)時(shí)報(bào)表,也可以提供跨不同業(yè)務(wù)線的數(shù)據(jù)采集和數(shù)據(jù)訪問。以上是 TiDB HTAP 三種比較典型的用法。
以云原生為骨干,走向多模和實(shí)時(shí)


第二個(gè)是云原生,以 TiDB Cloud 為核心的聯(lián)邦平臺(tái)。為什么 Cloud 和 HTAP 會(huì)相關(guān)呢?假設(shè)現(xiàn)在的數(shù)據(jù)庫(kù)是多模的,可以同時(shí)承載 OLTP 和 OLAP 的不同業(yè)務(wù)。那么在云上,可以為用戶提供一個(gè)超級(jí)大的池子,這個(gè)池子的部署和運(yùn)維都會(huì)非常方便,可以把用戶不同的業(yè)務(wù)線都匯聚到這個(gè)池子,不管是說 OLTP 直接放到 TiDB 上,還是說數(shù)據(jù)中臺(tái)直接放到 TiDB 上。另外,存算分離之后,可以把 TiDB 計(jì)算引擎單獨(dú)提供出來,然后再配合 Foreign Data Wrapper 這種方式來提供聯(lián)邦查詢,通過 TiDB 和其他數(shù)據(jù)生態(tài)進(jìn)行連接,還可以用外部引擎來補(bǔ)充 TiDB 原生引擎暫時(shí)沒有提供的功能,比如 Machine Learning,TiDB HTAP 也可以借助 TiSpark 等大數(shù)據(jù)生態(tài)引擎來處理。
從多模的角度看,HTAP 本身就是一個(gè)多模的基礎(chǔ),現(xiàn)在 TiDB 本身就是一個(gè)數(shù)據(jù)生態(tài),除了OLTP、OLAP,其實(shí)也有 KV。另外 TiDB 社區(qū)也會(huì)發(fā)起其他引擎項(xiàng)目,例如之前 Hackathon 中倒排索引的項(xiàng)目,類似這些也會(huì)逐步加到我們的 Roadmap 中。
TiDB HTAP 希望達(dá)到的是什么?OLTP 是所有數(shù)據(jù)的源頭,也就是萬里長(zhǎng)征的入口。我們希望將萬里長(zhǎng)征入口把握在 TiDB 這邊,以 HTAP 能力支撐敏捷和實(shí)時(shí)的分析體驗(yàn),以流和物化視圖能力拓展實(shí)時(shí)數(shù)倉(cāng)邊界。云化適合的能力,推進(jìn)從在線到離線之間的串聯(lián)。最后,以大數(shù)據(jù)生態(tài)和聯(lián)邦查詢的方式把整個(gè)體系同步到一起。TiDB HTAP 始終希望為用戶提供統(tǒng)一的一站式體驗(yàn)。

