演讲全文>>
大家好,我是来自OceanBase数据库的阳振坤,很高兴能跟大家介绍我们在数据库方面做的一些工作。
我很幸运,上大学的时候来到了北京大学,并且遇到了王选院士。我跟着王老师先做实习生,后来跟着他读博士,再之后留在北京大学计算机研究所,继续跟着王老师工作,从事计算机汉字激光照排技术的研究。
这张照片右手边的第二个人是王老师,王老师背后角落里的那个人就是我。那时候的我比今天胖很多。
这张照片是我们的工作获得了北京市科技进步奖一等奖。这个奖的大部分工作其实是我在博士期间跟着王老师做的,博士生的工作毫无疑问是在导师的指导下完成的。而且当时我在这个领域研究的时间还比较短,很多具体的方法、算法上也都是王老师手把手教出来的。但是,王老师仍然把我的名字放在了第一位。
不仅如此,我觉得这些年我跟王老师学到了一个更重要的东西,就是要“技术顶天,市场立地”。我决定做OceanBase数据库的时候,也是这两句话在指导着我。
到了2002年,当时互联网的发展已经非常迅速了,对社会的影响也逐渐扩大。于是我选择了离开,离开科研机构,离开北大。我想到互联网一线看一看,看一看互联网一线的工作和学校里的工作有哪些差别。
离开了北大之后,我先到了联想的研究院,后来到了微软的研究院做了一些工作。幸运的是,这两段经历让我有机会开始做分布式系统的工作,为我后来选择分布式数据库奠定了基础。
到了2010年年初,我离开上一家公司,接受了淘宝的offer。在去淘宝报到之前,我提了一个要求,希望他们给我一个月的时间。这一个月时间干什么呢?我希望休息休息,想一想我自己去了淘宝之后能做什么、要做什么?什么事情能够发挥我的价值呢?
我是一个做软件开发的人,淘宝的业务系统我肯定也能做。但是我觉得,这不是我最大的长项,我最大的长项还是底层系统。于是在那时候,我就看到了数据库这个机会。
在讲接下来内容之前,我先简单地跟大家介绍一下究竟什么是数据库。虽然我们每天都在和数据库打交道,但只有很少的人会直接使用数据库。因为当我们用订票软件、用网购APP的时候,见到的是业务系统,其实这些业务系统都需要跟数据库打交道。
就像我们在买火车票的时候,因为可能同时有很多的人在买这个日期、这趟车次的车票,那如何保证这张座的票只卖给了一个人呢?只能依靠数据库。
包括网上购物,假如衣服只有3件库存,你要是能卖4件,那系统肯定是有问题的。谁来保证这件衣服最多只能卖出去3件呢?数据库。
数据库是当今信息社会的基石,也是市场价值非常大的产品。在2023年,全球的数据库的市场规模超过了1000亿美元。美国大概占了其中的50%,其次是欧洲,之后就是咱们中国。这么大的一个市场,竞争对手也一定非常强大。
而且数据库还有一个很好的特征,就是它跟语言文化或者地域无关,是全球通用的,所以赢者通吃。大家可能会说,我们有地理信息的数据库、有医药的数据库呀?但这些都是数据库的应用,是数据库里的数据,而数据库系统本身其实跟这些东西无关。
那今天世界上数据库业务做得最好的是谁呢?Oracle也就是甲骨文,而且甲骨文也是所有数据库里面真正赚大钱的。其他的数据库要么赚一点小钱,要么就是在温饱线挣扎地活着。
还有一个很优秀的数据库MySQL,它也是甲骨文这家公司的,它是个开源的数据库。
那既然已经有了开源的、免费的数据库,为什么还要用一个新的还要花钱的数据库呢?这些都是我们做数据库之前需要考虑和解决的问题。
但是我觉得,15年前开始做数据库,对于我们来说是赶上了一个非常好的机会。这也是我说服公司当时相关领导人来做这个决策的重要原因。因为在一家互联网公司里,做一个长远的项目是一个很大的挑战。当时我的老板就是今天阿里集团的CEO吴泳铭,最终我说服了他,他也愿意支持我们做这个项目。
我跟他讲到了要做这个项目的几个原因。第一个原因“天时”,传统的数据库是集中式的,需要用高端硬件,因为它们的可靠性要很高。在互联网到来之后,数据量、访问量已经有了几百倍几千倍的增长。在这种情况下继续使用这种高可靠性的高端硬件,成本是让人难以接受的。这就导致了集中式数据库这条路很难走下去。适合这个大数据时代的数据库,一定是分布式的。
第二个原因“地利”,我们从阿里的双11的数据就能看得到。从2009年第一次双11开始,那时候大概做了5000多万的业务。到了10年以后的2019年,业务量为2600多亿,出现了几千倍的增长。这就给我们做数据库提供了一个特别大的机会。
数据库很复杂,又是整个业务系统的最底层。它一出问题,整个业务系统就垮掉了。整个阿里先有淘宝,后来有了天猫,还有支付宝,这些业务系统都是构建在数据库之上的。那我们的数据库就有了机会在这些业务系统上成长、成熟起来。所以说,电子商务在中国的井喷式发展,特别是在淘宝和支付宝上的发展,给了我们一个特别好的做数据库的机会。
第三个原因是“人和”。其实这也是这个项目最大的争议之一,因为当时的我并没有数据库的背景。大家说,你一个没有数据库背景的人怎么能做一个这么难的项目?我们国家也罢、全世界也罢,当时已经有十几年没有出现过新的数据库产品了。凭什么要让一个不懂数据库的人来做数据库呢?
我的理由是,数据库在集中式这条路上,技术上已经走到了尽头,它一定会往分布式方向走。分布式数据库还没有人做过,因为它有很多的困难。而我自己最近这些年做的就是分布式的工作。
但是,数据库发展了这么多年,甲骨文公司有十几万人在做数据库,为什么他们没有做分布式数据库呢?我们当时整个阿里包括淘宝和支付宝一共才几千人,就算一个人顶别人十个人,我们也做不出来数据库跟人家来竞争啊。
那我们先来看看,分布式数据库到底好在哪里,它的难点我们究竟能不能克服。
就像刚才说的,分布式数据库最重要的价值,就在于它的容量是可以伸缩的,可以说解决了数据库系统的容量问题。其次,硬件的成本也会大幅度地降低,因为分布式系统不再会使用也不再需要那些高端的硬件了。
那最大的困难在哪儿呢?大家知道,数据库里面一些很关键的操作,是需要有“原子性”和“持久性”的。比如转账从一个账户转到另一个账户,如果用一台集中式高可靠性的机器,它就会很少出故障。但是在分布式系统里面,整个系统的故障跟结点数密切相关,结点越多出故障的概率也越大。
如果我昨天跟人做了一笔生意,别人给我转了一个亿,结果银行今天告诉我,因为数据库的硬盘故障了,一个亿没了,我想没有人能接受这样的情况。所以这是我们在做分布式数据库之前首先要解决的。如果不解决这个问题,数据库最基本的东西就不成立了,就不可能有人用。
我们解决这个问题的办法,简单来讲就是少数服从多数。因为我们使用的就是普普通通的PC机,性价比很高,但是稳定性和可靠性没那么高。那我们就把一笔交易同时用3台机器做,这中间只要至少2台机器做成功了,我们就认为这件事情是成功的。即使其中任何一台机器坏了,那剩下那2台机器里面一定至少还有1台机器有数据,那么我们就可以通过这1台机器把系统迅速地恢复回来。
所以我们其实是改变了数据库产业处理故障的方法。以前用的高端硬件很少出故障,可是你一定要对它出故障有所准备。它也许一两年内不会出问题,但三四年可能还是会出故障的。一旦出了故障,就需要投入大量人力物力让这些系统尽可能快地恢复。总不能像我刚才跟大家说的,银行硬盘坏了就让一个亿凭空消失了。
我们现在的做法是,让数据库可以自动地恢复,而且恢复时间很短,几十秒就能完成。我们现在把这个时间做得更短了,只要几秒的时间就能把整个系统恢复。特别是像支付宝,它重要的系统有几百套甚至是更多。这时系统出故障的概率其实很高了,但我们做成了自动恢复之后,做业务的同事就再也不用担惊受怕了,做系统的同事也不用担心出了故障就要立刻去应急解决问题。
到了第2年也就是2011年,我们的第一个业务——淘宝的收藏夹上线了。收藏夹这个业务看起来可能很普通,只是把你感兴趣的商品都放到收藏夹里,但是你每次打开这个系统,收藏夹都要把这些商品的最新状态展示给你。
这里面一个很大的挑战就是,商品的价格状态是在变化的。有的商品降价了。有的商品参与了一些促销,还有的商品可能卖完下架了。那么在你打开收藏夹的时候,这个系统就要去查商品库,把每一件商品的价格变动、是否下架这些状态都读出来并更新。如果你收藏了100件商品,那它就要读100次商品,这就给了数据库一个很大的压力,它是100倍的放大。如果你收藏了更多的商品,这个放大的倍数更大。
我们解决这个问题的办法是,我们把这些商品的修改放到了内存而非硬盘里面。
这就有点像传统的图书馆。传统的商品是正常的图书,放在一个大书架上,而那些经常借阅的书是放在一个小书架上。我们把修改的信息放到内存也就是这个小书架上,那么每次要展示的时候,只需要去看这个小书架就行了。
小书架的优点是,第一内容少,第二内存里的读取速度非常快,要比大书架也就是硬盘要快得多。所以这样我们就可以很快地把最新的信息展示给用户,解决了收藏夹的问题。
但是接下来,我们遇到了一个非常大的挑战,就是那些最核心的业务都不愿意来尝试我们这个新的数据库。
这件事情我充分地理解,因为没有一个核心业务愿意尝试一个新的、没有被证明过的数据库。但是反过来,一个数据库没有大量地被使用,你是没有办法来证明它是稳定可靠的。
所以在2012年底,整个集团给了我们这个团队一个复活的机会,就是把我们从淘宝调到了支付宝,让我们重新来找机会。如果没有这一次复活的机会,我觉得就没有今天的一切。
到了支付宝之后,困难仍然是存在的。尤其是当2014年我们决定在支付宝的交易库使用OceanBase的时候,这个困难变得更大了。
支付宝在双11主要干什么呢?就是做交易。如果这个交易库不能工作,整个支付宝就完全不能工作了。所以业务方面肯定对此非常担心,也有非常大的压力。
当时在极端的困难之下,我给当时公司的董事长兼CEO彭蕾写了一封邮件,说明了一些情况。我说,确实要给我们这些技术团队一些机会,让我们能够尝试。最后大家经过很多轮的激烈讨论,决定给我们1%的业务。
不要小看这个1%,对于业务来讲,1%也是很大的风险。因为支付宝有几亿的用户,1%也就意味着几百万的用户。
后来故事的发展真的有点戏剧性了。因为到了临近双11前夕,支付宝对整个系统进行压力测试。大家发现,当整个系统的压力达到预定的90%以上之后,当时用的数据库就开始报错了,因为到了它的性能天花板。
所以当时的业务团队来找我们,说给你们10%行不行?那我们当然拍手欢迎了。而且幸运的是,在那个双11期间,我们整个系统非常平滑地支撑了业务,也从此得到了大家的信任。
于是在随后的一两年里面,我们把支付宝所有核心业务都逐步替换成OceanBase数据库,包括金融系统里面最核心的账务库。
到2016年的年底,随着我们在整个蚂蚁集团数据库的逐步替换,我们这个团队也看到了内部的天花板,我们就需要往外面去。
那走出去之后,其实我们遇到了跟内部类似的困难,甚至是更大的困难,因为没有人知道OceanBase这个数据库。毕竟甲骨文这么多年都没做出分布式数据库,你们凭什么说做出来了分布式数据库?
我们当时的团队规模也小,也就是百十来个人。所以在这种情况之下,我们决定去跑跑分。因为数据库跟超级计算机一样,它有个全世界的性能排行榜。我们需要先向这个非营利组织证明你是一个数据库,你能满足做交易时要求的“原子性”和“持久性”。完成了这个证明之后,你才有可能去跑性能。所有的这些都是在这个组织的监督之下做的。
在这件事情里面,我们做到了好几个第一。
这是第一次有中国的数据库登上了这个榜首。
这是第一次有分布式数据库去跑分,因为以前的数据库都是集中式的。这个相当于改变了整个游戏的规则,因为你一旦能用分布式去跑分了,100台机器跑一个性能,200台机器做不到2倍但可以做到1.8倍、1.9倍。那么后来的发展确实是这样的。
还有一个第一是说,以前的数据库在跑分的时候要去买设备、买硬件、买机器、买存储,我们没有,我们是在云上租的。我们第一次用云上的虚拟机来跑分,这给我们提供了很大的便利。首先就是我们跑分的成本大幅度降低,不用投入大量成本买这么多的机器硬件设备了,其次就是这些设备完成测试后就可以释放掉,不用再额外付费。
到了2020年,集团决定让我们这一块独立出来,独立成长。
经过了过去四五年的发展,到2025年初,我们现在大概有2000个付费客户,还有大概三万多套用户是我们知道的开源用户,因为我们也是一个开源的软件,可以免费使用。我们服务了很多像金融、银行、证券、保险、能源、交通、物联网、社保等等领域的客户。
我们不仅在国内发展,也尝试着走出国门。在这个过程中,我们其实也遇到了问题。在前面也跟大家提到过,商业的数据库Oracle非常的稳定,还有开源的免费数据库MySQL也很好用,那究竟谁会愿意来花钱买我们这个数据库呢?
这个时候我想到,数据库其实要做两件事情。一个是我们前面讲的交易处理,但其实它还要干一件重要的事情就是做分析处理,也就是做报表。
由于数据量的增长,传统的集中式数据库已经很难做分析了,或者说根本不能做。所以很多业务系统是一套交易数据库,再加上一个大数据系统搭配使用。因为分析系统往往数据量更大,比如要跟前一年的数据做对比,你就必须得有前一年的数据。其实这个大数据系统本身也算是一类数据库,这就让整个系统很臃肿,成本也很高,并且有很多使用方面的挑战。
这一点对我们来说很好解决,因为我们是个分布式系统,我们的容量不是问题。那就有可能在这个系统里面既把交易做了,又把分析做了;既降低用户的成本,又能让用户在使用上得到极大的简化。我觉得这个应该就是我们今后的机会。
接下来的挑战就是效率。因为按照硬盘的块设备的特征,做交易的时候它是需要把一条记录的相关数据存在一起的,这样你的IO(Input/Output,数据的读取和写入)就比较少,效率比较高。
但是做分析的时候不是这样的,比如人口信息有姓名、有身份证、有住址、有出生日期,还有好多好多的信息。如果我们只想看看身份证号,不需要关心其他的。如果这些信息还是像刚才那样把一条记录的所有信息存在一起的话,效率就会非常低。而我们前面大书架、小书架的思路恰好能够解决这个问题。
就是你把要分析的数据用列来存,要做交易的数据用行来存。所有这些数据要做的修改都是放在内存里面的,这个东西就是我们前面讲的小书架。内存对于行或列其实不那么敏感,因为它是个随机访问的设备,速度也非常快。这样,我们就能解决这个效率的问题了。
因此,我们不只是做了一个交易的数据库去跟其他数据库竞争,我们要在数据库赛道里走出来一条新的路,把自己变成新一代的大数据平台。对使用者来说,这既大幅度地降低了成本,又大幅度地简化了使用方式。我想,这就是OceanBace真正要在国际数据库市场上生存下来的秘诀。
说到这里,我还想说,王老师对我的影响其实是非常大的,遇到他是我的幸运。当时做OceanBase数据库的时候,我经常跟我们团队的同学们讲,数据库是一个没有国界的产品,我们一定不能只给淘宝做,不能只给支付宝做,不能只给天猫做。当然,我们要服务好这些用户,但也一定要做一个顶天立地、面向全世界的通用的数据库,让我们不只在技术领先,在市场上也一定要能立得住,能够服务整个世界。
谢谢大家!