1年前OceanBase团队开了个会,定了个小目标,接下来的一年中这群工程师闭关攻坚。从掉头发到睡几个小时就跳起来看邮件,更甚至有人天天焦虑地捧着手机等邮件。
1年后,蚂蚁金服自研数据库OceanBase登上TPC-C排行榜榜首,这一成绩开创了多项世界先河:中国数据库第一次登上TPC-C榜单;第1次基于公有云通用机型进行测试;分布式无共享关系数据库第1次通过审计并取得创纪录成绩。今天,我们走到幕后看成绩背后的光荣与梦想,艰辛与泪水。
2010年,在全球OLTP数据库权威测试TPC-C中,老牌数据库巨头Oracle取得了tpmC 3000多万的成绩,接近第二名IBM的3倍,堪称“独步武林”。此后的9年中,这一纪录无人能破。
事情回到2011年,阿里巴巴内部一个数据库团队在备战双11时遇到了点麻烦,他们所支持的淘宝收藏夹业务只要流量一大就反复宕机。大战在即,团队全员立刻汇合,紧急修改代码。
今天看来这不过是个小问题,但在当时却生死攸关。“要是解决不了这个问题,我们的项目就挂了。”
蚂蚁金服研究员杨传辉当时就站在负责修改代码的工程师背后,一行一行给他review。他的身旁站着阳振坤——他们的Leader,也是这个数据库项目的创始人。
他们的项目名叫OceanBase,第一次正式承接双11流量时,这个数据库还没满2岁,淘宝收藏夹是他们唯一支持的业务。
那一年谁也没有想到,九年之后,OceanBase一举超越Oracle,登上了TPC-C benchmark的榜首。
测试只是手段,做出更好的产品才是目的
TPC-C是全球目前最具公信力的联机交易处理(OLTP)数据库的功能与性能结合的测试标准。简而言之,一款商业数据库想要向业界证明自身实力,TPC-C测试是一项硬指标。TPC-C的排行榜长期被Oracle、IBM等外国厂商占据,从未出现过中国自研品牌的身影。
很高的测试门槛,把众多厂商挡在门外。首先,TPC-C测试需要模拟真实的交易环境去运行,整个测试的工具,包括所有链路在内,都需要自己搭建,而且要严格按照TPC委员会发布的标准来做——一份100多页的PDF,事无巨细,全是英文。其次,交易数据库性能的提升本身就是一件极为困难的事,Oracle已经站在巅峰,想超越它谈何容易。
“我们不是去年才想起要跑TPC-C测试的,我们从2010年立项第一天就研究过这个指标。”杨传辉说。但是他们也清楚地知道,拿着尚未成熟的产品去跑测试是白费功夫:“三四十名可能都拿不到。”
厚积薄发,这一“积”就是九年多。
2018年8月,蚂蚁金服技术专家邹银超和OceanBase团队一起开了个会。在这场为筹备TPC-C测试而开的项目会上,杨传辉定下了打榜“小目标”:超越Oracle的纪录。
邹银超感到震惊。Oracle 3000多万的纪录已经保持了九年,无人可以撼动,OceanBase起步至今也才九年,对于数据库来说还非常年轻,第一次冲击TPC-C纪录,就直接剑指数据库王者Oracle。
“这个项目大概要做两三年吧?”他当时如此揣测。
按照既有的经验,两三年时间都很紧张。蚂蚁金服资深技术专家蒋志勇作为OceanBase团队的核心成员,在筹备的初期阶段跟随阳振坤先后拜访了浪潮集团乔鑫总经理和清华大学陈文光教授,学习和了解TPC-C测试的相关流程。而为了做出符合TPC-C规范的测试工具,需要将大量的人力和资源投入到产品研发和改进方面。“不管怎么说,测试只是手段,做出更好的产品才是目的。”蒋志勇说。
专攻测试工具的团队很快组建起来,蒋志勇牵头,成员人数一双手就数得过来。
TPC-C项目北京团队闭关攻坚
技术攻坚组也组建到位,北京一个团队,杭州一个团队,各占一个项目室,开始闭关攻坚。
其他各个团队都伸出了援手:硬件团队、中间件团队、阿里云……DBA团队和业务团队也以极大的包容,在人手紧张资源不足的情况下,支持着OceanBase技术攻坚。
困难虽多,但开弓没有回头箭。“蚂蚁的技术人是使命必达的。”正如DBA团队的资深运维专家师文汇所言,定下了世界第一的目标之后,所有人都会团结一致,就会倾尽全力去战斗。“追求极致,没有上限。”
“审计员都没见过的新玩意儿”
TPC-C测试的流程中,非常重要的一环是审计员来现场审计,以确认测试的所有细节符合规范。审计员全世界只有三位,满世界飞来飞去,日程紧张。
邹银超来自数据技术部,在项目中负责硬件选型、系统性能优化和测试方案评估,几乎每天都要和审计员进行邮件沟通。因为十多个小时的时差,他最常做的事就是凌晨把邮件发出去,睡几个小时,然后跳起来看审计员有没有回复。
一开始的测试方案是基于物理机做的传统方案。但到了2019年新年前后,策略发生了变化:准备使用阿里云ECS虚拟机进行测试。
比起使用昂贵的专用设备,上云意味着大幅度降低实际测试成本,以及优秀的可扩展性。OceanBase的这个方案,硬件成本仅占18%,远低于Oracle的硬件成本占比,但是在公有云上做TPC-C测试,前所未有。
审计员对此表示出了强烈的兴趣。分布式数据库来测TPC-C,OceanBase已经是第一家了,以如此大规模的集群上云测试,更是闻所未闻。
但是面对这样一种全新的形式,审计员也很谨慎,每一个细节都“抠字眼”式地确认。“有时候我们所有测试都跑完了,审计员忽然指出‘这里不合规’,就又得重头来过。”回忆起艰辛的沟通过程,蒋志勇苦笑。
“来回沟通了三个月左右,因为拿不准会测什么和怎么测,每一种测试方案都要准备和沟通。”邹银超说,“天天焦虑地捧着手机等邮件。”
更让他们焦虑的事来了:到了2019年5月,整整一个星期,审计员没有任何反馈。
阳振坤保持淡定:“再等两天。”
两天过去了,仍然杳无音信。团队坐不住了,写邮件过去询问。这一次审计员回了一封极长的邮件,原来是因为OceanBase的测试方案从未有人做过,而且规模特别庞大,审计员自己也没把握,专程去了一趟TPC组织总部,把方案提交给TPC-C技术委员会开会讨论。
讨论的结果反馈到了阳振坤手中,他第一时间把消息发到了整个项目的每一个相关群里。“通过了!”测试方案最终获得了TPC-C委员会的认可。“心头的一块大石头总算落了地。”蒋志勇松了口气。各个群里一片欢腾,但这还只是路程中的第一块里程碑。
“大家像战友一样,把后背交给对方”
“聚到一个项目里,大家从肉体到心灵,都靠得更近了。”
TPC-C项目杭州攻坚团队
蚂蚁金服技术专家曹晖是早期就加入TPC-C测试项目的成员之一,这一年多来,他最常感到的就是“时间不够用”。物理机换成虚拟机,单机50%的性能差距很快显现出来,如何在短时间内找到优化点提升性能,成为团队攻坚的重点任务。
杭州闭关室的墙上画着一张性能表,每周更新,这条性能曲线也成为团队成员的“心情曲线”:“看着它像阶梯一样一步一步地走高,大家就非常高兴,要是连续一段时间爬不上去,就要开始掉头发了。”曹晖笑着说。
掉头发的不仅仅是OceanBase的攻坚团队。师文汇和DBA团队也每天都在“发愁”稳定性和研发效能。蚂蚁最核心的业务全部都运行在OceanBase上,稳定性丝毫不容有失,但大量人力和资源投入到TPC-C项目后,支持和维护日常业务的重担都落到DBA团队和业务团队肩上,工作量激增。
“最紧张的是研发环境,如果出问题,很多业务开发都会受影响。”整整一个半月,DBA、交付、系统等团队都在携手应对这个问题,终于,风险排除了。
TPC-C测试的结果公布后,阳振坤在群里向所有兄弟团队表示感谢:“感谢大家对OceanBase的理解和宽容。”
想要取得任何重大成就,一个团队的力量始终有限,但百川汇海,聚沙成塔。“一场仗,一颗心。”杨传辉用这六个字总结这场举全员之力的联合作战,师文汇的说法更热血也更感性一些:“胜则举杯同庆,败则拼死相救。大家像战友一样,把后背交给对方。”
“从来没见过这么平稳的曲线”
7月底,性能攻坚告一段落,真正用于测试的大规模集群由阿里云准备到位,交到了项目团队手中。曹晖被任命为“操作员”,掌控两百多台ECS云服务器。
意想不到的事又发生了。之前在小规模集群上解决掉的问题,一上到大规模集群,又一一暴露出来。“压力不均匀,抖动很厉害,还出现了不少完全没预料到的问题。”蒋志勇说,“而且这还只是一些基础问题,把它们解决掉之后,还得把曲线跑得很平稳才行。”
按照TPC-C的要求,在测试取值的2小时之内,系统抖动不能超过2%。
而此时距离审计员前来杭州现场审计,时间仅剩两周。
从拿到正式测试的大规模集群开始,大家就开始连轴转。曹晖天天在群里“钉”人,他盯着200多台云服务器的运行,只要发现问题,马上“钉”到对应的同学,被“钉”的同学无论在杭州还是北京,第一时间抄起电脑就冲到闭关室。
阿里云团队也倾力配合,IaaS层的配置和性能的优化,问题一个一个地在他们的支持下被攻克。
“想法很简单,就是往前冲。没有退路,很多岗位连backup都没有。”
没有两三年时间,只用了一年,OceanBase就迎来了TPC-C的最终大考。
8月6日,TPC-C审计员抵达杭州蚂蚁金服总部。
“一边很有信心,一边又很紧张。”杨传辉这样形容当时的心情。信心来自于九年以来的积淀,他们自信已经具备了冲击Oracle纪录的实力;紧张来自于时间紧迫,最后针对大规模集群的调试只有两周,会不会有不可预知的问题发生?
测试工具启动,OceanBase开始运行,预热的时间中,审计员出去喝了杯咖啡。等他再回来时,性能曲线已经展示在了屏幕上——极其平稳,没有丝毫抖动。
经验丰富的审计员大为惊叹,因为从来没有见过这么平稳的曲线:“Very impressive!”
TPC-C的性能测试要求取值时段是2小时,OceanBase是8小时;TPC-C要求的抖动幅度是不超过2%,OceanBase是低于0.5%。
现场审计结果获得审计员认可,接下来又经过了一个多月的调优,9月底,OceanBase跑出了Finalrun结果。凌晨4点,曹晖和邹银超把最终报告发给审计员。
10月2日一早,审计通过的结果出现在了TPC-C官网上——tpmC 6088万,是Oracle纪录的两倍多,新的纪录诞生了。
“那一刻真没有感觉到特别兴奋,反而觉得,这就是理所当然的。”蒋志勇说。
“技术男不会特别情绪化。而且,我们在2014年就已经兴奋过了。”杨传辉说。这位从头看着OceanBase诞生和成长的工程师经历过更多风浪,最情绪化的反应留在了当年OceanBase第一次承接核心支付业务成功的时刻,“写代码这件事,只要坚持得足够长,肯定能做出来,但是就是需要坚持,这种坚持可能以十年二十年为单位。到了真正做出来的时刻,就会觉得是理所当然的了。”
“不管是在做TPC-C还是日常工作中,我觉得蚂蚁的技术人是使命必达的,在做一件事情或者确定一个目标以后,倾尽全力去战斗。就像TPC-C项目启动的时候,阳老师说一定要做到世界第一,然后大家团结一致为了这个目标去努力。”师文汇说,“蚂蚁技术人一直在追求极致,不断的用创新去突破当前技术的限制,这个在双十一、TPC-C测试以及日常的工作中都有所体现,比如想尽办法去优化CPU的消耗、用各种方法降低RT时间。”
“家人终于知道我是做什么的了”
“比打破纪录更重要的,是OceanBase为这个行业打开了全新的可能性。”蒋志勇说,“假如按Oracle的路子走,Oracle就是顶峰了,但OceanBase用分布式的方式去做这件事,取得了一个新的纪录,让市场和客户有了新的选择。”
以这个世界第一为契机,平时不太接触技术领域的人,也开始了解中国自研的数据库。“我的家人终于知道我是做什么的了。”曹晖感慨说,“更让我高兴的是,他们已经开始给别人讲什么是数据库了。”
杨传辉把OceanBase登顶成功的报道转到了朋友圈,他很快接到了母亲的电话:“你朋友圈里发的那个‘世界第一’是什么?”七岁的女儿也兴致盎然地来问他,他对孩子解释说,这是一个跑得很快很快的东西。
但每一位工程师都清楚地知道,“跑得很快”只是一个优秀数据库的必要条件,而非充分条件。
数据库像个跑车。极限速度取决于发动机,但跑车不仅仅只是一个发动机。OceanBase在TPC-C测试的成绩,证明我们在“发动机”性能方面达到了全球领先水平。但是数据库的综合能力方面,我们还有很大的进步空间。
下一步,OceanBase还要开发更丰富的功能,提升复杂查询的能力,在同一套引擎里既支持OLTP又支持OLAP。此外还要基于上下游产业来营造一整套生态系统。这些就像是跑车的外观、车内设施、配套服务等等,只有全都做好,才能打造出一款顶级跑车。
此外,蚂蚁金服还决定将自己开发用于TPC-C测试的工具开源。这意味着TPC-C将变成一种“普惠”测试。“任何一家公司只要在阿里云上租用资源,用这个开源工具跑测试,然后请审计人员来审计就可以了。”杨传辉说,“关键只在于,你的产品够不够好。”
2018双十一中的OceanBase团队
OceanBase用了九年将自己的产品打磨至此,但创造一个新纪录并不是它最终的目的。更重要的是,它为中国自研的数据库铺平了一条道路。
《蚂蚁金服OceanBase挑战TPCC | 测试流程解析》通过这篇文章可以了解到OceanBase如何做TPC-C测试。