TiDB 整体架构介绍

TiDB 分布式架构设计概览

TiDB 是一款原生分布式的 NewSQL 数据库,相比单机数据库具有以下优势:
分布式扩展: TiDB 支持计算层(TiDB Server)和存储层(TiKV/TiFlash)的分离部署,可通过增加节点线性 扩容,灵活应对业务增长
SQL 兼容: 对外提供 MySQL 协议接口,兼容大部分 MySQL 语法,使用户可以无缝替换 MySQL
高可用性: TiDB 默认采用多副本设计,即使少数节点失效也能自动恢复故障、修复数据,对业务无感知
强一致事务: TiDB 原生支持分布式事务,提供 ACID 属性和 Snapshot Isolation (SI) 隔离级别,适用于银行转账等对一致性要求高的场景
丰富生态: TiDB 具有完善的工具链,包括数据迁移、同步、备份等工具,满足多种使用场景
在核心架构上,TiDB 将系统拆分为多个模块,各模块间通过网络通信协作。TiDB Server 作为计算节点,PD (Placement Driver) 负责集群元信息和调度,TiKV/TiFlash 提供分布式存储,另外还有数据同步和日志组件如 TiCDC 、 TiDB Binlog 等,总体架构如下图所示:
image

核心组件及其功能

TiDB Server: TiDB 的 SQL 计算层,接受客户端的 MySQL 协议连接并执行 SQL 解析、优化。TiDB Server 本身无状态,可水平扩展;通常部署多个实例并通过负载均衡(如 TiProxy、HAProxy 等)对外提供统一入口 。TiDB Server 不存储数据,只负责将 SQL 读写请求转发到底层存储节点(TiKV 或 TiFlash)
PD (Placement Driver): 集群的元信息管理与调度模块。PD 存储集群拓扑和数据分布等元数据,并为所有事务分配全局唯一的时间戳(TSO)。PD 会根据 TiKV 节点上报的状态信息下发数据调度命令 (如 Region 切分、迁移等),保证数据均衡与集群健康 。PD 本身通常以奇数个节点(如 3 个)部 署以保证 Raft 选举高可用
TiKV: 分布式事务型键值存储引擎,为 TiDB 提供持久化数据存储和分布式事务处理。TiKV 将数据按 Key 范围切分为多个 Region(默认大小约 96MiB),每个 Region 在 TiKV 集群中有多个副本(默认3副本)以保证容错和高可用 。TiKV 在 KV 层提供原生的分布式事务支持(默认快照隔离 SI),TiDB 的 SQL 执行层会将 SQL 操作转换为对 TiKV 的事务性 KV 调用
TiFlash: TiKV 数据的列式副本引擎,用于加速分析型查询。TiFlash 与 TiKV 协同工作,自动异步地从 TiKV 同步数据并以列式格式存储 。当执行 OLAP 查询时,TiDB 可以选择访问 TiFlash 的副本来利用 列存优势,从而显著提升查询性能 。TiFlash 通常也以多副本部署,与 TiKV 保持数据最终一致
TiCDC: TiDB 的增量数据复制工具 ,TiCDC 持续监听 TiKV 上的变更日志,将行级数据变更实时推送到下游(如另一集群、MySQL、Kafka 或对象存储等) 。TiCDC 集群 使用 PD 的 etcd 存储元信息,具有高可用性;多个 TiCDC 实例可以并行拉取不同表的变更并通过 Changefeed 机制向多个下游目标分发数据 。TiCDC 常用于跨集群容灾、双向复制以及实时 ETL 等场景

各个组件协作关系

客户端 → TiDB Server: 客户端通过 MySQL 协议和连接池(或代理)访问 TiDB Server 集群。负载均衡组件(如 TiProxy、HAProxy 等)将请求分发到后端的多个 TiDB 实例
TiDB Server ↔ PD: 在执行分布式事务前,TiDB Server 从 PD 获取全局时间戳(TSO)并查询 Region 元数据;PD 则定期收集 TiKV 上报的数据分布信息,为 TiDB Server 提供数据位置、负载等元信息 。PD 还负责数据调度,当某些 Region 过热或节点故障时会下发 Region 拆分、迁移等指令
TiDB Server ↔ TiKV/TiFlash: TiDB Server 根据优化后的执行计划,通过分布式执行框架将读写请求发往 TiKV 或 TiFlash。对于 OLTP 场景,TiDB Server 调用 TiKV 的事务性 KV 接口进行读写;对于需要加速的分析型查询,可选择访问 TiFlash 节点 。TiDB Server 通过下推计算尽量减少数据移动,只将必要的结果集返回给客户端
PD ↔ TiKV: PD 保留集群拓扑信息(节点、Region 分布、Replica 状态等) 。TiKV 节点会周期性向 PD 上报状态;当 PD 检测到某些 Region 的负载不均或副本缺失时,会下发自动调度命令(如迁移 Raft Leader、扩增/缩减副本等),以保证数据均衡和高可用性 。TiKV 内部通过 Raft 协议在副本间复制数据,实现强一致和容错
TiCDC ↔ TiKV/PD: TiCDC 实例订阅并拉取 TiKV 集群的 Raft 日志(Change Logs)以获取数据变更 。TiKV 会将事务变更转换为行级变更日志供 TiCDC 读取;如果 TiCDC 发现日志不连续,会主动请求缺失部分。TiCDC 将接收的日志进行排序、合并,再通过 Changefeed 分发到下游。PD 的 etcd 用于 存储 TiCDC 的任务元数据(如 Changefeed 配置、状态等),保证 TiCDC 集群的高可用与一致性

posted @ 2026-01-15 16:19  学弟Craze  阅读(1)  评论(0)    收藏  举报