OceanBase这两天霸屏朋友圈!
一派是浮夸的宣传,超越Oracle,世界第一,过度解读,全面否定对手,引起了技术圈内人士的反感,因为刷新TPC-C纪录并不能说明OceanBase现在就超越了Oracle。
另一派则是并不客观的质疑,不仅武断的认为OceanBase性能测试结果是靠硬件堆出来的,还臆测再测一次,Oracle拿第一不是难事,而且数字应该远不止两倍;其结论不仅缺乏证据,而且对分布式数据库和TPC-C标准缺乏基本了解,略有误导之嫌;
在以前的文章中,我就曾经说过,虽然,我们不能盲目崇信跑分,但跑分的确是一种比较直观反映软硬件性能的方式,尤其是数据库这种性能测试非常复杂的产品。
我们应该如何理性看待OceanBase刷新TPC-C纪录?我认为搞技术还是要讲究事实,要理性看待还原事实。
刷新TPC-C纪录NB吗?
每个数据库厂商都试图向客户证明自己的系统性能最好、处理能力最强,但数据库厂商各自的性能测试数据没有足够的说服力。
而TPC-C作为一个OLTP联机交易处理系统的benchmark是世界最权威的测试基准,这点相信数据库圈内人士没有异议,实际上,要想通过TPC-C并且拿到高分非常难,这是事实。
作为一个广泛接受的标准,TPC-C是严谨的并极大地杜绝了作弊。
TPC-C要求被测数据库必须满足数据库事务的ACID,即原子性、一致性、隔离性和持久性,其中隔离性为可串行化隔离级别,持久性要求能够抵御任何单点故障等。
其次,TPC-C规定被测数据库的性能(tpmC)与数据量成正比。
第三,TPC-C要求被测数据库能够以平稳的性能长期地运行。去掉启动预热(ramp up)和结束降速(ramp down)时间后,被测数据库至少要性能平稳地(steady state)运行8小时,其中性能采集时段(不少于2小时)内的性能累积波动不得超过2%。
第四,TPC-C要求被测数据库的写事务的结果必须在一定时间内数据落盘,对于具备checkpoint功能的数据库,checkpoint的间隔不得超过30分钟,checkpoint数据持久化的时间不得超过checkpoint间隔。
在国内,金融,电信,政府等行业POC都以TPC-C为性能测试基准,通过TPC-C,意味着拿到了这些企业的准入证明,刷新纪录则意味着商业化之路上竞争优势的提升。
因此,随着这些年在数据库技术上不断取得突破,越来越多的国内数据库厂商开始打榜TPC,在我看来是一种好事,凸显的是一种自信,同时也说明国产数据库与国外数据库之间的差距在缩小。
当然,要想全面超越Oracle,无论是OceanBase还是其它国产数据库,还有很长的路要走,超越不能靠YY,不要过分解读,但也不需要刻意低调。
2013年后为何打榜的数据库公司变少?
我认为有三个原因:
第一,这个时间点Oracle在市场上已经全面领先对手DB2;
第二,Oracle和DB2性能太强,导致其他玩家没机会进入前几名,直白的说,进不了前几名就得不到关注,测了也是白测;
第三,测试成本太高,要在完整的TPC-C测试中获得一个高分结果,需要高昂的硬件成本,这也是榜单大部分测试主导方是硬件厂商的原因;
TPC-C测试模型过时了吗?
TPC-C标准是1992年发布的,因此,成为一些人质疑的焦点。但TPC-C能成为数据库OLTP测试领域事实上的最权威标准,恰恰是因为它还原了企业需求真实的应用场景,极具代表性。
简单的说,TPC-C模拟了一个大型的在线商超业务模型,它有一个WEB站和分布在多个地域的仓库,每个仓库服务临近的10个区域的客户,每个客户通过一个收银点下单购买商品,有10%的可能这单订单里本地仓库无货需要远程调货,同时所有订单有后台异步的物流交付。结合当前,这个模型恰好就是现在的大型B2C电商网站。
所以,经典的测试模型并不过时,只是换了一种形式映射到现实生活。
另外TPC-C标准也并不是墨守陈规,从92年提出以来一直在不断修订,最新一版v5.11.0是2010年发布的。
堆硬件就可以跑出6000多万tpmC?
仔细研究TPC-C测试标准,就能很清楚的知道,TPC-C测试标准制定者已经提前预见到了这点,强制的分布式事务、数据访问应用透明要求等诸多限制,让通过简单的堆砌硬件就想提升性能的可能趋近于零。
另外,数据库作为基础软件,目的就是要充分榨取底层硬件的性能并提供给上层应用,尤其对于分布式数据库来说,能够通过堆硬件带来线性性能提升更是理想的目标,分布式架构的精髓就是基于廉价的PC Server来做Scale Out。而这是TPC-C榜单中Oracle RAC这种架构无法解决的。
TPC-C测试结果应该怎么看?
TPC-C测试最终评价的标准其实就两个:整体性能tpmC以及性价比price/tpmC。
错误的质疑,源于并不清楚这2个核心指标,而是片面的关注总成本。
OceanBase总成本:380,452,842人民币,性能60,880,800 tpmC,性价比是每tpmC 6.25人民币。
Oracle总成本:30,528,863美元≈213,702,041人民币,性能30,249,688 tpmC,性价比是每tpmC 1.01美元≈7.07人民币
其实,总成本分为软件部分和硬件部分,我在向蚂蚁金服研究员、OceanBase主架构师杨传辉(日照)核实后确认,OceanBase的价格中,硬件部分占比约18%,Oracle的价格中硬件部分占比约76%。
OceanBase价格高是因为软件定价,其定价策略是,比Oracle低一点。
OceanBase真就完美吗?
企业级数据库的关键技术点在于可靠性和扩展性,TPC-C测试的前提是RPO为0确保不丢数据。
目前有三种实现方案:
第一种是IBM DB2,通过提升单机能力扩展,小型机不行就大型机,这种方案的问题在于价格和处理能力不是线性的;
第二种方案是共享存储,Oracle测试使用的RAC方案就是这种架构,这个架构的问题在于扩展能力有限,最大扩展到几十台机器;
第三种方案是分布式数据库,代表作是OceanBase和Spanner,这种方式基本做到了线性扩展,但需要存储多个副本。通过PAXOS协议强同步,存储成本翻倍,CPU使用也要往上翻。
这里凸显的是TPC-C科学的一面,不限制软件架构和硬件架构。
Oracle不支持PAXOS三机强同步,因此,无法采用和OceanBase一样的架构实现rpo为0,一定需要依赖共享存储来实现不丢数据。因此,在rpo为0的约束下,本质上OceanBase和Oracle只能使用不同的架构。
Oracle共享存储成本高,但硬件很可靠,只需要一个副本;OceanBase使用普通PC Server,单机成本低,但必须存储多个副本并打开在线压缩,这会大幅增加CPU和存储空间。
因此,如何选择,相信用户会有自己的判断力。