TDSQL升级版架构和关键技术介绍
如果无法正常显示,请先停止浏览器的去广告插件。
1. TDSQL升级版引擎架构
和关键技术介绍
韩硕 /
shuohan
腾讯云数据库高级工程师
2. TDSQL升级版引擎架构
• 计算模块 SQLEngine
• 存储模块 TDStore
• 管控模块 TDMetaCluster
关键技术介绍
• 分布式事务
• 无感知扩缩容
• 数据存储与迁移
3. 为什么要做升级版引擎
业务系统
•
TDSQL是腾讯自研的高性能、高可用
的企业级分布式数据库解决方案,
国内TOP20的银行近半在使用TDSQL
业务系统
业务系统
MySQL协议
计算层
•
业务敏态发展对底层基础技术提出
了具备敏态能力的要求:
• 兼容性:建表需要指定shardkey
• 运维:存储层扩容,需要DBA发起,部
分事务会中断
• 模式变更:online DDL 依赖pt等工具
proxy
proxy
proxy
控制
MySQL协议
管控模块
控制
分布式存储层(hash)
MySQL
[0-8]
MySQL
[8-16]
MySQL
[16-24]
4. TDSQL升级版引擎架构
l 目标:业务像使用单机数据库一样使用分布式数据库
l 功能特性:MySQL完全兼容 + 全局一致性 + 无感知扩缩容+ 在线表模式变更
MySQL
Client
业务系统
MySQL协议
Region1
[ 00
B0
MySQL协议
计算层
SQLEngine
SQLEngine
Region2
Region3
30
Region4
70
FF]
Router Info
SQLEngine
Timestamp
分布式事务RPC
TDMetaCluster
Control
元数据管理层
Timestamp
分布式存储层(range)
Region1 Region1 Region1 Region4 Region2 Region2 Region4 Region2 Leader
Region3 Region4 Region3 Region3 Follower
TDStore TDStore TDStore TDStore
5. TDSQL升级版引擎技术亮点
MySQL兼容、分布式、低成本
l MySQL兼容:兼容原生 MySQL 语法,业务层无入侵;
l 分布式:数据以 Key Range 打散和路由,业务层无须手动分库分表;
l
低成本:存储层采用 LSM-tree 结构,具有更好压缩比,适合大规模
数据量业务;
全局读一致性
高可扩展:计算/存储资源弹性扩缩容
l
l
计算层:多主模式,每个 SQLEngine 均可读写;无状态化设计,可
根据业务流量随时灵活添加或移除任意数量的计算节点;
存储层:可根据业务数据存储量需求,添加或移除 TDStore 节点,
通过数据自动迁移,实现容量弹性伸缩,业务层无感知;
Online DDL
l TDMetaCluster 统一分配全局唯一递增事务时间戳 l 支持在线加减列操作
l TDStore 层基于数据多版本和事务时间戳判定数据可见性 l 支持在线加减索引
l 支持大部分 DDL 操作以 Online 方式执行
6. 计算模块 SQLEngine
l 内核:完全兼容MySQL8.0;
l 架构:计算层为多主架构,每个 SQLEngine 节点均可读写,SQLEngine 之间通过一定方式刷新表结构变更等信息;
l 改造:无状态化设计,移除各种有状态化的数据信息(如锁、本地表结构,binlog 等);多线程框架替换为协程框架;
l 交互:SQLEngine 从 MC 获取全局事务时间戳和路由信息,然后与 TDStore 进行事务的交互,向客户端返回结果;
Application Layer / MySQL Client
select ***
alter ***
insert ***
Txn Timestamp
SQLEngine_1
SQLEngine_2
TDMC
Leader
SQLEngine_N
Key-Value Router Info
Raft
Update DD Info
TDStore_1 TDStore_2 TDStore_3 TDStore_N
Region_1 Region_5 Region_5 Region_1
Region_2 Region_2 Region_4 Region_5
Region_4 Region_4 Region_1 Region_2
TDMC
Follower
TDMC
Follower
7. 存储模块 TDStore
l
l
l
架构:基于 LSM-Tree 和 Multi-Raft 的分布式 KV 存储引擎;
数据:Region 是基于Raft同步的多副本的存储管理单元,数据根据Key范围分布在不同 Region上;Region TDMC 调度下可发生分裂、合并、迁移、切
主等操作;
交互:TDStore 接收来自 SQLEngine 的事务请求,充当分布式事务的协调者角色,处理后返回结果;每个 Region 的主副本负责接收和处理读写请求;
SQLEngine_1
SQLEngine_2
SQLEngine_N
R/W Transactions
TDStore_1
Region_1
Region_2
Region_4
TDStore_2
Region_5
Region_2
Region_4
TDStore_3
Region_5
Region_4
Region_1
The Coordinator of Distributed Transactions
TDStore_N
Region_1
Txn Timestamp
Region Scheduling
Region_5
Region_2
TDMC
Leader
G
al
b
o
l
S
sh
p
a
n
Raft
ot
TDMC
Follower
TDMC
Follower
8. 管控模块 TDMetaCluster
l 架构:基于 Raft 的一主两备的元数据管理集群,由 Leader 提供服务;
l 数据:1)分配全局唯一且递增的事务ID;2)管理 TDStore 和 SQLEngine 元数据;3)管理 Region 数据路由信息; 4)全局 MDL 锁管理;
l 管控:1)调度 Region 的分裂、合并、迁移、切主 ;2)存储层的扩缩容调度; 3)存储层的负载均衡调度; 4)各维度的异常事件告警;
SQLEngine_1
SQLEngine_2
SQLEngine_N
Txn Timestamp; KV Router
TDMC
Leader
DDL Lock; SQLEngine Meta
TDStore_1
Region_1
TDStore_2
Region_5
TDStore_N
Region_1
Region_2 Region_2 Region_5
Region_4 Region_4 Region_2
Raft
Txn Timestamp; Region Scheduling
Load Rebalance; TDStore Meta
TDMC
Follower
TDMC
Follower
9. TDSQL升级版引擎架构
• 计算模块 SQLEngine
• 存储模块 TDStore
• 管控模块 TDMetaCluster
关键技术介绍
• 分布式事务
• 无感知扩缩容
• 数据存储与迁移
10. TDSQL升级版 – 分布式事务
Mysql Client
业务系统
•
协调者下沉,且不记录日志,降低
延迟
Transaction
Commit
Transaction
Commit
SQLEngine
•
1
故障恢复的时采用参与者协商的方
法,协调者需要收集一次所有参与
者状态
L
2
3
L
2
sync
4
F
F
3
sync
F
F
4
Region1 Region2
Coordinator + Participant Participant
1 Log Prepare
2 Prepare
3 Log Commit
4 Commit
11. TDSQL升级版– 分布式事务
SQLEngine: 根据数据路由发起事务
•
•
•
•
Step 0: TDMC周期性向所有TDStore下发全局最小快照点,确保读操作的全
局一致性;
TDMC: 提供事务时间戳
TDStore: 事务两阶段提交协调/参与者
Step 1: SQLEngine接收到SQL语句,开启事务,从TDMC 取回事务开启时间
戳 begin_ts;在自身缓存中查询SQL语句对应的 Region 路由信息;若无,
则将对应的 key 范围查询请求发送给TDMC,由TDMC告知最新的路由信息;
Step 2: SQLEngine将请求发送到对应的Region的Leader副本所在的
TDStore 上;
Step 3: Leader 副本作为协调者开启两阶段事务,从TMDC 取回
prepare_ts;
MySQL Client
sql request
TDMC
Leader
•
•
Step 4: 所有参与者Prepare就绪后,从TDMC取回commit_ts,提交事务;若
过程中,参与事务的其他 Region 发生切主, 则从TDMC 查询最新 Leader
信息;
Step 5: 提交事务,成功后,将结果返回至 SQLEngine,继而将结果返回到
客户端;
1
SQLEngine
2
0
TDStore_1
sql response
3
5
TDStore_2
Region_1 Region_5
Region_2 Region_2
Region_4
4
Region_4
0
12. TDSQL升级版– 无感知扩缩容
l TDStore中的数据分段管理在Region中,数据调度是通过Region调度来做到的
l Region的调度:分裂、迁移、切主
TDStore1
TDStore1
TDStore1
Region1 Region1 Region1
Region2 Region2 Region2
Region3
Region3
Region3
Leader
Follower
13. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
•
2PC流程,MC作为协调者,region的所有副本作为参与者,保证全员步调一致,避免部分成功部分失败造成的不一致
TDStore1
TDStore1
TDStore1
Region1 Region1 Region1
Region2 Region2 Region2
Region3
Region3
Region3
Leader
Follower
14. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
•
分裂点的选取:容量估算函数
TDStore1
TDStore2
TDStore3
Region1 Region1 Region1
Region2 Region2 Region2
Region3 Region3 Region3
Region4 Region4 Region4
[start_key, split_key)
[split_key, end_key)
Leader
Follower
15. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
•
与Raft相结合,增减副本的方式来做到迁移
TDStore1
TDStore2
TDStore3
Region1 Region1 Region1
Region2 Region2 Region2
Region3 Region3 Region3
Region4 Region4 Region4
TDStore4
1
在New Node上增加副本
Region2
Leader
Follower
16. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
•
与Raft相结合,增减副本的方式来做到迁移
TDStore1
TDStore2
TDStore3
Region1 Region1 Region1
Region2 Region2 Region2
Region3 Region3 Region3
Region4 Region4 Region4
TDStore4
2
移除掉旧副本
Region2
Leader
Follower
17. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
• 需要拷贝传输Region的持久化kv数据 —— 性能瓶颈点
• 对事务透明,不阻塞事务
TDStore1
Region1
TDStore2
TDStore3
Region1 Region1
Region2 Region2
Region3 Region3 Region3
Region4 Region4 Region4
TDStore4
Region2
Leader
Follower
18. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
• 需要拷贝传输Region的持久化kv数据 —— 性能瓶颈点
• 对事务透明,不阻塞事务
TDStore1
Region1
TDStore2
TDStore3
TDStore4
Region1 Region1 Region2
Region2 Region2 Region3
Region3 Region3 Region3 Region4
Region4 Region4 Region4
Leader
Follower
19. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
•
均衡Region Leader分布,调整热点,均衡负载
TDStore1
TDStore2
TDStore3
TDStore4
Region1 Region1 Region1 Region2
Region3 Region2 Region2 Region3
Region4
Region4
Region3
Region4
Leader
Follower
20. TDSQL升级版– 无感知扩缩容
l
Region的调度:分裂、迁移、切主
•
主动切主不杀事务:已进入2PC阶段的事务,由新主继续推进;未进入2PC的事务,切主前需要将事务数据传输到新主上
TDStore1
TDStore2
TDStore3
TDStore4
Region1 Region1 Region1 Region2
Region3 Region2 Region2 Region3
Region4
Region4
Region3
Region4
Leader
Follower
21. TDSQL升级版– 无感知扩缩容
l
Region调度与事务并发:
• 热点调度和自动伸缩的前提:业务层不能感知到服务中断
• 迁移是通过Raft增减副本的方式进行的,与提供服务的Leader无直接关系
• 分裂和切主都是在Leader节点上发起执行的,与事务不可避免的存在并发
• 事务的生命周期要跨越分裂和切主
SQLEngine
事务T:
Put A = 1;
Put H = 5;
Get H;
Commit;
参与者列表:
Region 1;
事务T:
Put A = 1;
Put H = 5;
Get H;
Commit;
SQLEngine
参与者列表:
Region 1;
Region 1;
Region1发生分裂
Region1
[A
Z)
A
H
10
2
T的私有数据:
A = 1;
H = 5;
分裂点是G
T的私有数据:
A = 1;
H = 5;
Region2
Region1
[A
G)
T的私有数据:
[G
Z)
A
10
H
2
22. TDSQL升级版– 无感知扩缩容
l
Region调度与事务并发:
• 热点调度和自动伸缩的前提:业务层不能感知到服务中断
• 迁移是通过Raft增减副本的方式进行的,与提供服务的Leader无直接关系
• 分裂和切主都是在Leader节点上发起执行的,与事务不可避免的存在并发
• 事务的生命周期要跨越分裂和切主
SQLEngine
事务T:
Put A = 1;
Put H = 5;
Get H;
Commit;
参与者列表:
Region 1;
事务T:
Put A = 1;
Put H = 5;
Get H;
Commit;
SQLEngine
参与者列表:
Region 1;
Region 1;
Region1发生分裂
Region1
[A
Z)
A
H
10
2
T的私有数据:
A = 1;
H = 5;
分裂点是G
T的私有数据:
A = 1;
H = 5;
Region2
Region1
[A
G)
[G
Z)
A
10
H
T的私有数据:
H = 5;
2
Region上活跃子事务的私有数据,在分裂时需要搬迁
23. TDSQL升级版– 无感知扩缩容
l
Region调度与事务并发:
• 热点调度和自动伸缩的前提:业务层不能感知到服务中断
• 迁移是通过Raft增减副本的方式进行的,与提供服务的Leader无直接关系
• 分裂和切主都是在Leader节点上发起执行的,与事务不可避免的存在并发
• 事务的生命周期要跨越分裂和切主
SQLEngine
事务T:
Put A = 1;
Put H = 5;
Commit;
事务T:
Put A = 1;
Put H = 5;
Commit;
参与者列表:
Region 1;
SQLEngine
参与者列表:
Region 1;
Region 1;
Region1发生分裂
分裂点是G
Region1
[A
Z)
T的私有数据:
A = 1;
H = 5;
T的私有数据:
A = 1;
Region2
Region1
[A
G)
[G
Z)
T在Region上的子事务还需要有
额外的分裂信息:
new_region_list: Region 2
T的私有数据:
H = 5;
24. TDStore – 数据存储与迁移
raft log entries:
……
log
apply/replay
事务abort
……
事务commit
写满
write batch
imm memtable
memtable
imm memtable
……
write batch
内存:
flush memtable
磁盘:
raft log file
save snapshot
L0:
purge log
SST
SST
compaction
snapshot meta
L1: SST SST SST
L2: SST SST SST
snapshot data
region
region
raft_log_db
data_db
SST
25. TDStore – 数据存储与迁移
raft log entries:
……
log
apply/replay
……
事务abort
事务commit
写满
write batch
imm memtable
memtable
imm memtable
……
write batch
内存:
flush memtable
磁盘:
term : index
1:1
1:2
k1-v3
k2-v1
2 purge log
SST_0_0
1:3
k2-v2
2:4
3:5
k1-v2
k3-v4
3:6
k2-v7
L0:
3:7
put: k1-v5-s8
del: k3-
k1-v5
SST_0_1
-s5
…
put: k1-v3-s1
put: k2-v7-s4
1 save snapshot
put: k3-v4-s2
合并、清理过期数据
snapshot meta:
last_included_index = 5
last_included_term = 3
snapshot data:
k2-v2, k1-v2, k3-v4
put: k1-v2-s4
k2-v7
k1-v5
L1:
put: k1-v5-s8
put: k1-v2-s4
raft_log_db
data_db
put: k2-v7-s4
…
…
全局最小seqno = s5
compaction
26. TDStore – 数据存储与迁移
raft log entries:
……
log
apply/replay
……
事务abort
事务commit
写满
write batch
imm memtable
memtable
imm memtable
……
write batch
内存:
flush memtable
flush memtale触发
save snapshot
磁盘:
L0:
raft log file
raft log file
compaction
snapshot meta
SST
L1:
snapshot meta
仅保存snaphot meta
region
L2:
region
raft_log_db
data_db
SST
SST
SST
……
27. TDStore – 数据存储与迁移
install snapshot(region迁移)流程
src TDStore (leader)
dst TDStore (follower)
MergeIterator
region [100, 200)
InstallSnapshot RPC 1
DownloadSnapshotData RPC 2
SSTIterator
3
External SSTs – “snapshot data”
Streaming RPC
[100, 150] [151, 176] [180, 199]
L0:
L0:
[50,
250]
[100, 300]
[0,
150]
L2:
[0,
300]
Ingest SSTs
[30,
70]
SST
L1:
SST
L1:
[151,
300] [350,
450] SST SST SST
[350,
450] [600,
700] [701,
820]
[0,
150]
……
L2:
[0,
175]
SST SST
[205,300] [350,450]
SST SST
[600,
700] [701,
820]
……
4
28. 总结与未来规划
TDSQL升级版特性:
•
• MySQL完全兼容
• 无限扩展的计算能力和存储容量
• 无需指定shared key
• 高可靠、高可用
• 业务无感知的扩缩容
无限扩展性的单机数据库
29.