TiDB 是一款開源(遵循 Apache License 2.0 協(xié)議)的定位于在線事務處理/在線分析處理( HTAP: Hybrid Transactional/Analytical Processing)的融合型數(shù)據(jù)庫產(chǎn)品,實現(xiàn)了一鍵水平伸縮,強一致性的多副本數(shù)據(jù)安全,分布式事務,實時 OLAP 等重要特性。同時兼容 MySQL 協(xié)議和生態(tài),遷移便捷,運維成本極低。TiDB 的目標是為用戶提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。TiDB 適合高可用、強一致要求較高、數(shù)據(jù)規(guī)模較大等各種應用場景。
TiDB 官方網(wǎng)站提供了非常豐富且完整的案例和學習資源,因此本文基于 TiDB v4.0 (最新穩(wěn)定版)摘取了官方在線文檔中的部分內(nèi)容,旨在幫助讀者快速了解 TiDB 的定位、架構、生態(tài)、特性和應用場景。
1.應用案例
TiDB 官方提供了大量針對互聯(lián)網(wǎng)、游戲、金融、大型企業(yè)等行業(yè)的生產(chǎn)環(huán)境應用案例:

2.使用指南
TiDB 官方提供了極其優(yōu)秀的中文在線文檔,文檔中涵蓋了 TiDB 的產(chǎn)品概述、安裝部署、數(shù)據(jù)遷移、運維操作、監(jiān)控告警、故障診斷、性能調(diào)優(yōu)、生態(tài)工具、技術指南、常見問題等全面的應用案例和指令參數(shù)表,文檔與產(chǎn)品版本一致性完整,且提供 PDF 格式的本地文檔。
TiDB 官方在線文檔【https://pingcap.com/docs-cn/stable/】。如下圖:

3.核心架構

1)TiDB Server
TiDB Server 負責接收 SQL 請求,處理 SQL 相關的邏輯,并通過 PD 找到存儲計算所需數(shù)據(jù)的 TiKV 地址,與 TiKV 交互獲取數(shù)據(jù),最終返回結果。TiDB Server 是無狀態(tài)的,其本身并不存儲數(shù)據(jù),只負責計算,可以無限水平擴展,可以通過負載均衡組件(LVS、HAProxy 或 F5)對外提供統(tǒng)一的接入地址。
2)PD Server
Placement Driver(簡稱 PD)是整個集群的管理模塊,其主要工作有三個:一是存儲集群的元信息(某個 Key 存儲在那個 TiKV 節(jié)點);二是對 TiKV 集群進行調(diào)度和負載均衡(如數(shù)據(jù)的遷移、Raft Group Leader 的遷移等);三是分配全局唯一且遞增的事務 ID。PD 是一個集群,需要部署奇數(shù)個節(jié)點,一般線上推薦至少部署 3 個節(jié)點。PD 在選舉的過程中無法對外提供服務,這個時間大約是 3 秒。
3)TiKV Server
TiKV Server 負責存儲數(shù)據(jù),從外部看 TiKV 是一個分布式的提供事務的 Key-Value 存儲引擎。存儲數(shù)據(jù)的基本單位是 【Region(分片)】,每個 Region 負責存儲一個 Key Range(從 StartKey 到 EndKey 的左閉右開區(qū)間)的數(shù)據(jù),每個 TiKV 節(jié)點會負責多個 Region 。TiKV 使用 Raft 協(xié)議做復制,保持數(shù)據(jù)的一致性和容災。副本以 Region 為單位進行管理,不同節(jié)點上的多個 Region 構成一個 Raft Group,互為副本。數(shù)據(jù)在多個 TiKV 之間的負載均衡以 Region 為單位進行調(diào)度由 PD 調(diào)度。
4)TiFlash
TiFlash 是一類特殊的存儲節(jié)點。和普通 TiKV 節(jié)點不一樣的是,在 TiFlash 內(nèi)部,數(shù)據(jù)是以列式的形式進行存儲,主要的功能是為分析型的場景加速。
關于 TiDB 架構的詳細內(nèi)容請參見官方在線文檔【https://pingcap.com/docs-cn/stable/tidb-architecture/】
4.生態(tài)工具
1、TiDB Operator
TiDB Operator 是 Kubernetes 上的 TiDB 集群自動運維系統(tǒng),提供包括部署、升級、擴縮容、備份恢復、配置變更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以無縫運行在公有云或私有部署的 Kubernetes 集群上。
關于 TiDB Operator 的詳細內(nèi)容請參見官方在線文檔【https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/】。如下圖:

2、TiDB Data Migration
TiDB Data Migration (DM) 是一體化的數(shù)據(jù)同步任務管理平臺,支持從 MySQL 或 MariaDB 到 TiDB 的全量數(shù)據(jù)遷移和增量數(shù)據(jù)同步。使用 DM 工具有利于簡化錯誤處理流程,降低運維成本。DM 以 SQL 語句的形式將數(shù)據(jù)同步到 TiDB 中,因此各個版本的 DM 都分別兼容所有版本的 TiDB。在生產(chǎn)環(huán)境中,推薦使用 DM 的最新已發(fā)布版本。
關于 TiDB Data Migration 的詳細內(nèi)容請參見官方在線文檔【https://docs.pingcap.com/zh/tidb-data-migration/stable】。如下圖:

3、Database Tools
TiDB 數(shù)據(jù)庫工具是用于處理 TiDB 導入導出數(shù)據(jù)的命令行實用程序的集合。
1)全量數(shù)據(jù)導出工具:Dumpling 是一個用于從 MySQL/TiDB 進行全量邏輯導出的工具,該工具可以把存儲在 TiDB/MySQL 中的數(shù)據(jù)導出為 SQL 或者 CSV 格式,可以用于完成邏輯上的全量備份或者導出。
關于 Dumpling 的詳細內(nèi)容請參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/dumpling-overview】。
2)全量數(shù)據(jù)導入工具:TiDB Lightning 是一個將全量數(shù)據(jù)高速導入到 TiDB 集群的工具,該工具有以下兩個主要的應用場景:一是大量新數(shù)據(jù)的快速導入;二是全量數(shù)據(jù)的備份恢復。目前,Lightning 支持 Mydumper 或 CSV 輸出格式的數(shù)據(jù)源。
關于 TiDB Lightning 的詳細內(nèi)容請參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/tidb-lightning-overview】。
3)數(shù)據(jù)和備份工具:Backup & Restore(簡稱 BR)是 TiDB 分布式備份恢復的命令行工具,用于對 TiDB 集群進行數(shù)據(jù)備份和恢復。
關于 BR 的詳細內(nèi)容請參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/backup-and-restore-tool】。
4)增量日志同步工具:TiDB Binlog 是一個用于收集 TiDB 的 binlog,并提供準實時備份和同步功能的商業(yè)工具。該工具有兩個主要的應用場景:一是實時同步 TiDB 集群數(shù)據(jù)到其他數(shù)據(jù)庫;二是實時備份 TiDB 集群數(shù)據(jù),同時可以用于 TiDB 集群故障時恢復。
關于 TiDB Binlog 的詳細內(nèi)容請參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/tidb-binlog-overview】。
4、TiUP
從 TiDB 4.0 版本開始,TiUP 作為新的工具,承擔著包管理器的角色,管理著 TiDB 生態(tài)下眾多的組件,如 TiDB、PD、TiKV 等。用戶想要運行 TiDB 生態(tài)中任何組件時,只需要執(zhí)行 TiUP 一行命令即可,相比以前,極大地降低了管理難度。
關于 TiUP 的詳細內(nèi)容請參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/tiup-overview】。
5.核心特性
1、水平彈性擴展
分布式的 TiDB 可隨著數(shù)據(jù)增長而無縫地水平擴展,只需要通過增加更多的機器來滿足業(yè)務增長需要,應用層可以不用關心存儲的容量和吞吐。 TiDB 根據(jù)存儲、網(wǎng)絡、距離等因素,動態(tài)進行負載均衡調(diào)整,以保證更優(yōu)的讀寫性能。
2、故障自動恢復
TiDB 使用多副本進行數(shù)據(jù)存儲,并依賴業(yè)界最先進的 Raft 多數(shù)派選舉算法確保數(shù)據(jù) 100% 強一致性和高可用。 副本可跨地域部署在不同的數(shù)據(jù)中心,主副本故障時自動切換,無需人工介入,自動保障業(yè)務的連續(xù)性,實現(xiàn)真正意義上的異地多活。
3、實時 HTAP(實時在線事務處理與在線分析處理)
提供行存儲引擎 TiKV、列存儲引擎 TiFlash 兩款存儲引擎,TiFlash 通過 Raft 協(xié)議實時從 TiKV 復制數(shù)據(jù),確保行存儲引擎 TiKV 和列存儲引擎 TiFlash 之間的數(shù)據(jù)強一致。TiKV、TiFlash 可按需部署在不同的機器,解決 HTAP 資源隔離的問題。
4、一致性分布事務
可以把 TiDB 想象成一個單機的 RDBMS,ACID 事務可以在多節(jié)點間進行,無需擔心一致性問題。 TiDB 對業(yè)務沒有任何侵入性,是傳統(tǒng)的數(shù)據(jù)庫中間件、數(shù)據(jù)庫分庫分表等優(yōu)雅的替換方案。
5、高度兼容 MySQL
TiDB 的通訊協(xié)議與 MySQL 高度兼容,可以像使用 MySQL 單點數(shù)據(jù)庫一樣使用 TiDB,用 TiDB 替換 MySQL 幾乎無需修改應用系統(tǒng)的代碼。 MySQL 的客戶端管理工具及社區(qū)所有的周邊工具都可直接接入,極大降低學習和使用成本。TiDB 在大數(shù)據(jù)量下復雜查詢方面,相比 MySQL 有絕對的性能優(yōu)勢。
注意:TiDB 不支持 MySQL 的功能特性包括:
- 存儲過程與函數(shù)
- 觸發(fā)器
- 事件
- 自定義函數(shù)
- 外鍵約束
- 全文/空間函數(shù)與索引
- 非 ascii/latin1/binary/utf8/utf8mb4 的字符集
- SYS schema
- MySQL 追蹤優(yōu)化器
- XML 函數(shù)
- X Protocol
- Savepoints
- 列級權限
- XA 語法(TiDB 內(nèi)部使用兩階段提交,但并沒有通過 SQL 接口公開)
- CREATE TABLE tblName AS SELECT stmt 語法
- CREATE TEMPORARY TABLE 語法
- CHECK TABLE 語法
- CHECKSUM TABLE 語法
詳細的 MySQL 的兼容情況請參見官方在線文檔【https://pingcap.com/docs-cn/stable/mysql-compatibility】
6、完善的生態(tài)工具
TiDB 提供包括自動化運維、數(shù)據(jù)同步、數(shù)據(jù)導入導出和組件安裝包管理等多種工具,用戶能夠十分便利的進行數(shù)據(jù)庫部署、管理、監(jiān)控,數(shù)據(jù)同步、導入、導出等維護工作。
6.應用場景
1、對數(shù)據(jù)一致性及高可靠、系統(tǒng)高可用、可擴展性、容災要求較高的金融行業(yè)屬性的場景。
傳統(tǒng)的解決方案是同城兩個機房提供服務、異地一個機房提供數(shù)據(jù)容災能力但不提供服務,此解決方案存在以下缺點:資源利用率低、維護成本高、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) 無法真實達到企業(yè)所期望的值。TiDB 采用多副本 + Multi-Raft 協(xié)議的方式將數(shù)據(jù)調(diào)度到不同的機房、機架、機器,當部分機器出現(xiàn)故障時系統(tǒng)可自動進行切換,確保系統(tǒng)的 RTO <= 30s 及 RPO = 0 。
2、對存儲容量、可擴展性、并發(fā)要求較高的海量數(shù)據(jù)及高并發(fā)的 OLTP 場景。
傳統(tǒng)的單機數(shù)據(jù)庫無法滿足因數(shù)據(jù)爆炸性的增長對數(shù)據(jù)庫的容量要求,可行方案是采用分庫分表的中間件產(chǎn)品或者 NewSQL 數(shù)據(jù)庫替代、采用高端的存儲設備等,其中性價比最大的是 NewSQL 數(shù)據(jù)庫,例如:TiDB。TiDB 采用計算、存儲分離的架構,可對計算、存儲分別進行擴容和縮容,計算最大支持 512 節(jié)點,每個節(jié)點最大支持 1000 并發(fā),集群容量最大支持 PB 級別。
3、事實在線事務處理與在線分析處理場景。
傳統(tǒng)的解決方案是通過 OLTP 型數(shù)據(jù)庫處理在線聯(lián)機交易業(yè)務,通過 ETL 工具將數(shù)據(jù)同步到 OLAP 型數(shù)據(jù)庫進行數(shù)據(jù)分析,這種處理方案存在存儲成本高、實時性差等多方面的問題。TiDB 在 4.0 版本中引入列存儲引擎 TiFlash 結合行存儲引擎 TiKV 構建真正的 HTAP 數(shù)據(jù)庫,在增加少量存儲成本的情況下,可以同一個系統(tǒng)中做聯(lián)機交易處理、實時數(shù)據(jù)分析,極大地節(jié)省企業(yè)的成本。
4、數(shù)據(jù)匯聚、二次加工處理的場景。
傳統(tǒng)常見的解決方案是采用 ETL + Hadoop 來完成,但 Hadoop 體系太復雜,運維、存儲成本太高無法滿足用戶的需求。與 Hadoop 相比,TiDB 就簡單得多,業(yè)務通過 ETL 工具或者 TiDB 的同步工具將數(shù)據(jù)同步到 TiDB,在 TiDB 中可通過 SQL 直接生成報表。