在今年12月4日的Velocity China Web性能与运维大会上,阿里集团的章文嵩博士(淘宝正明)再次以大会主席的身份在台上进行了分享,今年分享的主题是阿里集团的开源成果以及开源流程的介绍。借着这次大会,51CTO编辑针对开源这个话题跟章文嵩博士展开了进一步的沟通,下面将沟通内容整理出来,分享给大家。
章文嵩(淘宝正明)
本次沟通的主题是:身为技术主管或CTO,要如何在企业内部推动开源?
---以下为采访实录---
51CTO:章博士您好!感谢您再次接受51CTO的采访。那么首先一个问题就是,对于阿里开源化在过去一年带来的成本节省,您是如何评估、计算的?
章文嵩:利用开源软件可以大大的节约成本。我们可以举个例子来说,原来整个淘宝的那个核心数据库——核心数据库淘宝有很多,比如说有商品库,有用户库,有交易库——我们就拿交易库来说吧,过去是拿商用的解决方案,就是IBM小型机,EMC最高端的存储,Oracle的数据库,那么这一套下来,不算软件的授权费用,硬件的成本就2000万了,整个平台的处理能力大概是9000个TPS(每秒交易量)。
但是我们现在拿现代的一些硬件,PCIe的Flash卡,接在计算机的北桥上面,不经过南桥的存储设备了,访问速度很快,响应时间也很短。
我们拿PC服务器做——当然不是普通的PC服务器,大概八九万块钱的PC服务器,不是两三万的,因为那个八九万块钱的PC服务器在RAC,就是可靠性这些设计上会好一些。再加上那些存储的卡,我们一台机器大概成本11万多,做到能力是TPS大概八千多,接近小机的水平。
51CTO:单台吗?
章文嵩:对,一台,但是响应时间更短。因为过去商用的系统,EMC存储都是通过光纤来连接、传输,现在PCIe的传输速度更短,响应时间更短。这方面我们当然不是一台机器解决,我们是16×2上去的,就是把数据库分成16块,每块是master+backup,16×2上去的话,我的能力——交易库主要是写入——写入这方面就可以x16,我的TPS就可以达到12.8万的TPS。这个能力远远超过原来9000个,基本上是15倍以上。我花了钱大概就360万左右,原来是2000万的解决方案,这个成本的节约很大。而且你要从能力来说,能力提高了15倍,花的钱不到原来的五分之一,按照性价比来说,一下子就提升了75倍。
51CTO:如果加上人力的成本呢?
章文嵩:我们真正深入到这里面去,实际上人的成本是很少的。你真正核心的人员参与的不是太多,我们整体把这一套方案引进来,然后测试,人力成本应该非常低。而且这个人力成本只是用一段时间,对于大规模的系统来说,几乎可以忽略不计,因为这一套系统,你说是原来的75倍,原来是2000万,你说75倍,那这个有多少钱呢。
比如我们的CDN系统,原来我们拿商用系统,在2010年的时候,单说用户体验提高,就是图片唰唰的出来跟一张一张的在那儿冒,这个对用户体验的影响很大,对用户体验提升是非常大的。对交易的促进都可以先不说,光算简单的硬件的投资,2010年那时候的规模大概是350G左右的能力吧,我们那时候整个成本,过去2000万,或者200万建一个节点,后来变成了30多万建一个节点,整体就省了1亿多的钱。这1亿多,相对于我们CDN核心的研发,大概也就10个人多一点。
所以,在2010年那时候的规模,在只有300多G的时候,我们省了1亿多元;现在我们是2400G的能力。那时候我们团队获得淘宝唯一的创新大奖,创新大奖那时候其中致辞里面说,未来五年这一套技术会给集团节约32亿的钱,因为每年规模都会不断的变大。只是硬件的这一块就可以节约这么多钱,相对来说,研发成本其实很低了。我们团队获得创新大奖,也奖励我们集体跑去澳大利亚转了一圈。
51CTO:按照这样说的话,成本这块其实还是挺好估算的。
章文嵩:对,这个估算可能落实到具体的项目,实际上算还是很容易算的。而且真正用了开源的技术,我们自己掌握了核心技术,碰到了问题想怎么干就怎么干。未来的发展也是,像我们的CDN系统也一直在改进。上面说的部分,2010年就结束了,2011年我们又引入了一些新的东西,比如说低功耗的服务器啊,把软件进一步的优化,2011年我们又做大节点的整合,比如说建40G的节点,因为要建2000多G的一个能力,不能还是10G、10G的一个一个建,这样节点数太多了。节点数多,管理上面会是一个挑战。
比如说北上广我们要建40G一个节点,整合之后就可以节约成本,存储空间都可以节约。事实上现在这个技术,我们用了自己的技术,我们就可以自己按新的方向,系统发展的规模不断的演进,不断的来改进它。用商用系统就没有机会了,用了就挂在上面了,因为那是黑盒子,想改也改不了。
其实像我们这么大的规模,商用软件也并不关注,因为全世界像我们这样规模的企业可能就这么几家。这么几家客户,给它再多的钱,实际上总收入不大。
刚刚我在演讲当中说,在交叉点的左侧,个人和中小企业这个规模更大,商用软件是给他们创造价值的;在我们那边它是不创造价值的,如果我们继续去用它,说明我们自己傻的,没有认清这个规模效应。
51CTO:那么您之前提到,2010年初,集团决定更多的做一些开源项目。将项目开源的结果,一个是有学生参与进来研究,一个是同行会开始使用这个项目,促进交流和项目的发展。那么,将项目开源之初是否设立了一些目标,比如做到怎样算是成功的,这个我们是如何进行量化的?因为您之前也提到,要将项目开源,工程师需要花三个月的时间将代码整一整,要如何让老板认识到这件事的价值?
章文嵩:代码整一整这个过程对大家都是有帮助的,可以把代码理的更干净。一方面,代码整一整,实际上相当于承认工程师的贡献,因为每个文件必须要写上作者的名字,这是对我们开发人员是很好的认可,当然他们也在意自己的声誉,花点时间把代码理得更干净,其实很多时候是自发的(而不是我们要求的)。实际上这是很好的,一方面我们的开发人员的成果得到了认可,另一方面又可以自发的把代码的质量改的更好。
另一方面,跟外部去交流的话,本身对于项目也会是一个促进,因为我们在公司面对的需求相对来说比较单一,别的公司如果再用,可能有别的需求,或者是发现我们软件有什么问题,这个时候软件也可以不断的完善。
51CTO:您刚才提到内部开源的流程,就是开源技术委员会。这个流程是怎么走法?
章文嵩:我们实际上开源一开始也没有设立什么目标。因为开源这个,一般都是从小开始做起,很多时候,我们鼓励还是先把它开源了,因为开源的项目本身也是不断的在迭代、演进的。所以一开始我们是要符合一些规章,比如说在软件开源不影响集团的一些核心业务的安全方面,那大部分时候是没问题的。你说具体我们开源要做成怎么样,没有太多的规划和目标的。
自然而然,我们的开发人员都自发的参与了这个过程。应该说整个阿里集团也是很开放的,相对来说企业文化也比较开放。我们的开发人员也喜欢做开源软件,这两方面的因素促使了在阿里开源推广还是不错的。基本上我们现在淘宝的很多基础软件开源到外面了。
51CTO:其实我问这个问题主要是,可能有一些公司的技术部,比如像新浪的技术想开源一些东西,但可能一个涉及到安全问题,一个涉及到工程师额外的一些工作,把一些数据剔除,写一些注释啊,把代码整理一下之类的,CTO有时候就没有办法跟老板说这个东西有什么好处,来推动这件事情。所以想问一下,你们这里有什么他们可以学习的,比如说固定的一些流程或者是评估的方式?
章文嵩:你刚刚讲的我们的开发人员发额外的时间,比如说补文档啊,把代码理的更清楚,实际上这本身我们的研发软件这是必要的。本身对软件是一个促进,对公司来说这是值得投资的。
51CTO:我觉得大部分公司好像都觉得软件能用就行了,对可维护性考虑的不多。
章文嵩:我们觉得软件不能光是当前能用,它未来也是要用的。随着规模不断的扩大,各方面新的需求进来,整个软件还是要不断的升级,不断的改进,这些维护,这些花时间,我觉得都是值得的,公司应该要投资的。
51CTO:其实是一个理念的问题,因为大部分的软件团队可能不是这么一个理想状态。您是如何处理理想状态和现实的一个平衡的?
章文嵩:那其实还是回到量化这个题目上。具体项目我们可以量化,但是整体我们阿里开源了,对整个集团的技术品牌有多大的促进,促进当然很大,但是量化还是蛮难的一个事情,我们获得的好处也是蛮多的。比如说很多技术人员愿意加入到我们这样的开发团队,我们校招的时候,学生很愿意来我们这样的团队,很愿意来阿里。
开源这个真正对公司的技术品牌产生了多大的影响,有时候很难去评估。像我们现在去校招,很多学生看过TFS,Tair这些代码,那时候对校园招聘是一个很大的促进。这方面的促进怎么去量化,怎么去评估,很难。例如,我们花了很多钱搞了3000多人参加的技术盛会—阿里技术嘉年华,我们想搞个模型来评估这项活动对阿里技术品牌促进,然后我们可以把他算一个数值出来去跟老板说,一直还没找到这个模型(笑)。
51CTO:比如像Tair这样的一个项目,它的整个流程是怎么样的?
章文嵩:最早的Tair、TFS、OceanBase,都正好在我们核心系统部门,我们来推动这个事。前面也讲了,我们Tair开源,一开始是2010年3月份我们说要开源,真正开源要到6月份了,确实我们的开发人员花了三个月的时间,去整理代码,编写一些文档,当然现在文档其实也还比较缺少,但是这是一个过程。一方面我们先把代码开出来了,文档也进一步的完善,外部的用户也可以参与完善我们这些的文档,也确实有用户给我们反映bug,或者寄patch过来,这对整个开源项目挺好的。像TFS来说,新浪微博有用,新浪微博在国内存图片的规模也够大的。
51CTO:TFS这个项目当时启动是一个什么情况?
章文嵩:TFS在淘宝蛮早就启动了,当时是我们淘宝第一技术高手,像多隆大侠,在2006年底就开始做了。
51CTO:那TFS到了2010年的时候,工程师想把这个东西开源,那时候具体怎么做的?那时候应该还没有委员会吧。
章文嵩:对,那时候我们还在淘宝,我们淘宝的CTO,他审批通过了,同意开源了,就可以开源了。当时淘宝的CTO是吴泳铭,他很支持开源。
51CTO:安全方面的审核也是他来做吗?
章文嵩:安全方面审核不是,有另一个团队。我们公司内部有一个安全的团队,主要是检查里面有没有配置文件,或者是代码里面含有线上的一些数据,比如说IP地址或者是账户这些信息,这些信息不应该放在里面,万一在里面的话,我们的系统可能受到影响。把这些信息拿掉就可以了。比如说哈希函数,一些initial的seed,这些不能够放出去。如果里面确实有一些静态的seed,这些都要拿掉,至少要跟我们现在的不一样。静态的seed跟random seed不一样,不管哪台机器做都是一样的,那么这些哈希函数,比如一致性哈希,里面的initial
seed肯定是好几台都一样的。这个seed不能放在外面,尤其是跟外面交互的系统,如果知道的话,我们就会受到攻击。
51CTO:像我昨天看到一个项目是讲你们静态化的,后来有人说静态化放出来可能比较危险,会不会有一些项目本身就觉得放出来不是很安全。
章文嵩:不会,静态化这个思路应该没有问题。其实大部分的项目都不会存在安全的问题。
而且我自己个人觉得,像阿里、淘宝这么大规模的公司,我们真正的核心竞争力,是在我们商业上面,是在我们的业务上面。那些业务上面的架构,真正核心是存在于数据中间,而不是软件。软件表示我们有能力未来可以做更大规模的系统,或者是更多的一些新的需求。真正数据是日积月累下来的。比如说淘宝上面的用户交易的数据,每个人用户的诚信记录,卖家的诚信记录都在上面。假设有人把淘宝的很多软件拿过来,找到合适的人也开发了这样的一个平台——实际上也不是那么困难,只要找对人,一定可以做出来。但是你要跟淘宝这样的平台竞争,很难竞争。因为淘宝上面有很多数据,这些数据就像一个社会有很多的信用记录在那个地方,那个地方是空白的,你说人们愿意在什么地方交易啊。
所以说淘宝积累下的是数据的优势。因为数据是拿不走的,所以这个优势是巨大的,而且这个优势越积累越大。软件肯定也是一部分,但是我们要拥有人才而不是拥有一个软件。我们有了人,才可以解决未来更大规模的一些挑战,更多的一些需求。
51CTO:所以说其实现在也是一样的,CTO审查,安全团队看一下,没问题可以发,那发出去之后呢,还是由工程师自己操作?
章文嵩:对,一方面看代码用什么样的License。我们一般会推荐用GPL,因为我们自己觉得整个开源软件的基石还是GPL。你用了GPL,你获得的权利同样要传递下去,要另一个接收方获得相同的权利,确保整个软件是开源的。就像Linux内核是开源的,它是GPL的,在Linux内核上面的工作,大部分都是开源的,除非是写模块的,这就整体保证了Linux内核很有效的发展。
我们可以看到,比Linux内核更早的BSD,伯克利很早就把它开源出来了,它是用的BSD的许可。那么思科在1986年就创建了一个系统,其中也用了很多BSD内核做路由器,发展了它的IOS,Internetworking Operating System,都是在BSD上做了很多修改和改进。但是思科不会反馈给BSD的内核。那时候思科的路由器卖了很多,他们做了很多改进,但是它不会反馈——因为BSD协议是很宽松的。同样苹果的iOS,也是用了BSD的很多东西。同样也不会反馈回来。
同时,BSD因为license过于宽松,我个人觉得另一方面也导致了core team——就是BSD的kernel team——比较封闭,导致这个BSD这么多年,虽然起步很早——那时候的成熟度和应用度都还不错,但是后来发展越来越缓慢了。
所以我们一般是推荐用GPL。我自己也觉得开源的世界里面,基石的license还是GPL,包括自由软件基金会那套GNU的工具,确实确保了整个开源世界一个有序的发展。
当然我们也有开发人员根据自己的喜好选择license,比如Hadoop相关的,比如Hive,那么我们的贡献自然用的是Apache的许可。这就是属于跟随上游的一些项目,上游用什么,我们就用什么。
51CTO:明白了。那么下一个问题主要是有关托管平台的。为什么我们当时选择了自己开发一个淘蝌蚪的平台,甚至现在同时运作了三个开源托管平台,而没有使用更加成熟的Github?
章文嵩:我们原来做淘蝌蚪项目的时候,看到Github确实比较成熟,但是那个平台本身的平台软件不开源。Github背后也是一个商业公司,在做开源方面不是那么纯粹。而且还有一个因素,就是Github在海外,国内的用户访问的速度,包括用户的习惯,语言方面的习惯,可能也不是跟我们中国人很吻合。那时候我们就想,我们干脆做一个完全开源的开源平台,要符合国人习惯的。我们内部开发人员也很有兴趣,我们就搭建了一个,当这个平台搭建之后,也需要持续的维护改进,我们现在很多开发人员都是业余时间做这个事情,主要时间还是要做本职工作的。所以这些平台的改进,也断断续续的在发展。
51CTO:这个项目没有一个独立的项目组?
章文嵩:我们都是虚拟小组。这个事情我们最近又把下一步做一些规划,比如淘蝌蚪和阿里的开源平台怎么整合,已经有一个虚拟的团队准备做这个事情——在忙过双十一、双十二之后。
51CTO:这个平台为什么选择SVN的方式呢?
章文嵩:SVN比较简单。那时候公司内部用SVN比较多,git是我们内核团队在用,其他的团队用的少。当然现在迁到git的也越来越多了,我们后续也在考虑把git加到我们的开源平台上面去。
51CTO:那么,现在平台上外部贡献者的整体情况如何?
章文嵩:目前在淘蝌蚪的平台上,大概可能有350多个项目吧,真正阿里在上面开源的自己的项目大概是100来个,大部分还是外部的。当然,比较大型的项目还是阿里多一些,比如TFS,Oceanbase,Tair这些。
51CTO:那比如说,新浪微博给TFS贡献过代码么?
章文嵩:目前好象还没有。他们会提出来一些需求,我们会帮着解决。
51CTO:相当于他们有提交bug或者是request?
章文嵩:对。再比如说我们Tengine要发布,也收到一些bug的报告,包括bug fix其实也有收到过。
51CTO:你们有么有做过这方面的统计,来自外部的这些贡献多吗?
章文嵩:多倒不是太多,但是有。
51CTO:这方面没有想过做些什么事情促进?
章文嵩:其实我们现在把代码、文档都放出来了,但是还有一些,比如说我们的bug tracking,原来我们TFS的bug tracking用的是内部的,那么就有一些外部的朋友跟我抱怨,说你们那个issue system为什么不开源,起码让我知道你有哪些issue还在。我知道了,我心里更清楚有哪些坑,我就更敢用了。这方面我们还很值得改进。
其实我们现在很多代码的提交都放在外面了,并不是说我内部开发一段时间,再一次性的放出去,我是让所有的开发过程已经放出来了。所以像bug tracking,issue system这些,我们以后也应该把它们放出来。
51CTO:现在淘蝌蚪上的issue系统不是跟你们内部系统一起的?
章文嵩:没有。我们内部TFS还有其他独立的测试团队在用原来比较熟悉的系统。
51CTO:用的哪些系统,可以介绍一下么?
章文嵩:阿里内部有好几个,有克魯德,还有bugfree。后续我们也想推进这个事,因为将bug tracking和issue tracking放出来之后,大家也会知道我们现在项目上还有哪些bug未解决,哪些是known issue。
51CTO:那我们就期待啦。那么最后一个问题,是一个国际化的问题,因为双十一之后,Hacker News上也在讨论,说淘宝的人是不是也应该到英文界去说一说之类的。你们这边有计划跟英文的开源界做更多的交流么?
章文嵩:对,我们也正在考虑这个事情。包括这次跟O'Reilly的资深副总裁Gina和Mike都在讲,整个我们双十一的访问量,面对的挑战,包括平台的交易额。我刚刚演讲特意讲我们191亿的平台交易额,比美国所有电子商务网站加起来,比如说感恩节,Black Friday,Cyber Monday等等,所有加起来都没有我们大。整个淘宝天猫的平台今年交易额到一万亿,一万亿也是一个很大的数目,我们已经是全世界最大的电子商务公司,比eBay加上亚马逊平台的交易额之和还要大。确实我们应该跟他们讲,他们也感兴趣,我们也在想,通过多个渠道,到国外做一些技术分享和交流。明年吧:)
当然,我们可以把好的项目增加一些英文的文档,提升一下我们国内的开源开发者在国际上的影响力。
51CTO:好的。那么本次问题就到这里,十分感谢您接受我们的采访!