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.

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 05:42
浙ICP备14020137号-1 $Carte des visiteurs$