编者:阿里巴巴集团有许多业内顶尖工程师,他们在数据库、云计算、数据可视化、系统等方面的研究与应用处于全球领先水平。我们将陆续寻访这些行家,通过对话给大家介绍行家在做的那些事。
阳振坤博士(花名正祥)在云计算、海量数据存储方面有丰富的经验,在阿里带队研发了一个全新的关系型数据库OceanBase。他过去是北大首批长江学者、国家科技进步一等奖获得者,现在依然与码农奋战在Coding第一线,现任支付宝基础数据部高级研究员。他为人谦和低调,江湖上有很多关于他的传说。
本合辑分成3部分,供大家参考。
————————
仙客:正祥老师请先介绍一下你最近在做的一些事情吧?
正祥:我2010年加入阿里巴巴直到上个月(2013年2月)只做一件事情,没有变过,就是OceanBase数据库。前几年在淘宝,然后去年来到支付宝。2012年OceanBase最大的变化就是支持了SQL语言(通过MySQL客户端)。现在除了OceanBase外,又有了MySQL数据库研发以及关系数据库服务系统RDS。
仙客:提到数据库,还会有很多人想到Oracle以及MySQL、Hbase等,为什么阿里巴巴特别关注数据库?
正祥:许多的互联网服务可以允许有一定的数据差错,但是电子商务(如交易、金融领域等)与一般的互联网公司不太一样,它对于数据的一致性要求非常高,比如要确保钱的进入与流出要对得上账,不能丢失任何一条支付数据,而数据库恰好就是有这个作用。
可以说电商公司的核心之一就是数据库。而现下一些大数据等也是与数据库有着极大的关系,所以阿里对于数据库的研究会相对深入。
仙客:集团内会用到哪些数据库,其标准是怎样的?
正祥:上面提到的数据库甚至更多类型的我们都有在使用,适合不同的场景。早期时候,Oracle这种商用数据库系统比较多,但成本比较高,尤其是对于我们这样高频低额的支付公司来说,现在我们正在通过利用开源及自行开发的方式去降低成本。
OceanBase是基础数据部开发的一个数据库,现在已经对外开源。它的优势在于结合了云计算和关系数据库的基本技术,扩展性与可靠性都很高。
说到目的,其实比较简单,就是像我们这样规模的电商技术公司,有些事情只能自己做,有些需求是前无古人的。我们必须从技术上做到足够低的成本,足够强大的扩展能力,足够健壮的系统去承载业务。
仙客:为什么会有OceanBase项目?
正祥:刚才讲到商务系统对于数据的高要求,为了确保高可靠性,目前金融及电商领域多数采用了IBM+Oracle+EMC的配置,比如银行使用IBM的小型机、中型机与大型机比较普遍,数据库使用Oracle公司的商用数据库系统,存储设备使用EMC这样的高端存储。
但是这个“IOE”的商用方案也带来了很多的问题,比如成本很高、扩展不够好等等,考虑到我们的成长性,我们需要进一步降低成本(因为我们有太多高频低额交易)。因此,一方面是尽快应用MySQL,另一方面是提前做些研究。2010年东邪、振飞和我聊的时候,就谈到了数据库这个机会。然后准备了一个月后就开始了,OceanBase就在这个思路下诞生。
仙客:OceanBase项目的设计思路是怎样的?
正祥:当时遇到的挑战是阿里巴巴可能成长为全球最大的电商交易系统(现在已经是),所以在各方面有一些指标,特别是扩展能力和成本。因为我觉得像MySQL它已经是跟着Oracle这条路去做的(那时候MySQL还没有被Oracle买下来),而且Oracle它数据库工程师有一千个人,人家是专门吃这个饭的对吧。那你说我们去学人家Oracle或者开源的MySQL肯定没有吸引力,照着人家的路走怎么也追不上,公司总不能给我一千个人啊。
所以我就觉得我们要超过别人,第一是说我们做数据库得根据自己需求的一些特点去做,另外就是要走跟别人不一样的路。所以我们最后做成的OceanBase这个数据库,它是关系数据库的功能加上云计算的一部分功能黏在一起的,就等于说别人在这条路上开着一个车在跑,你开个车比别人出发晚、比别人慢还要想超过别人那是不可能的,唯一的办法就是你走一条路比别人短很多的路。
我原先做过云计算的项目,因此我们团队把云计算的好多思想,把它融进了数据库,比如说传统数据库的机器坏了那是天大的事儿,所以传统数据库一般都买高可靠的机器。比如说硬盘他要做冗余,电源他做双电源,一个电源坏了还有另一个电源。风扇他也都做多余的风扇。甚至内存也要冗余。全都搞这一些,那么这一些东西它都是钱。
OceanBase我们就用最普通的服务器,也不做冗余,那它一个基本思想就是说坏了就坏了,这个云计算里面可不就这样吗,坏了就坏了。最后也把它做成是这样。所以它思路上跟原来的方式差距很大,是完全另外的一种思路,实际上是参照了很多云计算的思想。
仙客:刚才你提到今后要一边做MySQL一边做OceanBase项目,这是什么考虑?
正祥:MySQL是个开源关系数据库,在全世界的使用非常广泛,我们集团内有很多MySQL领域的优秀工程师,对于数据量和访问量都不大的场合,它是很好的选择。但MySQL其实有两个大的局限,一个是它本身是不可扩展的,就是说如果你要想支持更大的性能,你还是要买更大的机器(分库分表是一种变通,但有很大的局限),这一点它没有改变(跟商业的关系数据库一样)。另外从单机的性能来比,MySQL单机支撑的数据量比较小,如果不考虑许可费用,MySQL的单位数据量成本要比Oracle高。它被Oracle给收购后,Oracle肯定优先发展自己的商业数据库产品,Oracle就不在开源这一块给它投入多少,明显它的发展慢了,那些好的技术也不拿过来了。
而我们的业务规模的增长之快、数据量非常之高都是世界级的,不断遇到业内最前沿的挑战。比如分表分库。一个数据库拆分好几个、几十个,现在是几百个,以后甚至几千个。这面临了太多的挑战。如果没有根本性的改变,那么依旧会面临难题。
在产品上,OceanBase现在已经兼容了MySQL,如果我们不强调,其实有些时候用户是不知道是用OceanBase还是在用MySQL的。
仙客:那么OceanBase跟Hbase是一个什么关系?
正祥:功能上,OceanBase是跟MySQL跟Oracle有些像的,它们都支持一个很重要的特点就是叫事务,就是数据的一致性。一个简单的比方就是今天咱们一块吃了饭,我要付个款给你,支付宝是从我的帐上扣一笔钱,然后往你的帐上再加一笔钱。但是这个事情它必须要么都做,要么都不做,不能说我的钱扣了而你的钱没加是不是。
这个是OceanBase、Oracle、MySQL都能做的东西,但是Hbace不能保证,他只能保证说你可以扣,扣一个款可以,你加一个款也可以,但是他不保证这两件事情要么都发生要么都不发生,对于交易系统来说,这个比较麻烦。
不过Hbase在集团内应用也挺广泛的,因为我们要看到的淘宝系统与支付宝系统,它都不是单一的,它实际上包含了很多个子系统,各自有不同的需求。
仙客:可能最近在内部关于数据库的分库讨论的比较多。
正祥:确实这样,我们的数据增长太迅猛。数据量太大了,我们就人工分表,就是从一台机器拆到几台机上,那我加一批机器怎么办呢?还得人工把这个数据迁过来。
现在如果你要正常的继续用MySQL,比方说原来分了四千张小表,不行了,好多小表都大于五百万条或者大于一千万万条记录,那就再拆半分成八千张小表,如果还不行就分成一万六千张小表,今年三淘那边有一个核心库这一次要把它拆成256台机器(两个机房就是512台机器),我估计最后应该是把一张表分成了好多万张小表。这个非常厉害,也是世界级的挑战。
仙客:其他同行如何解决这个问题?
正祥:全球范围来看这也是一个高难度的技术问题,可能会有很多问题。比如Google很厉害,他数据量也不小,最近一次他把一个表由几百台机器分到了1000多台机器上,但他最后那一次分库分表操作它做了两年时间。Google做了Spanner解决了这个问题。
仙客:那OceanBase怎么解决数据库过于庞大的这个问题?
正祥:像OceanBase做的时候,它是自动的,就是你加一台机器,那这台机器是空的,它自动就会往这台机器上迁数据,就是说你是不用去管它的。因为人迁很容易迁出错误来,很容易出问题,而且人迁还得要前端应用程序来配合迁,才能完成。还有好多情况下他还要停一会业务,就是你把业务稍微停一会儿赶紧把这个业务迁过来。但是做成自动化以后都是机器自己在迁,他是不会停的。
OceanBase一开始做的时候就是把分户分表去掉了,就是你不用分户分表了,对于用的人来讲就是一张表,它现在在线上面我们最大的一张表上的记录这两天过了一千亿。正常的情况下分库分表,一般的一张表也就到500万条就算比较大了,过千万的库都很少,我们现在是有一千亿。
仙客:你能谈下OceanBase是在什么样的环境下做起来的吗?
正祥:一开始我到淘宝,淘宝的开发风格很有意思。他比较崇尚自由开放,很多决策是自下而上,就是一个一线的员工都会提一个很大的变革的意见,如果上面只要不说否定这个事情就可以做。
所以当时OceanBase第一个版本不是很稳定,然后性能也不好,但是业务的几个同学跟我们在一起谈了很多次,他说虽然有这些毛病,但是你确实可以解决我问题,我们相信你,那就做了。所以我就觉得,那边的很多工程师他们这种自主感会强一些。
还有,比方说发布版本,淘宝的风格是开发工程师自己衡量产品,自己弄好你们自己发布上线去,所以开发者有责任感,他自己有压力。
仙客:OceanBase现在进展如何?然后开源这块会继续吗?
正祥:三淘那边有30多个集群约400多台机器支撑30多个业务,比如直通车报表,就是给广告主看他的拍卖词投放以后的ROI的投入产出比的,有天猫的评价系统,因为人家买商品一定要去看,这个商品的评价怎么样。当然还有收藏夹,这是几个比较大的应用。这些去年的表现那都是非常好的,并且经历了2011年与2012年的双11、双12的考验。支付宝方面也有四五个项目正在上线测试。
从开发团队方面,我们有十多人的团队花了2年多的时间一直在做开发,在杭州和北京都有团队。
我们做版本稳定了就开源,目前开源的版本都是我们真正在使用中的版本。
仙客:这些年下来你有些什么感想?
正祥:OceanBase的成长有公司很多同学的宽容和帮助,比如我们第一次投入到实际的应用中,也存在许多的问题,但是有一个很好的公司内部环境让我们去试错。另外,我们很快就对内开源了,其中有一些的模块其实是其他部门的同学帮忙写的。这个非常了不起。
而且现在外面也有一些企业也在与我们沟通使用OceanBase的可能性,我们做技术的,在这方面得到了大家的认可就非常开心。
————————
注:OceanBase是为满足海量结构化数据存储需求而设计的。她具备数据库关键的事务(ACID)特征,实现了关系数据库的基本功能(select/insert/update/delete…),并可以水平扩展(scale out)。持续可用性(continuous availability)设计使得她超越了传统的容错/容灾(fault tolerance/disaster recovery ),可用性更高。
OceanBase已经开源,相关PPT在此处下载:http://yunpan.taobao.com/share/link/MC2WNTLq
也可以在开源站点 (https://github.com/alibaba/oceanbase 以及oceanbase.alibaba-inc.com ) 查看更多信息。
阳振坤博士的微博为:阿里正祥。欢迎沟通。