# TiDB Server 架构

![center](./student-guide/diagram/02-TiDB-Architecture-01-01.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 的核心线程池和缓存。

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


其次，在 TiDB Server 中有一个缓存区域，用于缓存读出的结果集，元数据和登录认证信息等，我们称为 memBuffer。
最后，关于上面提到的线程池模块和缓存的作用，我们将在本课讲解，至于他们之间的协作，会在 SQL 语句的执行课程中介绍。