TiDB 整体架构
- TiDB(SQL 处理)
- 相当于 SQL 层,无状态,可启动多个实例,可利用其他外部软/硬件实现负载均衡
- 并不存储数据,只解析 SQL,将请求,转发转给 TiKV 层
- 对外暴露数据库连接
- 负责接收数据库的连接
- 执行SQL解析和优化
- 生成SQL计划
- TiKV(存储)
- 不依赖分布式文件系统实现的分布式存储引擎,高度分层,实现 Raft 协议,多版本并发控制
- PD(调度)
- 分配分布式事务 ID
- 实现调度
- 高可用
- 管理状态
- TiFlash (列式存储引擎)
SQL 处理流程
SQL 转化为 AST
AST 生成 逻辑执行计划
对生成的逻辑执行计划进行优化
优化完成,根据CDO 选择实际执行计划
根据计划将请求发送给 TiKV
读请求在 TiDB 中执行的过程
请求一次 TSO
1.客户端与 TiDB 建立链接,并发送请求给 TiDB
2.TiDB 接受客户端发送的请求,获取客户端发送的 SQL 语句
3.TiDB 执行 Pases 和 compiles 阶段,对 SQL 文本进行解析,生成 AST 语法树,进行优化
4.TiDB 与 PD 进行交互,获取 start_ts
5.TiDB 根据执行计划以及 table 源信息生成 executor 执行器
6.TiDB 通过加 gRPC 请求的方式将 coprocessor 请求发送给 TiKV 层
7.TiKV 接受请求,按照请求过滤数据,并将请求返回给 TiDB
8.TiDB 接受所有结果后,整理、汇总数据
9.TiDB 将整理的数据返回给客户端
写请求在 TiDB 中的执行过程
请求两次TSO,一次start_ts,一次commit_ts,涉及二阶段提交以及分布式事务
1.客户端与 TiDB 建立链接,并发送请求给 TiDB
2.TiDB 接受客户端发送的请求,获取客户端发送的 SQL 语句
3.TiDB 执行 Pases 和 compiles 阶段,对 SQL 文本进行解析,生成 AST 语法树,进行优化
4.TiDB 与 PD 进行交互,获取 start_ts
5.TiDB 根据执行计划以及 table 源信息生成 executor 执行器
6.TiDB 发起 commit 请求
7.参照 percolator 论文发起二阶段提交,prewrite/commit 阶段TiDB 会在二阶段提交的commite 阶段向commit 请求获取commit-ts
8.TiKV 将结果返回给 TiDB
9.TiDB 将结果返回给客户端