Tip:本文首发公众号【一名打字员】数据库
据悉,17年的4月份,蚂蚁金服已经宣布,蚂蚁金服及阿里巴巴自研的关系型数据库OceanBase已经支撑起Tmall和淘宝的平常业务需求,成功替换了以前所采用的单机数据库如Oracle或者开源的MySQL。OceanBase做为一个金融级应用,已经作到了能够容纳数百TB以及数千亿条数据的跨表事物,其最大的亮点就是可扩展,将来极可能会成为支持跨域多地的数据中心。跨域
阿里巴巴首席DBA冯春培在一次大会中曾分享了阿里数据库的演变历程,其中大体分为几个阶段:缓存
Oracle安全
04年之前,淘宝是使用的MySQL数据库,众所周知,5.6之前的PHP在数据库方面有着极大的隐患,因此后来开始向ORACLE迁移。据冯春培介绍,04年阿里的数据库常常出现问题,后来,业务超速发展,ORACLE的优化仍是承载不了业务的发展,这个时候阿里和淘宝进行了拆分。虽然ORACLE做为一个优质的商业级DB来讲,他提供了一个健硕的应用环境,可是也依然没法摆脱上亿级数据操做的困扰。固然我猜,成本上也是一个很大的方面,每一年投入的成本都在1千万以上,另外因为当时淘宝内部团队大都很擅长商业DB,能很便捷的配合业务的扩展。服务器
MySQL多线程
07年之后,阿里感觉到数据库方面的贫瘠,开始选择在开源数据库上动手脚,这意味着须要放弃熟悉的,从新开始,并将固化思惟进行改变。这个时候的MySQL做为开源领域的佼佼者,具备很强的开发易用性以及具备成熟的中间层,这样极大程度的减小了开发难度,底层的数据存储引擎也十分强大。并且,当时国内某银行使用服务商提供的全套产品以后,没法替换,因此阿里完全向MySQL进行迁移。在长达三年的迁移中,阿里一方面与ORACLE签署了一份采购协议,使得ORACLE的受权能够随意使用,而后另外一方面,平稳的推动MySQL的发展,在当时,传统的关系型数据库在扩张方面是没有一个好的解决方案的。架构
NoSQL,OceanBase并发
10年,淘宝的大部分业务扩张很快,这些业务一般涉及到安全、交易以及数据的稳定性等问题,DB方面已经完成不了了,这个时候,淘宝开始从新架构本身的系统,听说,在10年头,阿里系里出现了一系列优秀的架构师。并且市面上开始挂起大数据的热风,不少人开始意识到数据的重要性。而大数据主要分为存取数据,挖掘数据和运营数据,数据可普遍做用于各个领域。
这个时候比起昂贵的ORACLE和各类坑坑洼洼的MySQL来讲,阿里开始抛弃开始汲取市场上仅有的非关系型数据库和关系型数据库的优势,决定使用本身掌握的核心技术研发出一款本身的数据库。OceanBase能够自动扩展,具备强一致性,可以达到机房级的容灾,最重要的一点,OceanBase可以达到真正的彻底不丢数据。框架
以前也已经提到,MySQL、ORACLE与OceanBase的发展历程,也简单描述了相关的优缺点,在这里也只简单的安利一下OceanBase的特色,其中大部分思路源于@日照(OceanBase)的官方推文。
在这以前,不得不说说MySQL,当咱们切换到MySQL上时,一般会有下面几个疑问:运维
MySQL的容灾解决方案
MySQL的性能数据
MySQL自身稳定性如何
MySQL DDL解决方案
MySQL主备同步延迟以及数据一致性校验
固然,在这里我就不一一解答了,在互联网上有一系列的解决方案,另外我会在后面的文章中陆续给出本身的见解以及相应的解决方案,有兴趣的童鞋也能够私下与我交流交流。
读过《MySQL技术内幕:InnoDB存储引擎》的童鞋都应该知道,MySQL被设计为一个但进程多线程架构的数据库,与SQL Server相似,与Oracle的多进程架构有所不一样。大名鼎鼎的InnoDB被ORACLE收购,应用十分普遍,其体系结构主要分为后台线程和内存。后台线程主要做用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,这时将已修改的数据文件刷新到磁盘文件,同时中途若是出现异常还要能恢复到正常状态。
MySQL后面咱们会详细介绍,毕竟也是开源圈内的一杆大旗,说回来咱们的OceanBase,从13年的设计到后面15年的崛起,从官方推文来讲,OceanBase达到了分布式数据库基本的几个核心部分,一个是查询,一个是存储还有一个就是事务。
事务处理
首先咱们得理清数据分布状况,传统的关系型数据库都有一种叫作两级分区表的概念,就是:时间+业务主键。常见的分布式系统中,分区要不就是用哈希或者是范围。OceanBase可以将不一样的分区分布到不一样的数据库。这是当下传统关系数据库所没法完成的。
OceanBase是如何达到多机的事务呢,这又得分为单分区和多分去的操做。由于操做单个分区就是在一台机器上,也就是使用的一台机器的服务,本质就是一个单机事务。和其余传统数据库的原理差很少,基于导个版本进行并发控制,不一样的是,OceanBase作了一些优化例如日志同步以及加入了内存数据库的无锁结构、内存多版本并发控制、SQL编译执行等等。
多个分区则分为两种状况,单服务器和多服务器。因为多个服务器确定会跨多个观察者,因此OceanBase也对此进行了一系列的优化,并且里面的里面高可用是基于Paxos协议实现的,OceanBase的开发者和Google Chubby系统的发明者也一致认同“Paxos协议实现的高可用机制都是耍流氓”的话语。
分布式查询
OceanBase里有一个ObProxy的代理服务器,功能则就是一个透明转发代理,能够解析SQL,可以识别操做对应的哪个分区,而后将其转发过去,听说他的性能是可以达到百万级的QPS。内部人员对它的评价就是:
轻量级SQL Parser
高性能异步框架
支持线程本地化
另外。在运维方面,它支持热升级、全链路监控。说到热升级,主要是新老版本发出不一样的请求,对应到相应的新老版本提供服务,一段时间后将自动退出。
OceanBase的执行计划主要分为本地计划、远程计划和分布式计划。这样一个SQL请求到了Observer的服务端,通过一系列的解析、重写和优化过程,再由SQL执行器负责执行。
其它
其它OceanBase还有不少很好的优势,虽然它年龄还小,各方面还很稚嫩,好比说他的强一致性和它的高可用的优化,以及等等等等。。
更多的优势能够移步官方推文
听说OceanBase也曾经开源过0.4的版本,可是目前的版本已经和开源中的架构风马牛不相及,也意味着OceanBase确定是遇到了许多坎坷,可是最终仍是遇到了本身的伯乐。虽然许多关键性的指标OceanBase尚未达到,也没有办法在处理互联网实时大数据量的处理进行高度的契合,生态圈也不够完善,可是一切都在起步,就和咱们每个打字员同样,都在成长的路上,We always on the road。