第1章 TiDB 整体架构

    • 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
    • 支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL
    • 支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账
    • 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景

    本书会专注于 TiDB 4.0 的实操与最佳实践,详细介绍 TiDB 的使用和一些相关的原理。

    TiDB 分布式数据库最初的设计受到 Google 内部开发的知名分布式数据库 Spanner 和 F1 的启发,在内核设计上将整体的架构拆分成多个大的模块,大的模块之间互相通信,组成完整的 TiDB 系统。大的架构如下:

    这三个大模块相互通信,每个模块都是分布式的架构,在 TiDB 中,对应的这几个模块叫做:

    1. TiKV (tikv-server, ) : 分布式 KV 存储,类似 NoSQL 数据库,作为 TiDB 的默认分布式存储引擎,支持完全弹性的扩容和缩容,数据分布在多个 TiKV 存储节点中,系统会动态且自动地进行均衡,绝大多数情况下不需要人工介入。与普通的 NoSQL 系统不一样的是,TiKV 的 API 能够在 KV 键值对层面提供对分布式事务的原生支持,默认提供了 SI (Snapshot Isolation)的隔离级别,这也是 TiDB 在 SQL 层面支持分布式事务的核心,上面提到的 TiDB SQL 层做完 SQL 解析后,会将 SQL 的执行计划转换为实际对 TiKV API 的调用。所以实际上数据都是存储在 TiKV 中。另外,TiKV 中的数据都会自动维护多副本(默认为 3),天然支持高可用和自动故障转移。TiFlash 是一类特殊的存储节点,和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。后面的章节会详细介绍。

    2. Placement Driver (pd-server,简称 PD,https://github.com/pingcap/pd): 整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅仅是单纯的元信息存储,同时 PD 会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的「大脑」,另外 PD 本身也是由至少 3 个对等节点构成,拥有高可用的能力。