章文嵩:怎样做开源才有意义?

个人简介 章文嵩,阿里云技术副总裁,核心系统负责人,主要负责基础核心软件研发、推进网络软硬件方面的性能优化、搭建下一代高可扩展低碳低成本的淘宝电子商务基础设施。他也是Linux内核的开发者,著名的Linux集群项目—LVS(Linux Virtual Server)的创始人和主要开发人员,LVS集群代码已在Linux 2.4和2.6的官方内核中,并得到广泛的应用。在架构大型系统、系统软件开发、Linux操作系统、网络和软件开发管理上有着丰富的经验。他一直在自由软件的开发上花费时间,并积极推动开源活动在中国的发展。

全球架构师峰会(International Architect Summit,下简称ArchSummit)是由InfoQ中文站主办的一次全球性架构师峰会。ArchSummit专门针对架构师人群,讲述与架构和架构师相关的各方面趋势、技术和案例。,这也是继QCon之后,InfoQ中文站主办的又一次高端技术盛会。

   

1. 大家好,我是InfoQ的主持人,现在在架构师峰会现场。今天我们很高兴邀请到阿里云的技术负责人章文嵩博士来接受我们的采访。第一个问题是有关淘宝-阿里系的开源进程,我们从外面看起来似乎是有三个比较明显的阶段:第一个是说我引入开源的方案来替换掉商业的方案;第二个是我们把开源的方案改进,然后形成一些淘宝自己的T项目,再通过淘蝌蚪等平台把这些项目对外开源;第三个阶段好像是现在在用自研的方案去替换一些开源的方案。您自己是怎么看待这个过程的?

章文嵩:这应该是我们发展的不同阶段。那一开始当然,拿淘宝来说,早年业务的发展很迅速,我关注怎么样快速的能交付,那时候用了很多商用的产品。但是很多商用的产品,随着规模慢慢增大了,商用的产品是不能支撑的,因为商用的产品对我们来说是黑盒子,碰到问题解决的时间周期就特别长,而我们在线上出任何问题,都是需要第一时间去修复的,所以这个黑盒子基本上对我们来说,很多年以前,2009年以前就已经不能接受了。

比如说淘宝的图片,最早存在NetApp上面,NetApp到2006年就支撑不了。它比较好笑的问题是,我们用NetApp最高端的设备,存储容量还够,但是文件数已经放不下了,因为我们存的图片都是小文件。但是NetApp我们一台放不下,他们就建议我们一台不够换两台,两台不够换四台,那时候就逼得我们不得不自己去研发一个更低成本的,更扩展式的一个分布式存储系统。

我们就自己做,2007年上线,项目名字叫TFS,就是淘宝File System,在2010年9月份我们把它开源了。我们现在的TFS目前存了四十多P的内容,开源的版本就是我们自己用的版本,而且在TFS上我们实际上做了很多架构的取舍,针对这种图片存储已经优化的相对比较极致。所以TFS在性能、价格、稳定性、规模这些方面还很有优势的,我相信在未来很多年会继续存在。

你刚才说第三个阶段是拿自研取代开源的,这个就要看了。我们如果自研的有一些优势,像TFS是自研的也是开源的,但我们每回替换的过程中总是要有收获,比如是不是这东西做得更好了,成本是不是更低,性能更好。我们还是需要拿数据来说话,所以这个可能性都是存在的。

比如WebServer,过去最早阿里是用Apache,然后到2010年我们逐步换成Nginx。Nginx的社区相对来说比较封闭,我们提供的patch,收录的速度很慢,我们做了很多的功能,Nginx上游接受的速度很慢。可能因为它本身背后有一个商业公司,做得Feature跟我们做的Feature很类似。后来我们就不得不Fork了一个项目Tengine,就你所说的T项目,Tengine目前也是完全开源的,开源的版本跟我们用的版本一样,现在是第九大最流行的WebServer之一,目前国内很多公司在用,海外也有。这种可能性都存在。像TFS新浪微博在用,新浪微博的很多图片也存在上面。原来我一个早先的同事正好在那边做存储项目,然后我当然给他建议,用TFS会解决很多问题,我们已经开源了。然后他就把它架起来,我们也提供一定的帮助。这在阿里投资新浪微博前就发生了。

我们一方面自己研发的有可能会开源出来,另一方面我们在开源的项目上再做了一个开源项目。

   

2. 阿里总体来说还是一个业务导向的公司,研发过程肯定是产品导向,而不是说先有spec,基于spec去做,一切目的是快速完成产品经理的需求,这个是首要的任务。开源社区基本上正好过程是反过来的:他们先去讨论,我有这么个想法,这么做对不对。然后大家讨论说,你的想法好,按照你的做法去做吧,然后这样才出来实现。所以他就有个矛盾,就比如说Google做Android,Android代码一开始它是被内核社区曾经驱逐过。就是他们先做出来了,然后放进去,但是之前没有讨论,所以社区的人就不接受。我听说阿里也有因为类似的原因,没有被上游认可的Patch。从业务的角度, “产品优先”才是正确的;但是从工程的角度,可能是“思路验证优先”是更正确的。您怎么去做这个平衡?

章文嵩:我觉得要分开来看这个问题。我们开源的东西往往是有共用的一些价值,可以拿到别的应用场景复用的,这样开源才有意义。你刚刚说那个业务上产品导向也没错,比如淘宝跟天猫的平台上面,我们有四千多个应用,应用开发本身我们要业务导向,要做的很快,那没错。但是我们里面沉淀了一些东西,下面的中间件或者底层的研发平台,这种底层的支撑平台、基础平台这方面来说实际上有共通性,那这方面可能更容易开源。这方面的变化节奏,就不像上面的业务会来的那么快,而且本身我们做一个底层或者中间件,肯定都会考虑不光是一个应用要用,很多其他的应用也会用。所以这里面赋予我们开发的时间,包括架构的设计时间会更长。

往往开源的项目是属于那些有共用的,相对偏底层的一些偏基础的一些东西,所以这两者我觉得如果分开来看不会那么多矛盾了。我们当然响应业务的需求,怎么把上面的应用、产品做得更快,那我们的开源的大部分是有一些共用价值的东西,可以有更多的时间来做,而且要好好规划的,不光是为一个产品来做,要为更多的产品来做。

   

3. 第三个问题是有关自研的选择。一般来说团队去选择自研方案,首先可能是因为有一些开源的实现,但是不够成熟,但是业务又马上需要。要么另一种原因就是说,我觉得我有信心,做的比现在的那些方案都好,才去这么做。但是如果业务不是马上需要的情况,其实也可以等他们过两年,然后开源项目就成熟,就变成可用的了。但是这个时机可能也是会比较早的,就是先进去做有可能就成炮灰了,所以到这种情况就有三个选择:第一个选择就是我立刻把所有兵力都投进去,然后搞自研,拼一把;第二个选择是我找一个看起来还不错的开源项目,我去投人进去,然后把它搞起来,以后如果这个项目发展起来,我就有主导权;第三个选择是我先观望两年再说,如果是你来选择的话,如果有一个领域你觉得挺有前景的,但是现在处在这个时间段,你会怎么选择?

章文嵩:我会选择第二种。我会先看开源的解决方案,有哪些可能的方案存在。我们会去评估一下这些开源方案,它目前的所处的状态、成熟度怎么样,有哪些功能是我们期望拿到的,可能有哪一些目前还没有做到,也会评估我们能不能在这个基础上,在上面加东西。如果整个框架可以很容易去扩展,里面加东西也比较灵活方便的话,那至少跟我们定义想做的东西是匹配的。长远来说架构上面如果没什么大的冲突,那我们在上面发展,实际上是非常好的事情,一方面可以节约人力投入,自己可能少走一些弯路,将来还有机会可能参与到整个社区里面。社区的话,不光是我们一家公司在做,有可能很多家公司都在做,大家如果形成一个生态系统,每家公司的投入相对都会少。

关键是这个开源的东西是不是服务我们的业务,如果服务我们的业务很好,我们投入的人少,那何乐而不为。我会倾向你所说的第二种;除非是评估了一圈没有合适的,但我们想做的东西又可能不远的将来马上要要,那我们有可能会选择自己去先投入去看一看,先尝试一下,这也是有可能的。

   

4. 不会担心以后对项目失去掌控权,因为大家都在往里头做?

章文嵩:我觉得这个不用担心。我们不说掌控权,大部分说影响力,这个影响力是看我们对这个开源项目的贡献来定的。大家也知道,因为在社区贡献,大家做的贡献多,影响力自然就会大起来。

即便不行,碰到情况,假设原来的社区碰到问题,我们也可以在这个基础上fork出来做另一个开源项目,我觉得未来这个路径都是通的,我觉得不存在太大的问题。

   

5. 第四个问题,现在有一种说法是,开源的发展促进了IT行业人才的流动。比如说这个人在一个公司搞内核,或者是搞OpenStack,或者是Ceph、Hadoop这样的,那么这个东西是通的。假设说他想去换一个公司,到了新公司如果也用一样的架构,他就可以经验立刻复用了。但是如果到了新公司,他的技术体系是另外一套,他不管有多少经验,先得把这套东西再学一遍,学个几星期、几个月,然后才能有真正的贡献。但是现在国内的情况,几个互联网巨头,包括像阿里也是有很多私有的项目或者分支,会造成上述的问题。你对这个问题是怎么看的?是觉得它不可避免,还是可以改进?

章文嵩:你问的是很好的一个问题。我觉得要看这个产品上面获得的竞争力对整个公司的业务的重要程度来定。拿淘宝、天猫来说,我们真正是建一个大规模的交易平台,在上面的很多业务做的好坏就是靠数据,比如说信用模型,用户的交易记录,导致每一个商家都有相应的信用的数据,然后消费者也有信用的数据。实际上对整个淘宝、天猫来说,这个数据是最关键的,数据是日积月累,拿不走。所以数据是我们最关键的竞争力。

软件当然是我们的一种能力。我们能实现这么大规模的一个平台的能力,我们把它开源出去,对我们核心的业务价值不会有什么损失,别人拿这个软件再建另一套淘宝、天猫,也很难与此竞争的。因为如果建一个软件的平台,要找到合适的人,大概花一些时间也能建出来,但建出来在这个平台上没有任何数据,那试问一个消费者,他愿意在淘宝、天猫的平台上做交易,还是跑到一个空空如也的平台上做交易?那显然应该是前者。当然阿里本身也很开放,所以淘宝、天猫的很多技术平台我们已经对外开源了。

那是不是我们有产品是没开源的?当然有了。比如说我们目前的飞天平台是没对外开源的。飞天能处理五千台或者未来上万台的一个规模,是大规模的数据处理、存储,基本上是分布式的一个操作系统平台。对阿里来说,这也是非常大的一个竞争力,尤其在云计算上面。如果要保持这个竞争力,当然目前的状态,目前是没有开源。除非有一天,我自己个人的一个想法就是,如果将来我们的云计算的规模、优势已经非常大了,我们已经不再担心别人拿我们的软件再去搭一套平台跟我们竞争,我们竞争优势已经在别的方面了,那开源也是有可能的。所以我觉得这个是不是用开源不开源,是用不同的状态来看待这个问题的。

   

6. 最后一个问题是关于开源本身。开源模式的价值,其实它最大价值是说我可以在全球范围内去找到用户和贡献者,不分任何的国界。其实包括LVS项目的成功,其实很大一部分原因也是,它一开始就是以国际化的项目去做的,所以你认为有必要纠结于国产的开源项目,或者是由国人发起来的开源项目这种说法?开源项目是否都以国际化的思路去做会比较好?

章文嵩:我觉得关键是看自己面对的客户群。如果我们的客户群都在国内,那没必要,如果整个网页都写成中文的,用户会更接近,更容易使用,这是最关键的。如果我们的客户群是全世界的,当然要让全世界的用户更容易的了解我们的项目,就要用英文来做。我觉得不存在国产的或者国际的开源项目,关键看我们的定位。

1998年我做LVS项目的时候,说那时候也没有太多选择,因为那时候很多开源项目的邮件列表都是在海外,那肯定做了一样东西,要让全世界更多的人来了解,所以那时候一上来LVS的网站,一开始都是用英文写,做了哪个版本发布,哪些功能,都是跑到邮件列表里去发邮件,用英文发。回过头来,还是我们这个开源项目的客户群来决定的。

InfoQ:十分感谢章博士接受我们的采访。

章文嵩:谢谢。

   

7. 就是说,如果平台足够好,这种技术人才流动需要学习额外的东西,他的代价是值得付出的?

章文嵩:对,当然对公司来说也是要看,投入的成本、人员的学习成本都要考虑,我为了获得一定的竞争优势,愿不愿意花这么大的代价。如果评估出来是愿意的,那没问题。

你可能感兴趣的:(章文嵩:怎样做开源才有意义?)