1.我们到底需要一个什么样的数据库
1.1 需要的数据库特性
- 扩展性
- 强一致性、高可用性
- 支持SQL,ACID事务。
- 云原生
- HTAP
- 兼容主流生态和协议
1.1.1 扩展性
Scale out也就是我们经常听到的弹性横向扩展。一是从弹性的角度看,颗粒度越小越好,常见的颗粒度有Cluster、Database、Schema、表、分表或者分区。二是数据库写入是昂贵资源,我们一定要面向写入能力的线性扩展机制。
1.1.2 强一致性、高可用性
CAP的强一致指的是理论的一致性,也就是副本一致性,也就是每一份新增数据都会在多个物理节点保存,节点数量和网络延迟是正向关系,理论上保存的节点越多,写入延迟就越高,所以在分布式系统里,普遍采用了多数派强一致。
这个强一致属性对于我们比较核心的业务,比如金融类场景,能做到更好的数据容灾。
强一致与高可用这两个概念,等价过来,就是实现RPO=0,RTO足够小,
数据库事务的特性(ACID):
1.2.数据技术栈常见的基础因素
1.3.计算与存储分离
1.4 Tidb高度分层架构
TiDB是一个计算与存储分离的架构,它的存储引擎叫TiKV。
TiDB在2015立项,弹性是整个架构设计的核心考量点,所以选择了更为未来的计算与存储分离的架构,从逻辑上看,主要分为三层:
1.4.1. 支持标准SQL的计算引擎TiDB-Server
这里面有一个概念,大家可能会混淆。TiDB是整个数据库的名称,同时有一个兼容MySQL的计算引擎 TiDB-Server(https://github.com/pingcap/tidb),
兼容以MySQL 5.7为主,在逐步兼容MySQL 8.
TiDB Server 支持 MySQL 的协议,语法,方言语法,DDL/DML,系统变量,内置功能,SQL Mode 以及类型推导等等。
1.4.2. 分布式存储引擎 TiKV
TiDB Server 本身并不存储数据,只是进行计算,实际的数据存储在存储层,也就是 TiKV(https://github.com/pingcap/tikv),目前这个项目已经捐献给 CNCF,属于 CNCF 的毕业项目。
1.4.3. 负责元信息管理与调度的,调度引擎 Placement Driver
Placement Driver (pd-server,简称 PD,https://github.com/pingcap/pd),PD 主要有几个功能:
PD是整个集群的大脑,为了保持全局高可用,PD也至少三个节点,通过Raft进行三副本复制。
1.4.4 架构图
1.5 小结
2.如何构建一个分布式存储系统
2.1 需要什么样的存储引擎
2.2 数据库核心:数据结构
2.3 选择数据副本
2.4 如何扩展
扩展是基于分片实现的。分片分为预先分片(静态)和自动分片(动态)。
常见的分片算法有哈希hash、范围range、列表list
注意:一个Region默认是96MB
2.5 TiKV整体架构
2.6 多版本控制MVCC
2.7 分布式事务模型
2.8 小结
3 如何构建一个分布式 SQL 引擎
tidb-server的功能:
3.1 sql引擎过程
3.2 关键算子分布式化
3.3 如何构建一个online的DDL算法
3.4 如何连接到Tidb-server
3.5 小结
4 基于分布式架构的 HTAP 数据库
2005年,Gartner提出了HTAP(Hybrid transactional/analytical processing,在线事务处理/在线分析处理数据库)这一概念,并在2014 年,Gartner 对 HTAP 数据库给出了明确的定义,HTAP 数据库需要同时支持 OLTP 和OLAP 场景。
4.1 HTAP发展的必然性
4.2 Tidb被用于数据中台
Tidb可以看作大号的Mysql.
4.3 物理隔离是最好的资源隔离
4.4 行列数据同步,Raft-base最佳方案
5 Tidb关键技术创新
5.1 三个分布式系统
5.2 自动分片技术是更细维度弹性的基础
5.3 弹性的分片构成了动态的系统
5.4 Multi-Raft将复制组更离散
5.5 基于Multi-Raft实现写入的线性扩展
5.6 去中心化的分布式事务
6.TiDB 典型应用场景及用户案例
6.1 OLTP Scale
(1)为什么分表
(2)为什么分库
中间件方案:
6.2 数据架构选型