# TiDB 体系架构

__*TiDB 特点*__

+ 水平扩容或者缩容
+ 金融级高可用
+ 实时 **HTAP**
+ 云原生的分布式数据库
+ 兼容 **MySQL 5.7** 协议

![right](./student-guide/diagram/TiDBClusterArchitectureNormal_aa_001_20220506.png)
-------------------------------------------------------------
分布式关系型数据库 TiDB,是一款同时支持在线事务处理与在线分析处理 '(Hybrid Transactional and Analytical Processing, HTAP)' 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 'MySQL 5.7' 协议和 MySQL 生态等重要特性。

TiDB 数据库的三大关键组件分别是 PD 集群、TiDB Server 和 TiKV。

其中,PD 集群是整个 'TiDB' 数据库的控制中枢,它负责产生全局 TSO 时间戳,调度 region' 在 TiKV 节点中的分布、收集 TiKV 节点的健康和分布状况,另外,它还为分布式事务分配事务 ID。PD 本身也是由至少 3 个节点构成,拥有高可用的能力,建议部署奇数个 PD 节点。

TiDB Server 集群上是不存储落地数据的,但是接收到客户端传来的 SQL,对 SQL 语句进行解析和编译,最终产生执行计划就完全由它来负责了。最后,TiDB Server 负责执行这些执行计划,到 TiKV 或者 TiFlash 存储引擎中去存取数据,并且将结果集进行整理,返回给客户端。最后,关于 DDL 操作和老版本数据的回收（GC）也是 TiDB Server 来完成的。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件（如 LVS、HAProxy 或 F5）对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。

数据主要以 'key-value' 形式存储在 TiKV 集群中,TiKV 集群主要负责数据的持久化,MVCC（多版本并发控制）、'Coprocessor'（将算子下推到 TiKV 节点）、事务和其自身副本的高可用和强一致性功能（采用 'multi raft' 机制实现）,我将在 TiKV 课程中进行详细的介绍。

这里,我们还有一个组件,那就是列式存储引擎 TiFlash,它主要通过扩展的 raft 共识算法完成了与 TiKV 的数据同步,实现了负载均衡、强一致读取,TiFlash 支持实时更新。这样对于 OLTP 场景实现了分析查询业务隔离,对于 OLAP 场景较大幅度提升查询效率。

下面,我们分别介绍 TiDB、TiKV、TiFlash 和 PD 的主要功能、实现原理和特点。