# TiDB Server 架构

__*TiDB server 架构*__

![`smart`](./student-guide/diagram/TiDBServerArchitecture_aa_002_20220509.png)
-------------------------------------------------------------
之前的课程中,我们了解了 TiDB server 为 SQL 层,对外暴露 MySQL 协议的连接 `endpoint`,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB server 本身是无状态的,可以启动多个 TiDB server 实例,通过负载均衡组件（如 `LVS`、`HAProxy` 或 `F5`）对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB server 实例上以达到负载均衡的效果。TiDB server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV（或 TiFlash）。

本课程中,我们将从 TiDB server 的内部线程池和缓存入手,介绍 TiDB server 的重点功能和层次结构,我们先来认识一下 TiDB server 的核心线程池和缓存。

首先,我们先按照功能了解一下各个线程池模块,详细的内容我们会在后面进行介绍:
1. 模块 `Protocol Layer,Parse,Compile,Execute` 主要负责SQL语句的解析和编译（优化）,经过这几个模块处理会生成 SQL 语句的执行计划。
2. 模块 `Executor` 和 `DistSQL` 主要负责分批执行 SQL 的执行计划。
3. 模块 `Transaction` 和 `KV` 负责事务相关的写入。
4. 模块 `PD Client` 和 `TiKV Client` 负责与 PD 和 TiKV 进行交互,TiDB server 所有的交互都是通过它们完成的。
5. 模块 `schema load, worker` 和 `start job` 协作完成 `online DDL` 的执行。

其次,在 TiDB server 中有一个缓存区域,用于缓存读出的结果集,元数据和登录认证信息等,我们称为 `memBuffer`。在 TiDB 数据库 6.0 的版本中引入了热点小表缓存,提高访问性能,提升吞吐,降低访问延迟

最后,关于上面提到的线程池模块和缓存的作用,我们将在本课讲解,至于他们之间的协作,会在 SQL 语句的执行课程中介绍。