魔鬼都在细节里,揭秘腾讯云数据库TDSQL刷新TPC-C世界记录!
本文首发微信公众号:飞总聊IT
2023年3月30日,根据TPC(Transaction Processing Performance Council)官网披露,腾讯云数据库TDSQL打榜TPC-C,刷新了世界纪录。这次性能的世界纪录是8.14亿tmpC(每分钟事务处理数)。
和性能的世界记录比起来,新的打榜测试,也提供了非常低廉的性价比,达到了1.27人民币/tmpC。是同类产品价格的三分之一。
此次打榜参加的产品是腾讯云数据库TDSQL。这个团队很低调。说起来也很巧,飞总第一次知道腾讯云TDSQL的时候,是2018年在巴西里约热内卢开VLDB的时候,遇到了同事来开会的TDSQL团队。飞总也算是对业界比较了解的人,但是之前却对腾讯的数据库团队一无所知,可见这个团队有多低调了。
经过和团队的接触聊天,我才对TDSQL有了一些了解。这个产品是腾讯自己研发的分布式数据库。腾讯研发这个数据库的时间已经差不多有20年了,从一开始的Q币支付,到财付通,微信支付等等都可以看到这款产品的身影。
后来TDSQL也用在了微众银行,作为第一个在银行核心业务系统上使用国产数据库的例子。TDSQL在上线微众银行以后还上线了平安银行等一系列的企业。
这是一款具备金融级一致性,高可用,分布式等特征的分布式数据库,不仅仅支撑了腾讯内部的业务,在很多大银行的核心业务上都有应用。所以,对产品的质量和可靠性,我是没什么疑问的。
但是这个打榜成绩,还是吓到了我。我们简单聊聊TPC这个机构和TPC-C这个基准程序吧。
TPC,中文名叫事务处理性能委员会,是由数十家会员公司创立的非盈利组织。它最著名的是TPC系列的测试基准程序,其中TPC-C是在线事务处理OLTP的基准程序。
TPC-C测试,在数据库行业内非常的有名,打榜类似攀登珠穆朗玛峰,如果对自己的产品没有信心的话,是不敢随便去打榜的。那些全球知名的数据库,比如IBM的DB2,Oracle等,都去打过榜。相对比来说,国产数据库去打榜的就屈指可数了。
简单来说,TPC-C测试逻辑是模拟一个批发商的货物管理系统。批发公司有N个仓库给10个地区供货,每个地区为3000名客户服务。中间还会存在仓库和仓库之间调货的情况。
在这个场景下,TPC-C测试包含5种不同的事务,每种事务有规定的上限或者下限比例。TPC-C测试结果用tmpC表示,也就是订单创建事务每分钟执行的数量。
测试模拟的场景并不是太复杂。难点在于这个测试模拟了一个极值场景。所以TPC-C打榜才像攀登珠穆朗玛峰,每次测试都是对产品严苛的考验。
整个测试有4部分,全长大约30多个小时,有难有易。最难的包括两个部分。
第一个是8小时满压力测试。该测试要求系统平稳满压力运行8小时,中间不得有任何人工干预,性能每秒抖动不可以超过2%。
另外一个测试是故障容灾测试。该测试要求,在满压力运行的时候,人为模拟各种硬件故障。测试要求数据不丢失,并能很快恢复到峰值。
TPC-C的测试是一个严格的审计的测试。在全球仅有的几个审计员和腾讯云数据库团队之间的来来往往,有非常严格的程序。整个过程对团队来说有很大的挑战。
审计要求有很多,简单来说,包含事务的处理符合ACID,被测数据库的性能要和数据量成正比,被测数据库能够平稳地长期运行,被测数据库的写事务结果必须在规定时间内写入磁盘。
TPC-C测试投入的成本也很高,这次腾讯云数据库TDSQL就搭建了1650台机器的一个大分布式集群。这个集群运行一个月的成本就需要以千万计价为单位的成本考虑。这还不算人工成本和打榜本身要付出的费用。
总之,这个测试参与起来不容易。能够参与进来并且拿下世界纪录,更是不容易。
就我自己阅读整个报告来看,腾讯云数据库TDSQL这次的测试有很多亮点。
首先,这次获得了8.14亿tmpC的新世界纪录,用了1650台机器。按照说法大概15%的事务是分布式的。所以简单看一下就可以知道,这个分布式集群里面的单机性能相当的不错。
当然,具体多不错,我没有仔细去算过。不过这不重要,重要的是,显然这是一个单节点性能被充分优化的系统。这说明了这个产品的基础打得很牢固。在我眼里,这就是一个亮点。
其次,1650台机器的分布式大集群,在容灾测试中,经历了各种故障切换,对整个系统几乎没什么影响,这也是非常令人叹为观止的。
做过大规模分布式集群的都知道,这种分布式集群的硬件条件和集中式大型机的数据库产品不一样,硬件非常的不可靠。在不可靠的硬件下做到容灾很好,说明无论是系统的冗余,还是系统在发生灾变的时候的切换,都非常的扎实。
对分布式系统来说,如果这方面做得不好,银行的核心系统,是不敢用这样的分布式系统去取代传统的大型机集中式系统的。
最后,也是我本人觉得最重要的,最让我佩服的是,整个8小时持续打满压测的过程中,整个系统的波动率只有0.2%,而TPC-C的要求2%的波动率。
可能很多人不太理解0.2%和2%之间到底有什么样的差别,下面这张图,应该能给大家一点直观的感觉。
大家可以直观感受一下,毛刺感,锯齿感和一条平直的直线之间的差异。
这条直线意味着什么呢?飞总觉得,这意味着这个系统被优化到极致了,各方面都很稳定可控了。
比如说,这个系统的内存管理,肯定已经完全由应用程序自己来管理,绝不可能再仰赖操作系统了。
又比如说,对于系统内部的处理事务的时候对数据或者元数据需要加的锁,开发人员肯定也做了大量的lock-free的实现,即使无法避免用lock-free的实现方式,也一定尽量用轻量级的锁了。
我只是举了两个例子,其实还有很多,比如说对于主从数据之间的复制,又比如说,对网络的优化,显然,这些都需要做得非常的细致可靠敏捷。
这些东西,倒不是说每件都是难如登天的事情。但是,这里面的事情要想做得很极致,就没有什么省时间的办法。通常来说,需要足够的业务去磨炼,足够的时间去慢慢的构建,修改,尝试,版本迭代。十年磨一剑,用在这里,是非常合适贴切的。
换个说法,腾讯云TDSQL这个数据库系统的稳定性,已经被磨炼到了令人发指的地步了。说真话,我真的没有见过一个大型分布式系统可以在波动率上提升到0.2%的。我一开始读到这个报告的时候,我以为我读错了。
要我说的话,打榜很重要,跑出新世界纪录很牛逼。但是,一定要我选,什么是最让我佩服的,那我觉得这个0.2%的波动率,才是最让我佩服的。我也很吃惊,这个团队可以把产品打磨到这种程度。
微信扫码关注该文公众号作者