TiDB 是一款開源(遵循 Apache License 2.0 協(xié)議)的定位于在線事務(wù)處理/在線分析處理( HTAP: Hybrid Transactional/Analytical Processing)的融合型數(shù)據(jù)庫(kù)產(chǎn)品,實(shí)現(xiàn)了一鍵水平伸縮赚楚,強(qiáng)一致性的多副本數(shù)據(jù)安全爸吮,分布式事務(wù)器仗,實(shí)時(shí) OLAP 等重要特性趟紊。同時(shí)兼容 MySQL 協(xié)議和生態(tài)繁堡,遷移便捷迷帜,運(yùn)維成本極低迹鹅。TiDB 的目標(biāo)是為用戶提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案吃警。TiDB 適合高可用糕篇、強(qiáng)一致要求較高、數(shù)據(jù)規(guī)模較大等各種應(yīng)用場(chǎng)景酌心。
TiDB 官方網(wǎng)站提供了非常豐富且完整的案例和學(xué)習(xí)資源拌消,因此本文基于 TiDB v4.0 (最新穩(wěn)定版)摘取了官方在線文檔中的部分內(nèi)容,旨在幫助讀者快速了解 TiDB 的定位安券、架構(gòu)墩崩、生態(tài)、特性和應(yīng)用場(chǎng)景侯勉。
1.應(yīng)用案例
TiDB 官方提供了大量針對(duì)互聯(lián)網(wǎng)鹦筹、游戲、金融址貌、大型企業(yè)等行業(yè)的生產(chǎn)環(huán)境應(yīng)用案例:
2.使用指南
TiDB 官方提供了極其優(yōu)秀的中文在線文檔铐拐,文檔中涵蓋了 TiDB 的產(chǎn)品概述、安裝部署练对、數(shù)據(jù)遷移遍蟋、運(yùn)維操作、監(jiān)控告警螟凭、故障診斷匿值、性能調(diào)優(yōu)、生態(tài)工具赂摆、技術(shù)指南、常見問題等全面的應(yīng)用案例和指令參數(shù)表钟些,文檔與產(chǎn)品版本一致性完整烟号,且提供 PDF 格式的本地文檔。
TiDB 官方在線文檔【https://pingcap.com/docs-cn/stable/】政恍。如下圖:
3.核心架構(gòu)
1)TiDB Server
TiDB Server 負(fù)責(zé)接收 SQL 請(qǐng)求汪拥,處理 SQL 相關(guān)的邏輯,并通過 PD 找到存儲(chǔ)計(jì)算所需數(shù)據(jù)的 TiKV 地址篙耗,與 TiKV 交互獲取數(shù)據(jù)迫筑,最終返回結(jié)果。TiDB Server 是無(wú)狀態(tài)的宗弯,其本身并不存儲(chǔ)數(shù)據(jù)脯燃,只負(fù)責(zé)計(jì)算,可以無(wú)限水平擴(kuò)展蒙保,可以通過負(fù)載均衡組件(LVS辕棚、HAProxy 或 F5)對(duì)外提供統(tǒng)一的接入地址。
2)PD Server
Placement Driver(簡(jiǎn)稱 PD)是整個(gè)集群的管理模塊,其主要工作有三個(gè):一是存儲(chǔ)集群的元信息(某個(gè) Key 存儲(chǔ)在那個(gè) TiKV 節(jié)點(diǎn))逝嚎;二是對(duì) TiKV 集群進(jìn)行調(diào)度和負(fù)載均衡(如數(shù)據(jù)的遷移扁瓢、Raft Group Leader 的遷移等);三是分配全局唯一且遞增的事務(wù) ID补君。PD 是一個(gè)集群引几,需要部署奇數(shù)個(gè)節(jié)點(diǎn),一般線上推薦至少部署 3 個(gè)節(jié)點(diǎn)挽铁。PD 在選舉的過程中無(wú)法對(duì)外提供服務(wù)伟桅,這個(gè)時(shí)間大約是 3 秒。
3)TiKV Server
TiKV Server 負(fù)責(zé)存儲(chǔ)數(shù)據(jù)屿储,從外部看 TiKV 是一個(gè)分布式的提供事務(wù)的 Key-Value 存儲(chǔ)引擎贿讹。存儲(chǔ)數(shù)據(jù)的基本單位是 【Region(分片)】,每個(gè) Region 負(fù)責(zé)存儲(chǔ)一個(gè) Key Range(從 StartKey 到 EndKey 的左閉右開區(qū)間)的數(shù)據(jù)够掠,每個(gè) TiKV 節(jié)點(diǎn)會(huì)負(fù)責(zé)多個(gè) Region 民褂。TiKV 使用 Raft 協(xié)議做復(fù)制,保持?jǐn)?shù)據(jù)的一致性和容災(zāi)疯潭。副本以 Region 為單位進(jìn)行管理赊堪,不同節(jié)點(diǎn)上的多個(gè) Region 構(gòu)成一個(gè) Raft Group,互為副本竖哩。數(shù)據(jù)在多個(gè) TiKV 之間的負(fù)載均衡以 Region 為單位進(jìn)行調(diào)度由 PD 調(diào)度哭廉。
4)TiFlash
TiFlash 是一類特殊的存儲(chǔ)節(jié)點(diǎn)。和普通 TiKV 節(jié)點(diǎn)不一樣的是相叁,在 TiFlash 內(nèi)部遵绰,數(shù)據(jù)是以列式的形式進(jìn)行存儲(chǔ),主要的功能是為分析型的場(chǎng)景加速增淹。
關(guān)于 TiDB 架構(gòu)的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://pingcap.com/docs-cn/stable/tidb-architecture/】
4.生態(tài)工具
1椿访、TiDB Operator
TiDB Operator 是 Kubernetes 上的 TiDB 集群自動(dòng)運(yùn)維系統(tǒng),提供包括部署虑润、升級(jí)成玫、擴(kuò)縮容、備份恢復(fù)拳喻、配置變更的 TiDB 全生命周期管理哭当。借助 TiDB Operator,TiDB 可以無(wú)縫運(yùn)行在公有云或私有部署的 Kubernetes 集群上冗澈。
關(guān)于 TiDB Operator 的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/】钦勘。如下圖:
2、TiDB Data Migration
TiDB Data Migration (DM) 是一體化的數(shù)據(jù)同步任務(wù)管理平臺(tái)亚亲,支持從 MySQL 或 MariaDB 到 TiDB 的全量數(shù)據(jù)遷移和增量數(shù)據(jù)同步个盆。使用 DM 工具有利于簡(jiǎn)化錯(cuò)誤處理流程脖岛,降低運(yùn)維成本。DM 以 SQL 語(yǔ)句的形式將數(shù)據(jù)同步到 TiDB 中颊亮,因此各個(gè)版本的 DM 都分別兼容所有版本的 TiDB柴梆。在生產(chǎn)環(huán)境中,推薦使用 DM 的最新已發(fā)布版本终惑。
關(guān)于 TiDB Data Migration 的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://docs.pingcap.com/zh/tidb-data-migration/stable】绍在。如下圖:
3、Database Tools
TiDB 數(shù)據(jù)庫(kù)工具是用于處理 TiDB 導(dǎo)入導(dǎo)出數(shù)據(jù)的命令行實(shí)用程序的集合雹有。
1)全量數(shù)據(jù)導(dǎo)出工具:Dumpling 是一個(gè)用于從 MySQL/TiDB 進(jìn)行全量邏輯導(dǎo)出的工具偿渡,該工具可以把存儲(chǔ)在 TiDB/MySQL 中的數(shù)據(jù)導(dǎo)出為 SQL 或者 CSV 格式,可以用于完成邏輯上的全量備份或者導(dǎo)出霸奕。
關(guān)于 Dumpling 的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/dumpling-overview】溜宽。
2)全量數(shù)據(jù)導(dǎo)入工具:TiDB Lightning 是一個(gè)將全量數(shù)據(jù)高速導(dǎo)入到 TiDB 集群的工具,該工具有以下兩個(gè)主要的應(yīng)用場(chǎng)景:一是大量新數(shù)據(jù)的快速導(dǎo)入质帅;二是全量數(shù)據(jù)的備份恢復(fù)适揉。目前,Lightning 支持 Mydumper 或 CSV 輸出格式的數(shù)據(jù)源煤惩。
關(guān)于 TiDB Lightning 的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/tidb-lightning-overview】嫉嘀。
3)數(shù)據(jù)和備份工具:Backup & Restore(簡(jiǎn)稱 BR)是 TiDB 分布式備份恢復(fù)的命令行工具,用于對(duì) TiDB 集群進(jìn)行數(shù)據(jù)備份和恢復(fù)魄揉。
關(guān)于 BR 的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/backup-and-restore-tool】剪侮。
4)增量日志同步工具:TiDB Binlog 是一個(gè)用于收集 TiDB 的 binlog,并提供準(zhǔn)實(shí)時(shí)備份和同步功能的商業(yè)工具洛退。該工具有兩個(gè)主要的應(yīng)用場(chǎng)景:一是實(shí)時(shí)同步 TiDB 集群數(shù)據(jù)到其他數(shù)據(jù)庫(kù)瓣俯;二是實(shí)時(shí)備份 TiDB 集群數(shù)據(jù),同時(shí)可以用于 TiDB 集群故障時(shí)恢復(fù)兵怯。
關(guān)于 TiDB Binlog 的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/tidb-binlog-overview】降铸。
4、TiUP
從 TiDB 4.0 版本開始摇零,TiUP 作為新的工具,承擔(dān)著包管理器的角色桶蝎,管理著 TiDB 生態(tài)下眾多的組件驻仅,如 TiDB、PD登渣、TiKV 等噪服。用戶想要運(yùn)行 TiDB 生態(tài)中任何組件時(shí),只需要執(zhí)行 TiUP 一行命令即可胜茧,相比以前粘优,極大地降低了管理難度仇味。
關(guān)于 TiUP 的詳細(xì)內(nèi)容請(qǐng)參見官方在線文檔【https://docs.pingcap.com/zh/tidb/dev/tiup-overview】。
5.核心特性
1雹顺、水平彈性擴(kuò)展
分布式的 TiDB 可隨著數(shù)據(jù)增長(zhǎng)而無(wú)縫地水平擴(kuò)展丹墨,只需要通過增加更多的機(jī)器來滿足業(yè)務(wù)增長(zhǎng)需要,應(yīng)用層可以不用關(guān)心存儲(chǔ)的容量和吞吐嬉愧。 TiDB 根據(jù)存儲(chǔ)贩挣、網(wǎng)絡(luò)、距離等因素没酣,動(dòng)態(tài)進(jìn)行負(fù)載均衡調(diào)整王财,以保證更優(yōu)的讀寫性能。
2裕便、故障自動(dòng)恢復(fù)
TiDB 使用多副本進(jìn)行數(shù)據(jù)存儲(chǔ)绒净,并依賴業(yè)界最先進(jìn)的 Raft 多數(shù)派選舉算法確保數(shù)據(jù) 100% 強(qiáng)一致性和高可用。 副本可跨地域部署在不同的數(shù)據(jù)中心偿衰,主副本故障時(shí)自動(dòng)切換挂疆,無(wú)需人工介入,自動(dòng)保障業(yè)務(wù)的連續(xù)性哎垦,實(shí)現(xiàn)真正意義上的異地多活囱嫩。
3、實(shí)時(shí) HTAP(實(shí)時(shí)在線事務(wù)處理與在線分析處理)
提供行存儲(chǔ)引擎 TiKV漏设、列存儲(chǔ)引擎 TiFlash 兩款存儲(chǔ)引擎墨闲,TiFlash 通過 Raft 協(xié)議實(shí)時(shí)從 TiKV 復(fù)制數(shù)據(jù),確保行存儲(chǔ)引擎 TiKV 和列存儲(chǔ)引擎 TiFlash 之間的數(shù)據(jù)強(qiáng)一致郑口。TiKV鸳碧、TiFlash 可按需部署在不同的機(jī)器,解決 HTAP 資源隔離的問題犬性。
4瞻离、一致性分布事務(wù)
可以把 TiDB 想象成一個(gè)單機(jī)的 RDBMS,ACID 事務(wù)可以在多節(jié)點(diǎn)間進(jìn)行乒裆,無(wú)需擔(dān)心一致性問題套利。 TiDB 對(duì)業(yè)務(wù)沒有任何侵入性,是傳統(tǒng)的數(shù)據(jù)庫(kù)中間件鹤耍、數(shù)據(jù)庫(kù)分庫(kù)分表等優(yōu)雅的替換方案肉迫。
5、高度兼容 MySQL
TiDB 的通訊協(xié)議與 MySQL 高度兼容稿黄,可以像使用 MySQL 單點(diǎn)數(shù)據(jù)庫(kù)一樣使用 TiDB喊衫,用 TiDB 替換 MySQL 幾乎無(wú)需修改應(yīng)用系統(tǒng)的代碼。 MySQL 的客戶端管理工具及社區(qū)所有的周邊工具都可直接接入杆怕,極大降低學(xué)習(xí)和使用成本族购。TiDB 在大數(shù)據(jù)量下復(fù)雜查詢方面壳贪,相比 MySQL 有絕對(duì)的性能優(yōu)勢(shì)。
注意:TiDB 不支持 MySQL 的功能特性包括:
- 存儲(chǔ)過程與函數(shù)
- 觸發(fā)器
- 事件
- 自定義函數(shù)
- 外鍵約束
- 全文/空間函數(shù)與索引
- 非 ascii/latin1/binary/utf8/utf8mb4 的字符集
- SYS schema
- MySQL 追蹤優(yōu)化器
- XML 函數(shù)
- X Protocol
- Savepoints
- 列級(jí)權(quán)限
- XA 語(yǔ)法(TiDB 內(nèi)部使用兩階段提交寝杖,但并沒有通過 SQL 接口公開)
- CREATE TABLE tblName AS SELECT stmt 語(yǔ)法
- CREATE TEMPORARY TABLE 語(yǔ)法
- CHECK TABLE 語(yǔ)法
- CHECKSUM TABLE 語(yǔ)法
詳細(xì)的 MySQL 的兼容情況請(qǐng)參見官方在線文檔【https://pingcap.com/docs-cn/stable/mysql-compatibility】
6违施、完善的生態(tài)工具
TiDB 提供包括自動(dòng)化運(yùn)維、數(shù)據(jù)同步朝墩、數(shù)據(jù)導(dǎo)入導(dǎo)出和組件安裝包管理等多種工具醉拓,用戶能夠十分便利的進(jìn)行數(shù)據(jù)庫(kù)部署、管理收苏、監(jiān)控亿卤,數(shù)據(jù)同步、導(dǎo)入鹿霸、導(dǎo)出等維護(hù)工作排吴。
6.應(yīng)用場(chǎng)景
1、對(duì)數(shù)據(jù)一致性及高可靠懦鼠、系統(tǒng)高可用钻哩、可擴(kuò)展性、容災(zāi)要求較高的金融行業(yè)屬性的場(chǎng)景肛冶。
傳統(tǒng)的解決方案是同城兩個(gè)機(jī)房提供服務(wù)街氢、異地一個(gè)機(jī)房提供數(shù)據(jù)容災(zāi)能力但不提供服務(wù),此解決方案存在以下缺點(diǎn):資源利用率低睦袖、維護(hù)成本高珊肃、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) 無(wú)法真實(shí)達(dá)到企業(yè)所期望的值。TiDB 采用多副本 + Multi-Raft 協(xié)議的方式將數(shù)據(jù)調(diào)度到不同的機(jī)房馅笙、機(jī)架伦乔、機(jī)器,當(dāng)部分機(jī)器出現(xiàn)故障時(shí)系統(tǒng)可自動(dòng)進(jìn)行切換董习,確保系統(tǒng)的 RTO <= 30s 及 RPO = 0 烈和。
2、對(duì)存儲(chǔ)容量皿淋、可擴(kuò)展性招刹、并發(fā)要求較高的海量數(shù)據(jù)及高并發(fā)的 OLTP 場(chǎng)景。
傳統(tǒng)的單機(jī)數(shù)據(jù)庫(kù)無(wú)法滿足因數(shù)據(jù)爆炸性的增長(zhǎng)對(duì)數(shù)據(jù)庫(kù)的容量要求窝趣,可行方案是采用分庫(kù)分表的中間件產(chǎn)品或者 NewSQL 數(shù)據(jù)庫(kù)替代疯暑、采用高端的存儲(chǔ)設(shè)備等,其中性價(jià)比最大的是 NewSQL 數(shù)據(jù)庫(kù)高帖,例如:TiDB。TiDB 采用計(jì)算畦粮、存儲(chǔ)分離的架構(gòu)散址,可對(duì)計(jì)算乖阵、存儲(chǔ)分別進(jìn)行擴(kuò)容和縮容,計(jì)算最大支持 512 節(jié)點(diǎn)预麸,每個(gè)節(jié)點(diǎn)最大支持 1000 并發(fā)瞪浸,集群容量最大支持 PB 級(jí)別。
3吏祸、事實(shí)在線事務(wù)處理與在線分析處理場(chǎng)景对蒲。
傳統(tǒng)的解決方案是通過 OLTP 型數(shù)據(jù)庫(kù)處理在線聯(lián)機(jī)交易業(yè)務(wù),通過 ETL 工具將數(shù)據(jù)同步到 OLAP 型數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)分析贡翘,這種處理方案存在存儲(chǔ)成本高蹈矮、實(shí)時(shí)性差等多方面的問題。TiDB 在 4.0 版本中引入列存儲(chǔ)引擎 TiFlash 結(jié)合行存儲(chǔ)引擎 TiKV 構(gòu)建真正的 HTAP 數(shù)據(jù)庫(kù)鸣驱,在增加少量存儲(chǔ)成本的情況下泛鸟,可以同一個(gè)系統(tǒng)中做聯(lián)機(jī)交易處理、實(shí)時(shí)數(shù)據(jù)分析踊东,極大地節(jié)省企業(yè)的成本北滥。
4、數(shù)據(jù)匯聚闸翅、二次加工處理的場(chǎng)景再芋。
傳統(tǒng)常見的解決方案是采用 ETL + Hadoop 來完成,但 Hadoop 體系太復(fù)雜坚冀,運(yùn)維济赎、存儲(chǔ)成本太高無(wú)法滿足用戶的需求。與 Hadoop 相比遗菠,TiDB 就簡(jiǎn)單得多联喘,業(yè)務(wù)通過 ETL 工具或者 TiDB 的同步工具將數(shù)據(jù)同步到 TiDB,在 TiDB 中可通過 SQL 直接生成報(bào)表辙纬。