TDSQL发展历程
TDSQL 是腾讯推出的一款兼容 MySQL 的安全可控、高一致性分布式数据库产品,最早可以追溯到 2002 年,作为腾讯计费平台部的一个数据库服务,当时使用了开源的MySQL。随着公司业务的发展,腾讯所面临的用户量的压力也越来越大,DBA团队提出了 7×24 小时不宕机的高可用设计方案,来保证数据库能提供 7×24 小时不间断连续高可用服务。2014年微众银行成立,数据库选型的时候关注到TDSQL,经过测试验证,发现当时的TDSQL已经完全具备微众银行对数据可用性和一致性的要求,借着这个机会,成功在微众银行投产,覆盖了银行的核心业务。
2019年腾讯和张家港银行达成合作,成功将TDSQL分布式数据库系统应用到传统金融核心系统,使得张家港行也成为全国第一家传统核心系统上分布式数据库的银行。而这也成为国产数据库领域的一个里程碑事件,自此之后陆续有众多的银行将核心系统从国外商业数据库迁移到国产数据库。

作为一款金融级的分布式数据库,TDSQL具有以下的特点:
·数据强一致性,确保多副本架构下数据一致性,避免故障后导致集群数据错乱或丢失;
·金融级高可用,确保99.999%以上高可用,支持同城双活、跨区容灾等高可用架构,具备故障自动恢复能力;
·线性水平扩展,通过扩展集群节点,满足更高的业务需求;
·便捷的运维,包含赤兔和扁鹊自动化运维工具,提供自助化运营和智能DBA管理功能。
TDSQL数据库架构

从架构上看,TDSQL和其他国产分布式数据库并没有太大的差别,核心模块包括: 调度集群(TSchedule)、 物理节点组(SET)、接入网关集群(OLTP-Proxy), 决策集群(TZooKeeper)以及赤兔自动化运维平台。
物理节点组(SET)
物理节点组是分布式数据的实例,每个SET中存储哪些数据由Shardkey来进行分散的。SET由MySQL、 监控和信息采集(
TAgent)组成,默认采用一主多从架构,通常部署在跨机架的物理服务器中;每个节点(DataNode)都部署 TAgent,实时向决策集群上报,提供决策依据。
调度集群(TScheduler)
调度集群帮助 DBA或者数据库用户自动调度和运行各种类型的作业,比如数据库备份、收集监控、生成各种报表或者执行业务流程等等。TDSQL把 Schedule、Zookeeper、OSS(运营支撑系统)结合起来,通过时间窗口激活指定的资源计划,完成数据库在资源管理和作业调度上的各种复杂需求。
决策集群(TZooKeeper)
决策集群用于TDSQL 提供配置维护、选举决策、路由同步等,并能支撑数据库节点组(分片)的创建、删除、替换等工作,并统一下发和调度所有DDL(数据库模式定义语言)操作,通常决策集群需要采用奇数台,实际部署的时候应大于等于 3 组并跨机房部署。
赤兔自动化运维平台(CHITU)和扁鹊
赤兔自动化运维平台是基于TDSQL 定制开发的一套综合业务运营和管理平台,真正融合了数据库管理特点,将网络管理、系统管理、监控服务有机整合在一起。
扁鹊智能DBA平台具有智能诊断系统,可以定期由DBA发起对数据库实例进行巡检。比如发现某个实例的CPU使用率很高,需要扩容但是没有做,就会减分;表的索引创建效率不高,也会减分。由此生成一个诊断报告,DBA可以通过这个报告对数据库进行相应的优化调整。此外当系统出现故障时,扁鹊平台也能够帮助DBA自动分析故障原因。
接入网关集群(OLTP-Proxy)
接入网关集群负责网络层连接管理SQL 解析、分配路由,其主要作用如下:
•从配置集群(TzooKeeper)拉取数据库节点(分片)状态,提供分片路由,实现透明读写;
•记录并监控SQL 执行信息,分析SQL 执行效率,记录并监控用户接入信息,进行安全性鉴权,阻断风险操作;
•OLTP-Proxy 通常可以直接访问,但仍然建议前端部署可提供负载均衡能力网关,并由网关对用户提供唯一虚拟IP 服务。
TDSQL的每个模块都基于分布式架构设计,可以实现快速扩展、无缝切换、实时故障恢复等。这种架构简化了对于硬件的需求,意味着即使是简单的 x86 服务器,也可以搭建出类似于小型机、共享存储等一样稳定可靠的数据库。
TDSQL设计思想及其实现
作为一款分布式数据库,TDSQL的核心思想只有两个:数据的复制(Replica)和分片(Sharding),其他都是由此衍生出来的。其中,Replica配合故障的检测和切换,解决可用性问题;Sharding配合集群资源调度、访问路由管理等,解决容量伸缩问题。
复制效率优化
为了解决复制效率和复制过程中可能会引入的数据不一致问题,TDSQL引入了线程池,将数据库线程池模型针对不同网络环境进行优化,并支持组提交方案。例如,在binlog复制方案上,将复制线程分解:
分布式查询引擎优化
作为分布式的计算引擎,在存储与计算引擎相分离的情况下,非常重要的一环就是如何将计算尽量下推到数据存储层。TDSQL的SQLENGINE在经过大量业务打磨后,实现了基于Shard key下推,索引条件下推,驱动表结果下推,NULL下推,子查询下推,Left Join转化成Inner Join等多达18种下推优化手段,尽量降低数据在多个节点传输带来的压力,以提供更好的分布式查询的能力。
此外,TDSQL还实现了基于代价的查询引擎(CBO),SQL经过SQLENGINE的词法,语法解析,语义分析和SQL优化之后,会生成分布式的查询计划,并根据数据路由策略进行下推计算,最后将汇总的数据返回给前端。
写在最后
和腾讯一贯低调务实的作风类似,TDSQL也是一款低调务实的产品。从架构上看,和市面上主流的MySQL分布式架构基本上是相同的,但是TDSQL团队在开源架构上做了大量的优化,主要体现在以下几个方面:
1.解决了MySQL原生架构中数据同步不一致的老大难问题,确保主从同步和切换过程中的数据一致性;
2.优化分布式架构中的数据强同步性能,使其基本达到异步同步性能,满足分布式数据强一致性需求的同时,不会降低应用操作性能。
可能是在其他方面并没有特别出彩的地方,学习TDSQL数据库过程中,给我印象最深刻的还是它的运维工具,将日常运维需要使用的常用操作集成到“赤兔”中,同时辅以“扁鹊”对数据库实现自动巡检和故障智能诊断,将原厂商的运维和管理经验快速传递给客户,大大降低了企业的数据库运维成本,也减轻了DBA的学习负担,这一点对于新生代的国产数据库厂商来说尤为重要!




