课程名称:课1.6 TiDB 中的读写流程、1.7 TiDB 典型应用场景及用户案例
学习时长:60min
课程收获:了解TiDB架构于读写流程,了解TiDB特性以及成功案例
课程内容:
1.6 TiDB 中的读写流程
1)TiDB架构
三大组件TiDB、TiKV、PD。
TiDB对外暴露MySQL协议的连接endpoint,负责接收客户端的连接,执行sql解析和优化,最终生成分布式执行计划,TiDB层是无状态的,可以启动多个TiDB实例,将客户端的连接分摊在多个TiDB上以达到负载均衡的效果,负载均衡需要依赖外部软件或者硬件负载均衡来实现,比如HAProxy、LVS或者F5,本身不存储数据,只是解析sql、将实际的数据请求转发给存储层。
TiKV是基于RocksDB引擎修改实现的分布式kv存储引擎,具有高度分层的特性,在底层的RocksDB实例存储KV数据,Ratf RocksDB实例存储Raft数据,实现Raft协议,保证数据的一致性,在Raft层上面又实现了MVCC特性,实现事务的多版并发控制,MVCC上面还有一层 Transaction层,实现事务相关内容,不依赖分布式文件系统实现的分布式强一致的存储引擎。
PD主要是分配分布式事务id,实现region和leader的调度,让数据和请求压力可以均衡的打散到所有TiKV节点上,PD通过ectd实现高可用,在4.0中还提供dashboard功能,方便用户检查管理集群状态。
2)TiDB读请求处理
sql的处理流程:先将sql转换成AST抽象语法树,通过AST生成逻辑执行计划,优化执行计划,优化完成后根据CBO选择实际执行计划,根据执行计划将对应的请求发送给TiKV节点。
读请求的处理流程:
a)客户端与TiDB建立连接并发送请求给TiDB
b)TiDB接受客户端发送的请求,获取客户端发送的sql语句
c)对sql文本进行解析并生成AST语法树进行优化
d)TiDB与PD进行交互,获取start_ts信息
e)TiDB根据执行计划和table元信息生成executor执行器
f)TiDB通过gRPC请求的方式将coprocessor请求发送给TiKV层
g)TiKV接受到请求并按照请求过滤数据并将数据返回给TiDB
h)TiDB接收到所有返回结果后整理汇总数据
i)TiDB将整理的结果返回给客户端
3)TiDB写请求处理
a)客户端与TiDB建立连接并发送请求给TiDB
b)TiDB接受客户端发送的请求,获取客户端发送的sql语句
c)对sql文本进行解析并生成AST语法树进行优化
d)TiDB与PD进行交互,获取start_ts信息
e)TiDB根据执行计划和table元信息生成executor执行器
f)TiDB发起commit请求
g)TiKV参照percolator使用两阶段提交(prewrite/commit)来提交数据,TiDB在提交阶段会向PD请求获取commit_ts
h)TiKV将提交的结果返回给TiDB
i)TiDB将结果返回给客户端
对比:读请求向PD请求一次TSO即可,写请求需要向PD请求2次TSO,一次start_ts,一次commit_ts,还有的区别是写请求涉及二阶段提交和分布式事务的相关内容。
1.7 TiDB 典型应用场景及用户案例
1)TiDB特性
可扩展性、高可用性、分布式事务、实时HTAP架构
2)TiDB适用场景
a)基于可扩展性、分布式事务的能力,适用海量数据、高并发场景,基于MySQL协议开发的业务代码以及未来对数据库有扩展需求的业务也非常适合TiDB
b)基于TiDB的高可用及故障自恢复能力,一些比较重要、对可用性要求比较严格的业务,以及有多活需求的业务
c)基于HTAP架构的设计,有实时分析需求的业务,基于指定列的分析业务
3)TiDB成功案例
a)知乎,目前已知规模最大的生产集群,超过250多个数据节点以及20多个计算节点,2w亿的记录数,每个月有100e的数据增长,同时业务对数据延迟的要求在几十到数百毫秒,体现了TiDB在海量数据下超强的处理能力。
b)北京银行,银行领域对数据的可用性及性能的要求比较高,首先是两地三中心同城双活架构,支持着网联支付交易的交易场景,生产环境稳定运行2年多,经历过在线扩容、缩容以及在线升级,业务完全不受影响,同时也经历过数次生产环境硬件故障,运维操作失误等情况,TiDB的高可用性通过了在银行的交易业务生产环境上长时间稳定运行的考验
c)paypay,日本排名第一的支付公司,使用TiDB替换了Aurora数据库,因为在Aurora上,当数据和业务量到达一定量之后会出现一些性能瓶颈,目前集群已经有接近100TB的数据量。
d)中通快递,将TiDB使用于网点查询业务系统上,用来追踪各网点寄件的流转,通过TiSpark实现报表查询类需求,在双十一来临前一周扩容一倍集群,双十一之后再将集群缩容,无论是在业务开发、改造、适配成本还是硬件成本的控制上,都有非常好的体验
学习过程中遇到的问题或延伸思考:
- 问题 1:oracle的高可用架构
- 问题 2:tidb的二阶段提交