阳振坤:OceanBase 数据库七亿 tpmC 的关键技术

OB君:2020年9月25日,OceanBase在外滩大会举办的“数据库,新标杆,新征途”分论坛正式落幕,内容涵盖数据库的趋势探讨、分布式数据库的技术创新与行业应用,及国内数据库的发展与生态。欢迎持续关注本系列内容~

北京奥星贝斯科技有限公司 CTO 兼 OceanBase 数据库创始人阳振坤,在外滩大会上分享了《OceanBase 数据库七亿 tpmC 的关键技术》的主题演讲,以下为演讲实录:

 

联机事务处理(OLTP)系统

很多人都清楚事务的 ACID 特性,知道事务要满足原子性、一致性、隔离性和持久性,这是从数据库本身的角度来看。但是,如果站在业务的角度,客户对数据库其实有更高的要求,第一个要求是数据不能错,交易数据是企业所有数据的基础,是最核心的数据,这是企业的命脉。

企业的命脉.png

第二个要求是服务不能停,比如最早期的支付宝在后半夜没有业务访问或者业务访问量很少,如今支付宝24小时都有访问,每日高峰的时候峰值甚至比早年的双11还高。所以服务是永远不能停的。

第三个要求是事务高并发处理能力,因为很难预算出有多少用户在同时使用,所以这就需要数据库有高度并发处理的能力。全世界有非常多的数据库厂商,近年来也进入了国产数据库的繁荣时期,但是翻过这座山真正能够把这套系统做到生产中使用的其实少之又少。

 

TPC-C 基准测试

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

TPC 组织的创始人 Omri Serlin 说服了8家公司成立 TPC 组织,共同制定数据库的系列 benchmark 测试标准并对测试过程和结果进行审计和认证。TPC-C 是其中的联机交易处理的测试标准,也是国际上最重要最权威的测试标准。TPC-C 模型本身看起来似乎很简单,也就是九张表、五种事务。但正是这个看似简单的模型,却很好了抽象了直到今天的各个行业业务系统,包括电子商务、银行、商场、交通、通信、政府、企业等等。

TPC-C 的测试和审计是一个特别严格的过程。TPC-C 审计要求首先做功能的验证,也就是数据库事务的 ACID,功能验证通过了才能跑性能。跑性能则有两个要求:第一,要求8小时稳定运行,没有任何人工干预;第二,性能测试至少进行2小时且期间的性能波动不超过2%。这一定程度上证明了系统的稳定和可靠性。

过去从来没有分布式数据库做过 TPC-C 测试。鉴于 OceanBase 存储架构的特殊性,OceanBase 的性能测试是8小时而不是通常的2小时,因此整个8小时中性能波动不能超过2%。

整个8小时中性能波动不能超过2%。.png

可能有人会说,我可以用很少的数据也能跑出很高的性能,这个数据可以在 CPU 的缓存里,但这是 TPC-C 所不允许的,因为 TPC-C 测试对应的是实际业务场景。在实际业务中,用户数越多,性能越高,数据量也越大。所以,TPC-C 要求性能与数据量成正比。这里我们需要提到 TPC-C 的一个基本概念——仓库,每个仓库最高只允许12.86个tpmC,大致换算一下,相当于一个 tpmC 对应5.44MB的数据。

另外有一个看起来很宽松的要求,不限制测试的软件和硬件的版本和型号,也不限制软件硬件的数量和规格,但配置和价格必须是公开的,且在市场上可购买的。那么有人会问是否只要堆越多的机器,就能达到越高的性能呢?对于交易处理系统,其实并没有这么简单。

 

为什么没有分布式 OLTP 数据库产品?

很多人大学里学过分布式事务,有人说两阶段提交如果2台机器能够做,3台、4台、5台机器也能做,那么用100台、1000台机器,是否就能跑出更高的性能?

可能很多人没有仔细去想这件事,分布式事务两阶段提交其实是理论上的结果,而且这基于很强的假设——假设硬件不出故障,尤其存储不出故障。

那我们看看下面这个模型,假设 A 给 B 转 100 元钱,原来 A 有 900 元,B 有 500 元,转账后应该 A 有 800 元、B 有 600 元,这是很简单的一个流程:第一阶段做准备工作,检查一下 A 账户是否正常,同时检查 B 帐户是否正常,任何一个不满足转账条件,转账交易就要被取消,如果两个账户都正常,那就通知 A 扣 100 元,通知 B 加 100元。

通知 B 加 100元。.png

这个过程看起来一切都很正常,但是如果其中有一个结点比如 A 这个结点坏了,这怎么办?B 这个结点的 100 元加还是不加,仔细分析加也不对,不加也不对。假如 A 彻底坏掉了,就没有人知道它曾经做过这笔交易,如果 B 加了这 100 元,A 这里没减,这个帐就不平了。那反过来如果 A 这个节点过一会儿又正常了,B 这个节点不加这 100 元也不对,因为 A 的 100元减掉了,B 的100元没有加。那么看起来很简单的一件事,其实做起来就变得很困难。所以事务处理不是简简单单靠堆机器就可以堆出来的。

那么,又有人会问如果给这两个结点各建一个备库,出了问题用备库来顶上行不行?答案也是否定的。因为主备镜像无法做到主库与备库完全一致,你要想做到完全一致,意味着每一笔事务都需要从主库同步到备库,这时候整个系统的可用性的链路变长了。对于银行和企业来说,这是一个生死两难的问题,要保证同步,就面临着业务不可用的风险。所以,主备一致性与服务可用性两者不可兼得。

 

OceanBase 的诞生契机

我们前面讲了,交易型数据库很难做,而且做了市场上很可能没有用户敢用,何况它的各方面投入也会很大。而 OceanBase 的诞生和发展得益于有了千载难逢的天时地利与人和的机遇。

千载难逢的天时地利与人和的机遇。.png

“天时”是互联网的爆发式增长对数据库的高并发、大数据量提出了很高的需求,而传统关系数据库难以满足这个需求;“地利”是阿里巴巴内部从淘宝到支付宝拥有大量使用数据库的场景,OceanBase 可以从不是特别关键的应用场景开始尝试,一步步地将数据库做到关键系统;“人和”是当时单机数据库已经走到了尽头,下一步一定是走向分布式,而当时团队成员恰好具备分布式技术背景。这几个条件一起促成了 OceanBase 的诞生。

 

OceanBase 的技术架构

多数派(Paxos)协议

分布式数据库一定会面临分布式事务,面临两阶段提交,普通两阶段提交解决不了这个问题,也分析过之所以出问题是因为对节点的可靠性做了假设。可以回想一下,如果刚才两阶段提交中结点都不出问题,那么两阶段提交是可以工作的。

那么两阶段提交是可以工作的。.png

OceanBase 是怎么解决这个问题的呢?OceanBase 的做法是在原有的基础上增加一个备库,主库同步事务到两个备库,只要一个备库收到,加上主库自己至少两个库收到,这样如果两个备库相当于三个结点三个副本,如果四个备库相当于五个结点五个副本。你坏一个甚至两个结点,数据还在,整个系统可以正常完成两阶段的提交工作。

OceanBase 分布式事务实现

我们以三个结点三个副本为例,哪怕坏了一个结点,剩下两个结点每一笔事务至少在其中一个结点上存在,那么可以利用这一点把刚才没有进行完的事务或者进行中的事务恢复出来,只要恢复出来事情就可以做下去,两阶段的提交就可以正常结束。

两阶段的提交就可以正常结束。.png

 

三代 TPC-C 排行榜榜首

去年 OceanBase 第一次 TPC-C 测试之后,有一些的噪音,大家说你跟九年前的结果比算不了什么,其实是这些人并不了解 OceanBase 登顶背后的真正意义。

OceanBase登顶背后的真正意义。.png

OceanBase 的 TPC-C 测试的立项是2018年8月16日,立项前讨论这个事情的时候,大家有一定的担心,因为从人力物力各方面来看都是比较大的投入。讨论之后定了两步走的策略,第一步做小一点的规模,目的是把这条路先走通,因为当时全世界还没有厂商用分布式数据做过 TPC-C 测试。后来用了200多台的数据库服务器,经过半年多的时间,最终通过了这个测试。TPC-C 委员会的人对于传统的集中式数据库很熟悉,但分布式事务处理数据库,他们也没有接触过。

第一次 TPC-C 测试通过之后,第二次测试的准备就开始了。因为有了第一次测试的经验,第二次的测试结果是在意料之中的。或许有人会问集中式数据库是否还能跑出更高的性能?众所周知,数据库的性能,受制于两个瓶颈,一个是 CPU,另一个是 IO。三代 TPC-C 榜首中,第一和第二代的榜首是传统数据库的代表。第三代榜首是 OceanBase,达到了7亿多 tpmC,比二代高了一个数量级。在分布式环境下,OceanBase 的存储是本地盘,这个 IO 能力比共享存储的万兆网卡要更强,最关键是没有数量上的限制,无论是 CPU 还是硬盘数量。

 

新一代 HTAP 原生分布式关系数据库

讲到这里,可能会有人说,分库分表也可以解决你说到的类似问题。是的,确实会解决一些问题,但有些是很难解决的,比如分库分表后是多个数据库,这多个数据库要保持 ACID 就非常困难。如果原来的数据库是单一数据库,就需要重新设计和规划整个系统。有人混淆分布式数据库的概念,把分库分表也叫分布式,但其实它不是分布式数据库,因为它是多个数据库而不是一个数据库,也不满足 ACID 。

也不满足ACID.png

分库分表方案缺乏全局索引和唯一ID,因为它不再是单个数据库。还要对业务做拆分,有个拆分维度,比如买家维度,那么业务上需要对卖家的维度进行处理怎么办?因为卖家的信息会遍布所有分库,如果做简单的统计还可以进行,但如果涉及事务的处理是没有办法进行的。分库分表方案虽然可以解决一些问题,但也带来更多的挑战,更大的复杂性和更高的成本。

作为一款原生分布式关系数据库,OceanBase 本身可以做到水平扩展,不需要重新拆分业务,我们可以在主库做交易处理,在备库做数据分析处理。甚至在未来可以在主库上同时完成交易和分析的处理。这一技术上的革新很好地克服了分库分表方案的弊端。

分库分表方案的弊端。.png

 

原生分布式是数据库的未来

如今的海量数据处理系统,不论是大数据系统还是数据仓库,它们都是分布式——原生分布式。但是我们再看关系数据库尤其是 OLTP 数据库,目前它仍然是单机/集中式的。不是 OLTP 数据库不需要分布式,而是分布式的 OLTP 数据库的研制非常困难。

有很多客户说,分布式是很好,但是今天分布式的生态不够成熟,不如集中式数据库的生态。回想起150年前,汽车刚刚被发明,马车还是最主流的交通工具,当时在马路上优先通行的是马车,汽车也没有生态。而到了2020年的今天,作为主流交通工具的马车已经成为远古的过去,汽车早就成为了不可逆转的主流。

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数百万台车联网设备同时在线0故障,中瑞集团的云原生探索之路 | 云原生Talk

简介: 在保持对业界趋势调度关注的同时,始终选用最适合自身的技术,这可能是中瑞能在车联网领域引领行业的重要原因之一,正如中瑞CTO所说“阿里云云原生产品体系带给我们的,不是单纯的IT工具,而是整个团队战…

mysql主键重复会覆盖还是_mysql如果主键重复了会发生什么情况

首先创建一个person表:create TABLE person(id int not null auto_increment,name VARCHAR(255) ,age int,PRIMARY key (id))同时打开两个sql窗口set autocommitoff;set id-1;SELECTauto_increment into idFROMinformation_schema.TABLESWHEREtable_name personAND…

终止中台乱象 《2021年中国中台市场研究报告》隆重发布

2015年,阿里提出“大中台,小前台”的战略,帮助一线业务更敏捷地适应市场变化。随后,多家互联网巨头纷纷布局中台战略,中台概念由此全面打响。 通过中台,可以打通数据孤岛,实现快速响应、智能预…

Flink State 误用之痛,你中招了吗?

简介: 本文主要讨论一个问题:ValueState 中存 Map 与 MapState 有什么区别?如果不懂这两者的区别,而且使用 ValueState 中存大对象,生产环境很可能会出现以下问题:CPU 被打满、吞吐上不去。 本文主要讨论一…

Dubbo-go 源码笔记(一)Server 端开启服务过程

简介: 随着微服务架构的流行,许多高性能 rpc 框架应运而生,由阿里开源的 dubbo 框架 go 语言版本的 dubbo-go 也成为了众多开发者不错的选择。本文将介绍 dubbo-go 框架的基本使用方法,以及从 export 调用链的角度进行 server 端源…

mysql怎么多重查询_mysql基于值的多重查询

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

华为在中国建立其全球最大的网络安全透明中心

2021年6月9日,华为最大的网络安全透明中心今天在中国东莞正式启用,来自GSMA、阿联酋、印尼的监管机构及英国标准协会、SUSE等机构代表出席并在活动上发言。借此机会,华为发布了《华为产品安全基线》白皮书,首次将产品安全需求基线…

浅析云控平台画面传输的视频流方案

简介: 本文将小结本次云控平台画面传输的视频流方案。 背景 ARC(高德车机云控平台)是一个基于车载设备业务深度定制的云控平台,通过该平台我们能够实现远程使用不同类型的车载设备。为了让远程使用者像在本地一样使用车载设备&am…

解读云原生基础设施

简介: 云原生是云计算领域的热点之一。就像 “一千个人眼里有一千个哈姆雷特”,大家对"云原生"的定义也见仁见智。本文将介绍云原生应用架构和生命周期管理的进化方向。 作者 | 易立 阿里云资深技术专家 导读:云原生是云计算领域的…

mysql al32utf8_Oracle 11g更改字符集AL32UTF8为ZHS16GBK

Oracle 9i更改字符集AL32UTF8为ZHS16GBKSQLgt; conn /as sysdba SQLgt; shutdown immediate; SQLgt; startup mount SQLgt; A首页 → 数据库技术背景:阅读新闻Oracle 11g更改字符集AL32UTF8为ZHS16GBK[日期:2011-04-26]来源:Linux社区作者&am…

共筑全场景智慧生态,华为HMS全球应用创新大赛火热开启

6月10日,2021华为HMS全球应用创新大赛(Apps UP)正式启动。此次大赛以“HMS Innovate For All”为主题,激励全球开发者集成华为HMS Core开放能力开发创新应用,打造全场景数字创新体验,为全球消费者带来全场景…

2020-11-06

一、背景介绍 (一)流平台通用框架 目前流平台通用的架构一般来说包括消息队列、计算引擎和存储三部分,通用架构如下图所示。客户端或者 web 的 log 日志会被采集到消息队列;计算引擎实时计算消息队列的数据;实时计算…

移动端堆栈关键行定位的新思路

简介: 崩溃堆栈是我们日常应用问题排查中的重要辅助手段,在移动开发上也不例外,为了支持用户在堆栈上的快速定位,我们面临一个看似比较简单问题:高亮崩溃中的关键行, 辅助用户快速定位问题。 阿里云 云原生应用研发平台…

mysql exists in join_子查询、left join、 exists 替代 not in

如果要实现一张表有而另外一张表没有的数据时,我们通常会这么写:SELECT id FROM user WHERE id NOT IN (SELECT id FROM student)not in不会走索引, 可以用exists替代SELECT id FROM user WHERE NOT exists (SELECT id FROM student WHERE user.id stud…

华云数据升级发布“信创云基座“ 用“全芯全栈”支持“信创强国”

2021年6月10日,北京——2021年是我国“十四五”规划的开局之年,也是我国“加快数字发展 建设数字中国”的关键之年。值此历史交汇的关键点,云计算、大数据、人工智能、物联网、工业互联网、区块链等重点产业将对国家数字经济发展起到巨大推动…

最IN的云原生架构,阿里云 Serverless 事件总线 EventBridge 重磅发布

简介: Serverless 是云计算下一个10年的主要形态,通过大量端到端的整合和云服务的集成,能极大地提高研发效率。了解阿里云 Serverless 产品家族的最新进展,包括函数计算FC、Serverless应用引擎SAE和 Serverless事件总线EventBridg…

智能技术改变淘宝,阿里巴巴首次详解核心商业AI体系

简介: 双11背后的万亿人次商品需求:淘宝创造新一代智能科技,淘宝成为超大规模智能APP,前沿科技重塑双11人货场。 图:淘宝APP已成为超大规模智能APP “淘宝APP已成为超大规模智能APP。”阿里巴巴集团资深副总裁周靖人11…

wow mysql dbc_DBC中悲观锁介绍附案例详解

DBC中悲观锁介绍附案例详解了解下DBC中悲观锁:代码如下:BDUtils 工具类:package JDBC;import java.sql.*;public class BDUtils {private BDUtils() {}static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoun…

融云任杰:强互动,RTC下一个“爆点”场景|拟合

从无序中寻找踪迹,从眼前事探索未来。 2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

直面最大挑战双11 阿里数据中台为商家带来确定性保障

2020双11将成为史上最具科技含量的一届双11。 11月3日,在阿里巴巴双11技术沟通会上,阿里巴巴集团首席技术官程立公布了大规模运用于2020双11的十大前沿技术,既有基于数字技术的原生商业创新,也有引领时代的基础技术突破。 阿里巴巴…