阳振坤:数据库自然选择了计算机,但计算机自然并不适合数据库

2018年6月25日,清华大学计算机科学与技术系60周年系庆系列讲座第11场报告在清华大学东主楼举行。蚂蚁金服高级研究员、OceanBase负责人阳振坤在本次学术报告中发表了题为《OceanBase每秒处理25.6万笔支付的技术关键》的主题演讲。

阳振坤以行业趋势为切入点,对蚂蚁金服自研的金融级关系型数据库OceanBase的发展历程和技术突破点进行了深度剖析。数据库

本文整理自演讲内容:性能优化

在互联网世界里,存在着一种怪圈:本地企业为了向本地人群推销本地产品,却天天都在源源不断地把广告费输送给境外公司。在美国,有这么几家巨无霸公司,诸如Google、Amazon、Facebook等,已经逐渐垄断了欧洲和日本的互联网应用相关市场。服务器

而反观中国,咱们有本身的电商网站(淘宝天猫等),本身的搜索引擎和社交应用(微信,微博等)。咱们是否能够自信的说,咱们真的达到了国际一流的技术水平?从互联网应用的角度来看,中国制造的应用在形态上不断演变,不断丰富,咱们认可本身确实已经作得比较优秀。可是,在核心基础部件上,咱们还有很长的路要走。微信

今天,从大范围广泛使用的角度来看,中国还不能说真正有本身的处理器,不能说真正有本身的操做系统,也不能说真正有本身的关系数据库。或许有人会说,今天的开源生态日益繁荣,咱们彻底能够用开源的操做系统,开源的数据库。
网络

OceanBase负责人阳振坤

给你们提供这样一份数据:在手机市场上,中国每一部安卓手机不只要给国外某操做系统软件公司缴纳几美圆到十几美圆的专利费,还要给国外某通讯巨头缴纳手机价格百分之几的通信及芯片的专利费。架构

而在金融行业,几乎全部银行的关键软件硬件基础设施都来自美国,服务器是IBM的,共享存储是EMC的,数据库软件大部分是Oracle,剩下的少部分是IBM的DB2。咱们假设,若是某一天真的发生军事冲突,银行系统三年得不到技术支持和设备配件,咱们的金融业会怎样?并发

努力了这么多年,在关键基础的软件硬件设施方面,咱们仍是把本身的命脉和财富都交给了别人。机器学习

为何要作中国本身的关系数据库?

这既是互联网推进的客观需求,也是金融行业数字化转型的必然结果。分布式

互联网时代的全新挑战

在没有互联网的时代,不管是商场仍是银行,关系数据库系统的并发量很是有限,从几10、几百至关广泛,几千、几万以上就比较少见了。进入互联网时代之后,并发访问量发生了数量级的增加。2010年的双十一,高峰期间阿里巴巴的天猫的并发访问量已经达到几十万,再到去年2017年的双十一,这个并发访问量已经达到一千多万。这已是一个从量变到质变的过程。性能

能够说天猫双十一所带来的现象级的并发访问量是源,推进了整个团队来作这件事。
那么另一个重要的因素,就是在传统模式下,无论是商场仍是银行,它的访问量很稳定,商场/银行扩建时有充分的时间把整个IT数据库系统扩展开来。而现现在,咱们的网站可能上个星期访问量仍是十万级别的,几天时间就可能上涨了近十倍,传统关系数据库系统硬件的半年左右的购买实施周期没法适应业务的变化。

这就是互联网时代数据库所呈现的两种特性,第一是并发量很是大,随之所带来的也是几百上千倍的成本。第二就是负载变化剧烈,带来伸缩性的变化。

你们都知道,2017年天猫双11创造了新的支付记录:25.6万笔/秒,那么这到底是个怎样的概念?

简单解释来看,就是为了要达到25.6万笔的支付,数据库须要执行4200多万条SQL。用一个更直观的例子,中国的五大行是中农工建交,他们每秒钟的支付能力可能就是一万多笔的体量甚至还不到。

这也就是说,若是支付宝采用一样的解决方案,则须要付出大银行十几倍几十倍的IT系统成本。

回归关系数据库的本质:事务

数据库之因此有价值,是由于事务。它之因此困难,也是由于事务。用华东师范大学的副校长周傲英教授的一句话来归纳,数据库的本质就是作三件事:转帐、记帐、订票

生活在今天的现实世界中,没有任何地方能离得开关系数据库。打电话的时候,关系数据库在帮你计费;买火车票,买飞机票,银行存取款,还有各类各样的网站交易等等,在这背后其实都是关系数据库在支撑。因此,绝不夸张的说,关系数据库是今天整个信息社会中最关键,最无可替代的基础设施。

可是,数据库倒是个很差搞的东西。若是说数据库中最关键的是事务,其最重要的就是事务的ACID特性。

  • 原子性(A):一个事务要么所有执行,要么不执行。好比你从取款机取钱,这个事务能够分红两个步骤:改帐户余额,出钱。不能余额减了,而钱没出来。这两步必须同时完成,要么就不完成。
  • 一致性(C):在金融系统中,一个典型的场景就是信用卡主副卡。比方说,你和你的家人使用了主副卡,你花了一笔钱,大家的信用额度都会相应减小,若是你的家人还了一笔款,大家的信用额度都会相应增长。若是是在一台机器上实现起来还没那么难,那么若是在两台不一样的机器上,这件事情就会变得很是困难。
  • 隔离性(I):事务在运行的过程当中,表现地像是系统中当前惟一运行的事务,不会由于系统中并发执行的另外一个事务而访问到不一致的数据。
  • 持久性(D):今天惟一可以有持久性的东西,其实就是硬盘。数据中心硬盘的年故障率约为2%-4%,因此说若是你的硬盘都坏了,你的数据还会存在吗?

用一句话来总结来讲就是:

数据库自然选择了计算机,但计算机自然并不适合数据库。

数据一条不能错,服务一秒不能停

关系数据库在业务系统中处在一个最底层的位置。关系数据库之因此困难,也是由于一个很是简单的道理:数据不能错,服务不能停。在任何业务系统中,数据库的数据错误都是巨大的灾难,对于金融业务,若是你的系统中止服务超过30分钟,你恐怕须要去银监会说明状况。

由于有这两个因素,更换数据库的风险很是高,但一般却没有与之匹配的收益。这也是为何像IBM、微软这样的后来者也没法取代Oracle。这就致使了数据库变成了一个门槛极高,强者恒强的领域,后来者很难居上。

OceanBase:关系数据库的重塑者

传统数据库的局限



上图是一个很是简单的传统数据库的架构示意图。今天IOE的体系在银行业已经根深蒂固。虽然IBM的服务器和EMC的存储目前已经有一部分国内厂商能够替代,可是Oracle的江湖老大地位却无人撼动。

即便把一个数据库的设备作到最贵最好,单个设备出故障的状况仍是存在,好比停电。因此数据库的系统必定须要一个备库,而与此同时引起的另一个问题就是主备同步。

可是传统关系数据库在理论上却根本作不到主备同步。若是你必定要作到同步,那么就意味着每一笔事务都得从主库同步到备库,备库确认后才能应答客户。假如这中间网络出现问题,或者备库存在问题,全部的同步都会被堵塞,也就是全部的写操做都没法进行。

对于银行和企业来讲,这是一个生死两难的问题,要保证同步,就面临着业务不可用的风险。因此银行购买可靠性更高的存储和服务器等硬件。最好的硬件可靠性天然高,但是价钱也很是高昂。

传统关系数据库的另一个局限就是分布式数据库的缺失。分布式事务两阶段提交模型看起来至关美好,可是实际上一旦节点在第二阶段出现故障,则事务既没法提交也没法回滚,只能被挂起,在实际生产系统中,这会致使数据库的链接迅速被耗尽,从而使得服务中断。

分布式数据库的缺失致使传统关系数据库没法进行水平扩展,而只能采起垂直方式进行扩展,这不只进一步增长了成本,也限制了业务的发展。不管是主库备库不一致,仍是分布式数据库的缺失,根本的缘由是传统关系数据库自身高可用的缺失,即今天的传统关系数据库都是经过外部硬件来保证可用性,而没有从数据库系统内部来解决问题。

OceanBase的目标:十倍性价比,作到别人作不到的事

关系数据库的市场是如此之特殊,OceanBase想要生存和发展,就必须在一些点上作到极致。而OceanBase给本身定的目标就是:把性价比作到传统数据库的十倍,而且作到别人作不到的事。

从八年前立项至今,OceanBase一直在脚踏实地的作三件事。
1)第一件事情是保证高可用的同时解决数据一致性问题。OceanBase经过把可用性作到数据库系统内部来解决这个问题。

前面咱们分析过,高可用与主备库数据一致的矛盾,这是一个没法改变的客观规律。那么,OceanBase是如何作到的?OceanBase数据库高可用的关键在于:用一主两备或一主多备代替一主一备。主库到备库同步的时候也不要求同步到每一个备库,而是同步到包括主库在内的多数库(超过半数),也就是说总共三个库中若是有两个成功了,这个事务就成功了。因此说,任何一台机器出了问题,这个系统的可用性和数据一致性都是保证的。

以三个库为例,若是坏了一台机器,每一笔事务至少会在剩下两台中的一台上出现,因此整个系统可以很快的恢复起来,继续提供服务。这样既保证了数据一致性,又保证了整个系统的可行性。

若是万一坏了两台怎么办?虽然同时坏两台机器的几率极其低,可是在实际生产中仍是可能出现的。因此,在重要的生产系统中,OceanBase用的不是三个库,而是五个库。这也就意味着,即便坏了一台机器,哪怕人为因素致使再杀掉一台,这个系统仍然可以正常工做。

高可用和数据的一致性,OceanBase让二者都获得了保证。这也就是咱们说的,作别人作不到的事。OceanBase能够跟银行保证:少许服务器甚至机房故障不会丢失任何一笔数据,也不会中止服务,甚至人工对帐的手段也再也不须要。这也是今天银行业很是欢迎咱们的缘由之一。

2)第二件事是提高性能,OceanBase经过原生的读写分离,使得整个系统性能,特别是写的性能获得了很大的提高,同时将成本大幅度下降。

OceanBase将新写入的数据放在内存,使得整个写事务(除了日志)不须要随机写盘。这对性能来讲有了质的提高。

可是原生的读写分离,实际上是有成本的。一个成本就是须要把新的修改放到内存之中,内存容量是有限的,不可能无穷无尽地写下去。因此每隔一段时间必定要把这个内容融合到磁盘中去。

虽然本质上仍是须要把数据写到磁盘里,可是带来的好处是显著的。经过原生的读写分离能够完美错开业务的高峰期。把业务高峰期要作的事情(写盘)先放在内存之中,那么等过了高峰期,在平峰期和低谷期时,再把数据写到硬盘里去,至关于把CPU、硬盘IO错开利用。

3)第三件事就是咱们真的把OceanBase作成了一套分布式数据库。

有人会说这个看起来很简单,不就是把在一台机器上作的事在几台机器上运行吗?OceanBase几十我的的团队花了整整五年,作了三个大的版本,才把分布式事务作到了现在比较完善的地步。

分布式的意义究竟何在呢?双十一一年就一次,对于业务量稳定的银行和企业而言,有人以为这个不是必要的需求。但现现在,移动支付已经融入到了每一个人的生活。一个很是广泛的业务高峰期就真实发生在每一个工做日的中午,上班族们拿着手机支付餐费,随着手机支付的进一步普及,这个常态的支付峰值会愈来愈高。

将来已来,砥砺前行

OceanBase Milestone

2010年6月,OceanBase正式立项;2011年,淘宝收藏夹上线;2014年,支付宝交易系统上线;2016年,支付宝帐务系统上线;2017年,OceanBase开始商业银行推广,至今已在多家商业银行上线运行。

OceanBase至今已成功应用于支付宝所有核心业务:交易、支付、会员和帐务等系统,网商银行和印度PayTM以及阿里巴巴淘宝收藏夹、P4P广告报表等业务。从2017年开始,OceanBase开始服务外部客户,包括南京银行、浙商银行、人保健康险平台等。

下一步方向


OceanBase 2.0即将在这个夏天发布,这是OceanBase真正把分布式事务作的比较完善的一个版本。2.0版本中同时会在事务优化、SQL优化器上作更多提高。
同时,后续咱们但愿经过人工智能/机器学习来协助用户更好的使用数据库,包括二级索引,SQL性能优化,故障诊断等等。咱们也使用包括RDMA在内的新技术,以便进一步提高系统的性能,下降整体的成本。

更多精彩内容欢迎关注“OceanBase”公众号,回复关键词“交流群”,便可加入蚂蚁金服技术交流群,快来和阳老师一块儿探讨技术吧!
相关文章
相关标签/搜索