从 TDSQL 演进史,探索国产数据库发展规律

CSDN 2021-02-25 17:37

自 2020 年 12 月 24 日腾讯云宣布 TDSQL 数据库品牌升级以来,这个国产分布式数据库就一直热度不减,不仅在墨天轮 2 月份国产数据库排行榜上攀升至 Top4,在社区热门搜索词中,“TDSQL”也一直占据前十行列。
这也难怪,拥有自研引擎、同时兼容 MySQL 和 PostgreSQL 的 TDSQL,不仅降低了企业迁移成本,也减少了用户学习成本,更有利于用户替代国外数据库,再加上互联网大厂光环的加持,TDSQL 自然备受关注。

跳出腾讯,TDSQL 走向全行业

在前文《腾讯云数据库三大产品线统一升级为 TDSQL,这是要集中力量干大事!》关于国产数据库的讨论中,我们已经对 TDSQL 有所了解。但也有读者提出疑问,这个国产数据库真的有宣传中那么强吗?可用性和性能与现在国际上主流的 Oracle 等商业数据库是否真的有可比性?或者说这只是一个在腾讯公司内部使用的小众数据库?对于用户来讲,能用到成熟的技术文档吗?
这些尖锐的问题,其实 TDSQL 早已给出了漂亮的答案。这个诞生于腾讯企业内部的系统,早就在 2014 年跳出腾讯,以微众银行核心交易系统采用 TDSQL 为开端,作为企业级分布式数据库,TDSQL 已经在金融、政务、运营商、电商、社交、智慧零售、交通等行业都有了广泛的应用。不仅如此,在性能、稳定性上,TDSQL 完全可以达到,甚至超过 Oracle 等老牌数据库。
之所以能够有这样的表现,自然离不开其在底层技术与应用上的创新。今天,通过与 TDSQL 的最早一批创建者们的对话,我们从底层技术演进到应用部署推进,更加深入了解 TDSQL。

TDSQL 的技术演进之路

TDSQL 发端于 2007 年,至 2020 年 12 月腾讯云宣布将 TDSQL、CynosDB、TBase 统一至全新的 TDSQL 系列品牌下,这个最初服务于腾讯内部 QQ 币业务的自用数据库,已经历经 13 年迭代,走向规模商业化之路。
回顾一下这个国产数据库的代表从内部自研库,蜕变成规模化商业产品的发展经历,有助于我们更好地捋清国产数据库的一般发展规律。
总的来说,TDSQL 的发展也遵循着全球数据库从集中式到分布式架构的大方向,但具体的演进历程,腾讯云数据库技术负责人潘安群将其分为四个阶段:
第一阶段:2007-2009 年,腾讯增值业务发展,金融级数据库的基础:强一致性、高可用性
TDSQL 旗下金融级分布式序列诞生于腾讯计费平台部,2002年以前,计费业务最早使用 MySQL 就能满足需求,但到了 2007 年左右,腾讯的增值业务、娱乐业务在不断增长,比如 Q 币业务壮大,腾讯对性能、可用性以及数据一致性要求越来越高,这时腾讯开始研制服务于计费、定位于金融场景的分布式数据库 TDSQL。涉及资金的系统,分毫不能出错,这就要求数据强一致、稳定可靠,以及 7*24 小时的系统高可用性。这个阶段,TDSQL 的目标是可以做到当系统遇到故障可以快速自动切换、自动恢复,保持 99.999%的金融级高可用性。

腾讯计费平台部员工合影
第二阶段:2009 年-2012 年,全民社交:分布式水平扩展、高并发访问、大数据联机分析
2009 年,腾讯进入开放时代,诞生了开心农场等代表性产品,当时互联网行业也进入全民社交的时代,每秒亿级并发的场景比比皆是。这时,腾讯数据库对高性能吞吐、分布式水平扩展、分布式存储等进行了研究,帮助摆脱业务系统流量对服务器数量的依赖,并突破了性能瓶颈、数据可靠性保障、高可用等“不可能三角”的技术难题。
同时,随着互联网数字化的发展,当时腾讯公司内部部分业务对数据库不仅要求纯交易型(OLTP)的能力,还需要偏分析的场景支持。PostgreSQL 比较契合这种场景,因此,从 2011 开始,腾讯云相关数据库团队开始关注 PostgreSQL 数据库的研究,并在 2014 年开始正式探索 OLAP 型数据库研发与应用,布局安全可控的分析型数据库领域。这就是后来的分析型数据库TBase——现在的 TDSQL-A 的前身。
第三阶段:2012-2014 年,云计算兴起:数据库上云、多租户、标准化
2010 年开始,云计算兴起,腾讯数据库在内部要承接的任务是不仅要服务公司内游戏的点券托管,还为开放平台上的第三方业务提供点券类托管服务,行业数据库开始转向“数据库上云”的趋势,技术厂商也开始转向以云为基础,通过服务化的形式向企业交付和提供数据库产品服务。在技术实践中,腾讯数据库经历了公有云海量数字化、大规模高并发业务场景的打磨,进行内核级的深度自研优化,形成标准化的国产分布式数据库产品,包括金融级分布式的 TDSQL、计算与存储分离的云原生数据库 CynosDB——现在的 TDSQL-C 等产品,获得了云原生技术、多租户隔离能力。
第四阶段:2014-2020 年,数字化升级:从腾讯的分布式数据库能力到行业的分布式数据库能力
这个阶段是国产数据库走向行业大规模应用的开始。微众银行是国内首家采用互联网分布式技术架构的银行,也是首家核心系统不是使用 Oracle 等集中式商业数据库的银行。在其背后,TDSQL 作为其分布式数据库底座承担了核心作用。这是 TDSQL 第一次作为交付型的产品,真正使用到银行核心系统中,对整个行业来说都是标志性的事件。此后,TDSQL 作为腾讯云分布式数据库的拳头产品开始对外推向市场。

张家港行打响“第一炮”

图源视觉中国
底层技术上的演进,让 TDSQL 有了实际落地部署的基底。
金融场景是 TDSQL 一开始就瞄准的目标,并在后期的逐渐发展中成为验证其能力的突破口。当然,TDSQL 如今的应用范围已经不限于金融场景,但我们不妨来了解一下 TDSQL 在这个最复杂、对数据库成熟度要求相当高的场景中,获得突破背后的技术细节和故事。
以金融场景“最难啃的骨头”——银行为例,我们来看看 TDSQL 凭借哪些创新,帮助张家港农商银行上线新一代核心业务系统的。

潘安群和同事
微众银行和张家港行是腾讯云 TDSQL 的在金融领域的典型案例,前者是新兴网络银行,后者是传统银行,虽然有所区别,但都可以作为国产数据库进入银行机构核心交易系统的典型。
了解行情的人都知道,银行对数据库的成熟度有着极高的要求,需要进行长时间的研究和测试才能进入,因此长期以来国内银行商用数据库被国外企业所占据。
2014 年,经过 7 年时间的迭代和踩坑,TDSQL 已经打磨出一款比较成熟的数据库产品,并首次尝试对外输出到微众银行的核心系统,从此开始了商业化探索。2019 年,TDSQL 成功应用到张家港银行新核心系统,成为国内第一家投产于传统银行核心系统的分布式数据库,立下了 TDSQL 发展中的又一个里程碑。
银行有着严格的监管制度,用一个未经大量案例验证的国产数据库,来迁移银行核心系统数据,可以说是一场“不成功便成仁”的巨大冒险,当时腾讯和银行双方都承受着巨大的压力,过程也并不是一帆风顺。
王辉作为最早微众银行基础架构筹备组成员,全程参与建设微众银行分布式核心数据库,并支持平安银行信用卡基于 TDSQL 数据库服务新一代核心系统上线。在 Oracle 和 AWS 工作过多年的他回忆到,TDSQL 在微众银行核心系统上线的确是腾讯云数据库一个新的开端,作为一家新兴的网络银行,与张家港行等传统银行数据库迁移相比,还是有一些区别。
在他看来,一方面,微众这样的新的网络银行没有历史包袱,所有架构都可以从零开始建设,而张家港行、平安银行这类传统银行,就有着厚重的历史包袱,进行数据库改造,必须以平稳过渡为第一要务。团队对传统银行已有的老系统进行改造,搭建新系统时必须进行老旧数据迁移,这时候的挑战主要在于是否能够实现无缝割接和平稳过渡,这是传统银行与新银行的巨大区别
另外,传统银行系统改造还面临着业务无感知和数据一致性的要求,要保证在银监会要求的 48 小时内完成所有数据交接和迁移,48 小时之后对外开门营业,这些都是传统银行带来的巨大挑战。从这些维度来说,新银行系统相比传统银行系统改造的难度低一些。
对传统银行进行核心系统数据库改造,仅说服监管机构与银行方面领导层,就是一个艰难的过程。当时,张家港行老核心系统使用的是国外商业数据库 Sybase,但数据库架构比较陈旧,无法满足业务需求。基于当前国产数据库飞速发展,银行科技负责人有尝试国产数据库的想法。一方想创新,另外一方想开辟银行客户,双方一拍即合,合作意向很快达成。经历过一段磨合期后,银行方面在腾讯云团队的帮助下进行了大量的验证,并在 TDSQL 替换进张家港行核心交易系统之前,先在非核心的 ECIF(类似于水电费结算)系统上试水。结果各方面性能和稳定性上表现优异,银行才对 TDSQL 放下心来,正式启动核心系统适配 TDSQL 的改造。
有意思的是,为了防止数据库替换过程有意外发生,张家港行与腾讯云把“赛马机制”用到了这次系统的开发过程中。在最初的数据库选型时,张家港行开发了两套系统,一套方案基于 TDSQL,另一套基于国外某集中式数据库,一旦发生故障,可以作为 Plan B 随时切换。最后,基于“稳定和成熟”的标准,以及一系列严苛的测试后,最终选择了腾讯云 TDSQL 分布式数据库作为其核心系统的数据库。
这时的 TDSQL 不仅能完全满足张家港行的需求,而且在性能、成本和易用性都显示出明显的优势。
而在具体改造过程中,TDSQL 的一些核心方案对于国产数据库优化有一定的参考价值,不妨细品一下。
比如从集中式架构转变为分布式架构是思维的改变,其中最大挑战,就是分布式架构与集中式架构,在复杂查询的代价评估机制不一样,如果直接按照集中式数据那样使用分布式数据库,无疑会导致一些复杂 SQL 处理性能急剧下降,所以如何将数据合理分布,同时对 SQL 进行充分优化至关重要,既能保证充分发挥分布式架构高扩展性特性,同时又能保证性能最优。
在解决这个难点问题时,张家港行在业务侧通过调整分片关键字和复杂 SQL 拆分两个方面做优化,让 SQL 语句尽可能限制在同一个数据分片节点内。而对那些有业务逻辑特殊性的 SQL 语句,腾讯云 TDSQL 产品团队也配合张家港行,进行了大量针对复杂 SQL 语句的优化。
另外,交易一致性也是银行核心业务系统的基本要求,如果采用传统主从异步\半同步复制方式,会引发性能和一致性、可用性问题,成为分布式架构在银行核心业务应用的最大障碍。针对这个问题,腾讯云 TDSQL 内核做了很多优化,采取了基于主从架构的线程池结合强同步复制方案,保证数据强一致的情况下大幅提高性能。
此外,张家港行还在张家港本地建设同城主备中心,同时也建设了异地灾备中心。在这个两地三中心的架构中,在同城采用 TDSQL 一主三备的模式,主备之间采用强同步复制技术,无论主节点还是单个数据中心出现异常的情况下,都可以实现灾备自动切换,且保证数据的强一致。腾讯云 TDSQL 强同步机制可以原生地支持两地三中心的容灾架构,做到灾难发生时的无缝、自动化切换。
2019 年 8 月 18 日,新核心系统成功跑在了腾讯云 TDSQL 分布式数据库上,张家港银行新核心系统正式对外开业。上线一年后,TDSQL 运行一切正常,作为“备胎”的集中式数据库方案,也始终没派上用场。
在处理能力上,投产后的新核心系统相比旧核心系统从 100TPS 提高到 6200TPS,高频账户类交易耗时在 300 毫秒之内,查询类交易耗时在 100 毫秒之内,20 秒内可以完成 1 万笔批量代发代扣业务,日终跑批耗时 17 分钟,存贷款结息耗时 16 分钟,相比老核心日终批处理耗时 60 分钟、存贷款结息耗时 180 分钟,有了质的变化。
就这样,数据证明银行的核心交易系统跑在这个国产数据库上完全没有问题, TDSQL 在张家港行打响了国产分布式数据库应用与银行传统核心系统的第一炮。事实上,从开始规模化商用以来,TDSQL 多引擎系列相继支撑了国内首家互联网证券富途证券,首批互联网保险包括安心财险、和泰人寿等,以及首批数字政务平台应用数字广东等,而2020 年TDSQL在平安银行投产,帮助客户完成业界首个银行核心系统从传统集中式大型机下移到分布式平台……
总的来说,凭借 TDSQL 数据强一致性、高可用性、可伸缩与可拓展性的优势,把在互联网上积累的经验迁移到传统金融系统和更广泛的应用场景中。

展望未来:云原生、超融合

如今,TDSQL 不仅已经跳出腾讯内部在各行各业落地,更重要的是,背靠腾讯云生态系统,TDSQL 解决了国产分布式数据库市场通用化难题。
随着云计算发展,云数据库的发展正在经历从第一阶段数据库上云,到第二阶段从云数据库到云原生数据库的变革。展望未来,腾讯云认为,云原生、超融合会是未来云数据库发展的大趋势,因此也在朝着这两个方向变革,着力构建云原生架构基础。在此之上,腾讯云也构建了数据库的超融合体系。

腾讯云副总裁李纲
目前,腾讯云数据库 TDSQL 下已经具有金融级分布式产品序列 TDSQL;单体实例可支撑百 T 百万 QPS 的云原生序列 TDSQL-C;可应用于百P级复杂场景的分析型序列 TDSQL-A 等可兼顾性能与通用性的产品能力族;能够融合公有云与私有云,连接传统 IDC 与云数据库的数据库 SaaS 工具 DBBridge,以及能够实现软硬一体的融合的 TDSQL 一体机。
腾讯云预测,未来超融合技术体系还会解决多引擎共存下对云数据库的开发与应用选择带来的挑战,TDSQL 也将通过 AI 智能调度,以及 Serverless 等方案,来实现多引擎的统一标准化服务,让用户能够快速实现研发及服务的全链路打通,而无需关心技术细节。
TDSQL 的这些探索,是国产数据库技术逐渐从内部走向产业市场,在产品化、技术成熟度、实际行业场景打磨的成长阶段,也是推动协助传统行业进行分布式数字化转型的尝试。事实证明,这是一条国产数据库可以走通的路。
也许还会有人说,与国际上通用的商业数据库产品相比,国产数据库还有不小的差距,但是也不要忽略国产数据库显而易见的优势,比如国内厂商更了解中国客户的需求,像 Oracle 这样的数据库产品在选型时可能更加关注通用的接入口或功能,在投入开发新功能前一般会做大量的成本评估,这样漫长复杂的评估,大部分国内用户恐怕都难以接受。但为了开拓市场,国产数据库会更愿意花费时间了解客户需求,做出定制化的方案。
TDSQL 的演进历程虽是个案,但其发展规律却是有迹可循。从腾讯内部走出来的数据库,从最初不被看好,到现在疫情期间作为我们每天都会打交道的健康码、腾讯会议的技术支撑,它的发展历程告诉我们,国产数据库的想象空间还很大,万丈高楼,起于平地,我们要有耐心,等待它们高耸入云。