2.10 企业级分布式数据库 TDSQL 及最佳实践¶
课程简介¶
本课程将深入讲解腾讯云企业级分布式数据库 TDSQL。TDSQL(Tencent Distributed SQL)是腾讯自研的金融级分布式数据库,分为 TDSQL for MySQL 和 TDSQL for PostgreSQL 两个主要版本。
本课程将涵盖产品定义、核心概念、架构原理(包括 SQL 引擎、数据节点、高可用机制)、HTAP 能力以及选型与性能测试的最佳实践。
学习目标¶
通过本课程的学习,您将能够:
- ✓ 理解 TDSQL 产品定位:掌握 TDSQL for MySQL 和 PostgreSQL 版的区别与适用场景。
- ✓ 掌握核心架构:深入理解 Compute-Storage 分离、SET 模型、SQL 引擎及 GTM 全局事务管理。
- ✓ 熟悉高可用机制:掌握强同步复制、自动故障切换及主备容灾原理。
- ✓ 应用最佳实践:学会如何进行分片选型、容量规划及使用 Sysbench 进行性能压测。
第一部分:TDSQL for MySQL¶
本部分导读
TDSQL for MySQL 是基于 MySQL 协议的金融级分布式数据库,广泛应用于银行、支付、电商等核心交易场景。
一、产品概述¶
1.1 产品定义¶
TDSQL for MySQL 是一种支持强一致性、高可用性、全球部署架构及分布式水平扩展的关系型数据库。 - 协议兼容:完全兼容 MySQL 协议,业务无缝迁移。 - 核心能力:具备虚拟化多租户、强同步复制、线程池、热点更新、内核优化等能力。 - 验证:经过腾讯内部(微信支付、财付通、微众银行)十余年大规模核心业务验证。
1.2 核心概念 (Key Concepts)¶
| 概念 | 说明 |
|---|---|
| 实例 (Instance) | 用户实际使用的一个数据库服务单元。 |
| 分片 (Sharding) | 将数据水平切分(Horizontal Partitioning),存储在不同的节点上,以提升并行处理能力。 |
| 集群 (Cluster) | 由多个服务器协同工作组成的系统,避免单点故障。 |
| SET (节点组) | 也就是数据分片的物理载体。一个 SET 通常包含“一主两备”或“一主一备”的物理节点。 |
| 主从复制 | Master 处理写操作,Slave 处理读操作并同步数据。 |
| SQL 引擎 (Gateway) | TDSQL 的入口组件,负责 SQL 解析、分库分表路由、读写分离等。 |
1.3 核心优势¶
- 高性能:支持大并发、高吞吐,满足互联网海量业务需求。
- 高安全性:提供国密算法支持、数据加密及完善的安全审计。
- 强一致性:基于强同步复制机制,确保主备数据零丢失(RPO=0)。
- 弹性扩展:支持在线水平扩展(Rebalance),按需增加分片。
- 金融级可靠:支持“两地三中心”等容灾架构,自动容灾切换。
二、产品架构原理¶
2.1 整体架构图解¶
TDSQL 采用计算与存储分离的架构:
graph TD
Client[业务应用] --> VIP[VIP (虚拟IP)]
VIP --> SQLEngine[SQL 引擎 (Gateway/Proxy)]
subgraph SET_1[SET 1 (分片A)]
M1[Master] -- 强同步 --> S1[Slave]
M1 -.-> S1_2[Slave 2]
end
subgraph SET_2[SET 2 (分片B)]
M2[Master] -- 强同步 --> S2[Slave]
M2 -.-> S2_2[Slave 2]
end
subgraph Management[管理调度层]
ZK[Zookeeper / Etcd]
Scheduler[调度系统]
Backup[冷备中心]
end
SQLEngine --> SET_1
SQLEngine --> SET_2
SET_1 --> Backup
SET_2 --> Backup
- 接入层 (VIP + SQL 引擎):
- VIP:提供统一访问入口,负载均衡。
- SQL 引擎 (Gateway):无状态计算节点。负责 SQL 解析、路由计算、读写分离、流量控制。它将逻辑表映射到物理分片。
- 存储层 (SET / 数据节点):
- 每个 SET 是一个高可用的 MySQL 集群(通常为一主多从)。
- 负责数据的持久化存储和执行物理 SQL。
- 建议配置 SSD 硬盘以保证 I/O 性能。
- 管理调度层 (Manager):
- 负责集群管理、监控告警、备份恢复、故障切换(HA)。
- 依靠 ZooKeeper 等组件维护集群元数据。
2.2 实例模式:分布式 vs 关系型¶
- 分布式实例:拥有多个 SET,数据通过 HASH 或 RANGE 算法打散到不同 SET 上。适用于海量数据、高并发场景。
- 关系型实例:只有一个 SET,不进行分片。适用于数据量中等、需要 100% 兼容 MySQL 复杂语法的场景。
2.3 数据同步与高可用¶
为了保证金融级数据安全,TDSQL 支持多种同步模式:
| 模式 | 描述 | 特点 | 适用场景 |
|---|---|---|---|
| 异步复制 | 主库写完即返回。 | 性能最高,但主库宕机可能丢数据。 | 非核心业务。 |
| 强同步复制 | 主库写入后,必须等待至少一个备库写入 Relay Log 并返回 ACK,主库才返回成功。 | 数据零丢失,性能稍有损耗。 | 金融核心、支付交易。 |
| 强同步可退化 | 正常时强同步,备库故障或超时后自动降级为异步。 | 平衡了可用性与一致性。 | 通用互联网业务。 |
故障自动转移流程: 1. 主节点故障,调度系统检测到失联。 2. 从备节点中选出 Binlog 偏移量最大(数据最新)的节点作为新主。 3. 重建主备关系,修改路由表。 4. 整个过程对业务透明(VIP 不变),通常在秒级完成。
2.4 水平分表原理 (Sharding)¶
- 逻辑表:业务看到的表(如
t_order)。 - 物理表:实际存储在各个分片上的表(如
t_order_001,t_order_002)。 - 拆分键 (ShardKey):用于计算数据分布的字段(如
User_ID)。SQL 引擎根据 ShardKey 将请求路由到特定分片,避免跨分片查询以提升性能。
第二部分:TDSQL for PostgreSQL¶
本部分导读
原名为 TBase,是腾讯基于 PostgreSQL 开发的分布式 HTAP 数据库,适用于数据仓库及混合负载场景。
一、产品概述¶
TDSQL for PostgreSQL 是一款具备 HTAP (Hybrid Transactional/Analytical Processing) 能力的分布式数据库。 - 双引擎:同时具备高效的 OLTP(事务处理)和海量的 OLAP(分析处理)能力。 - 架构:Shared-Nothing(无共享)集群架构。 - 适用场景:PB 级海量存储、物联网 GIS 数据、实时数仓、Oracle 迁移。
二、架构原理¶
2.1 核心组件¶
| 组件 | 名称 | 职责 |
|---|---|---|
| CN | Coordinator Node (协调节点) | 业务入口。负责 SQL 解析、查询规划、分发请求到 DN,并汇总结果。CN 节点是对等的,只存储元数据。 |
| DN | Data Node (数据节点) | 存储实际业务数据,执行计算。DN 之间数据通过流复制同步。 |
| GTM | Global Transaction Manager | 全局事务管理器。负责管理全局事务 ID (XID) 和全局快照,确保分布式事务的强一致性 (ACID)。 |
2.2 HTAP 能力¶
- 行存与列存:支持行存储(适合 OLTP)和列存储(适合 OLAP)混用。
- 智能优化器:CN 节点根据查询类型,自动选择 OLTP 或 OLAP 优化路径。
第三部分:TDSQL 最佳实践 (以 MySQL 版为例)¶
一、选型与容量规划¶
TDSQL 的性能与 分片数量 和 分片规格 直接相关。
理论性能公式: - 读写并发 (QPS) = 单分片 QPS × 分片数量 - 事务性能 (TPS) ≈ 单分片 TPS × 70% × 分片数量 (会有分布式事务损耗)
分片规格选择策略:
| 业务阶段 | 推荐配置 | 说明 |
|---|---|---|
| 功能测试/POC | 2 分片,每分片 2GB 内存/25GB 磁盘 | 最低配置,用于验证功能。 |
| 业务初期 (增长快) | 2 分片,每分片 16GB 内存/200GB 磁盘 | 预留一定的性能空间。 |
| 业务稳定期 | 4 分片起,根据峰值推算 | 建议单分片存储 5000万行数据,预留未来 1 年的增长量。 |
注意: - 一个分片建议数据量不超过 500GB - 1TB,过大影响备份恢复效率。 - 分片数量一旦确定,后期扩容(Rebalance)涉及数据搬迁,虽支持在线扩容,但仍建议前期做好规划。
二、性能压测实践¶
推荐使用 Sysbench 工具进行基准测试。
测试要点:
1. 工具版本:Sysbench 0.5 或更高版本。
2. 配置调整:
- 修改 OLTP 脚本,调整读写比例。例如设置为 4:1 (4个 Select, 1个 Update)。
- 使用 oltp_point_selects 和 oltp_index_updates 参数控制。
3. 监控观察:
- 在压测期间,观察 TDSQL 控制台的 CPU 利用率。
- 由于 TDSQL 采用了超用技术 (Over-commitment),某些监控指标(如逻辑 CPU)可能会显示超过 100%,属于正常现象。
课程总结¶
关键知识点¶
- TDSQL 双引擎:MySQL 版主打金融级核心交易(OLTP),PostgreSQL 版主打海量存储与分析(HTAP)。
- 强同步:通过 Raft 或优化的半同步协议实现 RPO=0,是金融业务的基石。
- 架构组件:
- MySQL 版:SQL 引擎 (Proxy) + SET (数据分片) + ZK (调度)。
- PG 版:CN (协调) + DN (数据) + GTM (全局事务)。
- 分片键:分布式数据库的核心设计,决定了数据分布均匀度和查询效率。
随堂小测¶
问题:在 TDSQL for MySQL 架构中,负责处理 SQL 解析、分库分表路由的组件是? - A. Zookeeper - B. SQL 引擎 (Gateway) - C. SET - D. 调度系统
答案:B。
解析:SQL 引擎(也称网关 Gateway 或 Proxy)是流量入口,负责解析 SQL 并根据分片规则路由到正确的 SET。
本章课程到此结束。下一章,我们将讲解 2.11 云原生 TDSQL-C + 云数据库 Redis。