OceanBase数据库创始人阳振坤分享征战6088万tpmC的艰辛之路

简介: 近期,蚂蚁金服高级研究员、OceanBase团队创始人阳振坤受邀在人民大学分享了分布式关系数据库OceanBase如何登顶国际TPC-C benchmark排行榜,并对这一突破背后的技术创新进行了深入的解析。

OB君:中国人民大学常被誉为是“中国人文社会科学的最高学府”,其实人民大学也是“中国数据库的发源地”。由中国人民大学教授萨师煊与王珊合作编写的《数据库系统概论》是国内第一部系统阐明数据库原理、技术和理论的教材,也被公认为是国内数据库领域的经典权威教材。近期,蚂蚁金服高级研究员、OceanBase团队创始人阳振坤受邀在人民大学分享了分布式关系数据库OceanBase如何登顶国际TPC-C benchmark排行榜,并对这一突破背后的技术创新进行了深入的解析。

数据库:技术和市场的“死亡之谷”

数据库的概念最早源自上个世纪60年代。到了70年代,关系模型已经诞生。80年代关系数据库逐渐成为整个社会的信息基础设施。2000年伊始,随着互联网的发展,业务系统对数据库的需求发生了很大的变化。在过去,传统的数据库并发访问量从几百到几千。进入互联网时代后,并发访问量骤增,达到百万至千万的级别。越来越多的公司发现根据现有的并发量和数据量,不仅他们买不起传统商业数据库,而且传统商业数据库也无法容纳和处理他们的数据量和访问量。

_2019_10_23_2_44_36


从2006年开始,大量新的非关系型数据库如雨后春笋般涌出,在整个数据库行业掀起了一场空前盛大的NoSQL革命。最早在 2006年,Google Bigtable发表,随后HBase,HyperTable,MongoDB,Redis相继问世。

火热发展的云计算带来了对更大规模数据库的需求。过去的业务大多类似商场开业,从选址、装修到IT设备的采购,至少需要一个季度甚至半年时间。如今业务部门从采购到上线,时间缩短至数小时,甚至很多业务要求像租用云计算服务一样,能够即拿即用。

云计算改变了已有模式,这时候传统关系数据库的缺点也进一步凸显:不能水平扩展、容量小、处理能力不够、成本又非常高。甚至很多人断言,关系数据库正在走向末路,然而时至今日,关系数据库依然是整个社会的信息基础设施,承载着整个社会重要程度最高、访问量最大的数据。

关系数据库从诞生起已经有几十年的时间了,但基本上它的市场格局没有太大的变化。最早的几家霸主直至今天依然占据着统治地位。关系数据库虽然很重要,但是它在整个IT系统的成本里却并占据非常大的比例。关系数据库处在整个产品或者产业链最底层的位置,替换风险很大,迁移的成本很高,因此非常难以被替换。这就导致了数据库变成了一个门槛极高、强者恒强的领域,后来者很难居上。

谈到关系数据库,准确地说用于在线交易处理的关系数据库,在我看来这是所有软件中最难的。首先一个重要的难点在于它需要支持数据库事务即ACID,其次在于SQL优化器,这两点就占据了数据库中很大部分的工作量。同时,在线交易处理关系数据库的技术门槛也非常高,我们常说有三个“要”:1)既要:数据一条不能错;2)又要:服务片刻不能停;3)还要:交易处理高并发。基于如此高的技术门槛,这也意味着在线交易处理数据库注定是一个非常艰难的领域。

前有先行者挡道、后有NoSQL追赶,在大部分人看来,很多人都觉得这不是做自研关系数据库的好时机。但仔细分析后,会发现这是个千载难逢的好机会。

天时地利人和铸就OceanBase开创性的革新

2010年加入阿里巴巴后,当时很多人都看到单机数据库已经走到了尽头,我想如果能将分布式的核心理论揉到数据库里,解决单机数据库的水平扩展问题,对当时整个互联网的基础设施乃至整个社会的信息基础设施都会是一个非常好的机会。我当时找了几个同学想要一起做这件事,跟我一样,这几个同学都有分布式背景。

尽管研制关系数据库充满了挑战,但我们得到了千载难逢的天时地利与人和的机遇。“天时”是互联网的爆发式增长对数据库的高并发、大数据量提出了很高的需求,而传统关系数据库难以满足这个需求;“地利”是阿里巴巴内部从淘宝到支付宝拥有大量使用数据库的场景,OceanBase可以从不是特别关键的应用场景开始尝试,一步步地将数据库做到关键系统;“人和”是当时单机数据库已经走到了尽头,下一步一定是走向分布式,而当时团队成员大多是分布式技术背景,做的就是自己最擅长的工作。

2010年6月25号OceanBase项目正式立项。项目创立之初,我们给自己定了两个小目标:第一是硬件性价比做到Oracle的十倍,第二是做到可水平扩展,因为这是OceanBase的根基。

传统数据库常常被人诟病,因为它有两个本质的缺陷:首先是传统的OLTP数据库不能水平扩展。由于不能水平扩展,机器只能越做越大,价格甚至几何级数的增长。

_2019_10_23_2_44_41


第二就是主库备库的数据不一致。主备镜像无法做到数据可用性跟一致性两全:主库备库的完全一致意味着每一笔事务都得从主库同步到备库,备库确认后才能应答。假如这中间网络出现问题,或者备库出现问题,所有的同步都会被堵塞,也就是所有的写操作都无法进行。因此主库一旦出问题,数据是有损的,所以企业只能买最可靠的设备,从四个九到五个九,就是为了让这些机器不出一点问题,可想而知这样的设备肯定便宜不了。不论是软件还是硬件都便宜不了,服务自然也便宜不了,这就导致数据库成本非常高。

_2019_10_23_2_44_45

如果分布式数据库是一条康庄大道,这条路可能早就被无数人踏过。分布式OLTP数据库其实是一条非常难走的路,因为分布式数据库的一个核心问题就是单机故障会引起整库故障。随着机器规模的增大,机群故障率会指数级的提高。由于主备镜像无法做到数据可用性跟一致性两全,因此无法采用主备镜像或类似手段解决分布式数据库的节点故障的问题。

对于银行和企业的业务来说,可用性跟一致性是一个生死两难的问题,要保证同步,就面临着业务不可用的风险。所以银行往往会购买可靠性更高的存储和服务器等硬件。可靠性高的硬件自然价钱也非常高昂。

因为分布式里每一个节点在任何时刻都可能会故障,不管这个节点本身的可靠性有多高,它都有故障的可能性。一直以来,我们工作的重点之一,就是围绕如何提升分布式整体的可用性。如果解决了这个问题,不再需要高可靠的硬件,也不用在意主备库是否一致和水平扩展的问题,很多问题都能引刃而解。

所以OceanBase采用了Paxos分布式一致性协议,它也是OceanBase整个分布式数据库里最核心的基础之一。它本质上解决的一个问题就是用不可靠的成员来提供可靠的服务。也就是哪怕单个节点不可靠,只要大部分节点正常工作时这个系统就能正常工作。传统数据库中五个九的设备非常昂贵,OceanBase则基于普通的PC服务器,且不要求设备有很高的可靠性,只要两个九到三个九,整个系统就能够工作得很好,这一创新的技术突破大大提升了性价比。

那么,OceanBase是如何用Paxos协议来做成这件事?我们前面简单分析过,不可能既保证高可用,又保证主备库完全一致,因为这两个需求是矛盾的。然而Paxos协议却提供了一个迂回的解决方案,即多数派。举例说明,主库中的每一条日志会同步给两个备库,只要有一个备库收到,就能达成一个多数派协议。简而言之就是三者中有两个同意,少数服从多数,就认为这件事情成功了。那么这种情况下,任何一个节点坏掉,刚才的这笔事务也至少会在剩下两个节点中的其中一个节点有。所以哪怕是主库故障了,那么两个备库会互相握手,相互把缺失的数据快速补齐。这个恢复的时间,OceanBase通常不会超过30秒。

_2019_10_23_2_44_49


有同学肯定会问,你们用的都是廉价的服务器,万一三台中坏了两台怎么办?虽然在实际生产中三台坏两台的概率特别小,但是其实也有过类似的事故。所以接下来在生产系统中,大部分都换成了五节点。五个节点里需要有三个日志写成功,这种情况下,即使同时坏了两个节点,生产系统也完全不受影响。虽然提高了成本,但是比起整个系统的可用性来说,是一个能够接受的代价。

接下来就是怎么解决分布式事务的问题。分布式事务两阶段提交模型虽然看起来相当美好,但是实际上一旦节点在第二阶段出现故障,则事务既无法提交也无法回滚,只能被挂起,在实际生产系统中,这会导致数据库的连接迅速被耗尽,从而使得服务中断。OceanBase做了一个小小的改变:我们把原来的每一个物理节点换成一个Paxos组,相当于换成一个虚拟节点,这个虚拟节点背后有三/五个物理节点。根据多数派成功协议,三/五个节点里有两/三个节点写成功这个事务就被判定为成功。实际上使用了这样一种方式解决了我们提到的万一有一台机器故障,两阶段提交就没办法推进下去的问题。我们就是通过这样一些看上去相对简单的方式解决了分布式事务的问题。

其实,无论是主库备库不一致还是分布式事务的缺陷,根本的原因是传统关系数据库软件自身高可用的缺失,即传统关系数据库都是通过外部硬件来保证可用性,而没有从数据库系统内部来解决问题。

OceanBase征战TPC-C的艰辛之路

TPC-C benchmark诞生于上个世纪80年代,ATM自动提款机问世以后,数据库厂商都希望推销自家的在线交易处理系统。各个数据库厂商在在线交易处理的benchmark上各自为政,一直没有一个统一的规范,既缺乏足够的说服力,用户也无法在各个系统之间进行参照和对比。

就在这时,Jim Gray联合多位学术界、工业界的权威人士提出了DebitCredit标准。标准虽然出台了,但是数据库厂商却并没有严格按照标准测试,而是肆意篡改标准让自己跑出更高的结果。这就好比有了法律却没有执法的队伍,每个人都按照自己的理解来解释法律和执行法律。

Omri Serlin非常了不起,他说服了8家公司成立TPC组织,并且制定了TPC系列标准,相当于立法;同时TPC组织还负责监督审核测试过程和测试结果,相当于执法。从这之后,数据库领域各自为政的benchmark才有了一个统一的标准。

目前,TPC-C benchmark在国际上被认为是最重要、最权威的标准之一。TPC-C模型本身看起来很简单,就是五种事务的模型。但即使在今天在各个行业,包括电子商务、银行、商场、交通、通信、政府、企业里等等这些业务的抽象依然都是TPC-C模型。

_2019_10_23_2_44_54


当我们完成了TPC-C的优化工作以后,我们发现今年双11的OceanBase的性能目标已经提前达成,这也是因为TPC-C是实际生产系统很好的抽象,尽管实际的生产系统更复杂。TPC-C制定了五种事务的百分比,分别是:订单创建(<=45%)和订单支付(>=43%)以及订单查询、订单配送和库存查询各(>=4%)。其中,还有一些限制,比如规定每个Warehouse最多只能贡献12.86tpmC(tpmC即订单创建每分钟所执行的数量)。所以这会导致一个直接的结果,性能与数据量成正比,也就是要跑更高的性能,自然需要更多的仓库。每个仓库的数据大概是70MB,同时TPC-C还要求满足60天压测的存储容量。OceanBase跑了6088万tpmC,对应的存储空间是PB级别的。

TPC-C的测试和审计是一个特别严格的过程,OceanBase团队前前后后花了接近一年的时间才完成。TPC-C审计要求首先做功能的验证,也就是数据库事务的ACID。等功能验证通过了以后,才能跑性能。跑性能则有两个要求:第一,要求8小时稳定运行,没有任何人工干预的运行;第二,性能采集至少进行2小时且期间的性能波动不超过2%。这些都是实际生产系统的要求。

整个测试不限硬件和软件,只要能够通过测试(需要公开系统组成和价格)。

TPC-C benchmark记录分为几种:in-review,active,history。当结果刚做出来,审计通过之后,在网站上的状态是in-review,即公示期,这个公示期是60天。在公示期之内,任何人都可以对该结果提出质疑,测试厂商必须要解释清楚这个质疑,甚至有可能再跑一遍benchmark。与此同时,TPC也规定一旦进入in-review的状态,厂商已经可以对外宣传。当然与此同时,厂商也需要承担一定的风险:如果最后的结果被人质疑并且没有通过,这个结果是会被撤销的,被撤销的结果在TPC网站上是查不到的。

_2019_10_23_2_45_01


所以在整个测试过程中,OceanBase用的都是最最保守的方式,用最高的要求,比如性能采集,OceanBase使用的不是2小时而是8小时,在整个8小时中性能波动不是<2%而是<0.5%,这使得OceanBase最后测出的性能曲线几乎是一条直线。全球一共有3位TPC-C的审计员,都在美国,这次OceanBase的TPC-C测试是由其中的两位审计员联合审计通过。

还有一种记录是active,就是公示期结束之后的结果,这时用户可以用披露书上价格买到整套系统。另外一种记录是history,记录依然是有效的,但由于时间等原因系统的部分组件(特别是硬件)不再有售,因此整套系统不再完整有售。

肯定会有人好奇,在整个TPC-C的历史上, IBM也曾经高居榜首几个月,然后很快被Oracle超过了。为什么Oracle结果已经出来九年多了,这个期间没有厂商测出更高的tpmC,包括Oracle自己?

第一个原因是测试TPC-C benchmark的投入。进行TPC-C测试需要投入人力和物力,传统数据库厂商要测出一个较高的tpmC,高端服务器和高端存储是一笔不小的投入。这个投入不是披露书中的成本,后者是整个系统三年的总体拥有成本,比如OceanBase披露的大约是3.8亿,这实际上是整个系统三年所有的成本,包括软件、硬件和服务的总体拥有成本。得益于阿里云公有云虚拟机的按需租赁,OceanBase实际的测试成本跟这个三年总体拥有成本相比有不止一个数量级的差距。

第二个原因是即便参与,如果最后的结果依然不如Oracle,主流厂商很可能宁可不测。没有挑战,那么Oracle自己也没有必要和动力去刷新这个记录,况且做更高的tpmC至少要花千万计的美元,是一个不菲的成本。Oracle在这9年多的时间也不是什么都不做,它至少做了两件事:第一,2012年Oracle用X2-8 x86Server单机测出500万tpmC,第二,又过了一年,2013年Oracle用T5-8 SparcServer单机测出850万tpmC。Oracle在测出3000万tpmC时用了27台服务器的RAC,500万tpmC乘以27,甚至850万乘以27,哪怕结果做不到线性,也会是一个上亿的结果。竞争对手如果没有把握,就不会轻易去挑战。OceanBase之所以敢于挑战,就是因为自身的分布式水平扩展能力,而RAC的有效节点数是十分有限的。

坦率的说,OceanBase跟Oracle比在功能上还有不小的差距,单机的性能也有距离, OceanBase最大的优势是可以用多个廉价的服务器达到昂贵高端硬件所能达到的极致性能以及更高的可用性。

从OceanBase立项第一天起,我们的目标就是做一款通用的数据库。当我们在解决了内部用得好的问题以后,我们就把更多的精力投入到外部市场上。所以OceanBase自2017年对外商用以后,今天已经在几十家商业银行落地应用。
未来,OceanBase还有很长的路要走,比如在走访客户的过程中我们发现,绝大部分业务既需要OLTP又需要OLAP,而这正是OceanBase的产品目标:同时支持OLAP和OLTP,即HTAP。TPC-C是一个很好的起点,我们也希望基于这个起点能够不断磨砺产品,让这样一款通用型的数据库未来能够为整个社会提供更好的服务。

《OceanBase TPC-C测试技术解析》电子书

_2019_10_14_7_00_31


OceanBase 登顶TPC-C测试榜实现中国数据库零的突破,想要了解背后的技术细节?
欢迎下载电子书《OceanBase TPC-C测试技术解析》
长按识别以下二维码,关注“OceanBase”官方公众号并在对话框内回复“TPCC”即可免费下载

_

相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
3月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
313 0
|
1月前
|
SQL 存储 人工智能
OceanBase CTO杨传辉谈AI时代下数据库技术的创新演进路径!
在「DATA+AI」见解论坛上,OceanBase CTO杨传辉先生分享了AI与数据库技术融合的最新进展。他探讨了AI如何助力数据库技术演进,并介绍了OceanBase一体化数据库的创新。OceanBase通过单机分布式一体化架构,实现了从小规模到大规模的无缝扩展,具备高可用性和高效的数据处理能力。此外,OceanBase还实现了交易处理、分析和AI的一体化,大幅提升了系统的灵活性和性能。杨传辉强调,OceanBase的目标是成为一套能满足80%工作负载需求的系统,推动AI技术在各行各业的广泛应用。关注我们,深入了解AI与大数据的未来!
|
3月前
|
Oracle 关系型数据库 MySQL
OceanBase 与传统数据库的对比
【8月更文第31天】随着云计算和大数据技术的发展,分布式数据库因其高扩展性、高可用性和高性能而逐渐成为企业和开发者关注的焦点。在众多分布式数据库解决方案中,OceanBase作为一个由阿里巴巴集团自主研发的分布式数据库系统,以其独特的架构设计和卓越的性能表现脱颖而出。本文将深入探讨OceanBase与其他常见关系型数据库管理系统(如MySQL、Oracle)之间的关键差异,并通过具体的代码示例来展示这些差异。
258 1
|
3月前
|
关系型数据库 OLAP 分布式数据库
揭秘Polardb与OceanBase:从OLTP到OLAP,你的业务选对数据库了吗?热点技术对比,激发你的选择好奇心!
【8月更文挑战第22天】在数据库领域,阿里巴巴的Polardb与OceanBase各具特色。Polardb采用共享存储架构,分离计算与存储,适配高并发OLTP场景,如电商交易;OceanBase利用灵活的分布式架构,优化数据分布与处理,擅长OLAP分析及大规模数据管理。选择时需考量业务特性——Polardb适合事务密集型应用,而OceanBase则为数据分析提供强大支持。
961 2
|
9天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
24 1
|
11天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
27 4
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
18天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
85 1
|
20天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
61 2
|
23天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
90 4

热门文章

最新文章