前阿里云CTO章文嵩:怎样做开源才有意义?
阿里云CTO章文嵩已于昨日离职,据传加盟滴滴。可靠消息透露,章文嵩在滴滴出行担任的是技术高级副总裁的职位。这样一个身价上亿的技术大牛,是怎么看待开源项目的?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会解决很多问题,我们已经开源了。然后他就把它架起来,我们也提供一定的帮助。这在阿里投资新浪微博前就发生了。我们一方面自己研发的有可能会开源出来,另一方面我们在开源的项目上再做了一个开源项目。InfoQ:阿里总体来说还是一个业务导向的公司,研发过程肯定是产品导向,而不是说先有spec,基于spec去做,一切目的是快速完成产品经理的需求,这个是首要的任务。开源社区基本上正好过程是反过来的:他们先去讨论,我有这么个想法,这么做对不对。然后大家讨论说,你的想法好,按照你的做法去做吧,然后这样才出来实现。我听说阿里也有因为类似的原因,没有被上游认可的Patch。从业务的角度,
“产品优先”才是正确的;但是从工程的角度,可能是“思路验证优先”是更正确的。您怎么去做这个平衡?章文嵩:我觉得要分开来看这个问题。我们开源的东西往往是有共用的一些价值,可以拿到别的应用场景复用的,这样开源才有意义。你刚刚说那个业务上产品导向也没错,比如淘宝跟天猫的平台上面,我们有四千多个应用,应用开发本身我们要业务导向,要做的很快,那没错。但是我们里面沉淀了一些东西,下面的中间件或者底层的研发平台,这种底层的支撑平台、基础平台这方面来说实际上有共通性,那这方面可能更容易开源。这方面的变化节奏,就不像上面的业务会来的那么快,而且本身我们做一个底层或者中间件,肯定都会考虑不光是一个应用要用,很多其他的应用也会用。所以这里面赋予我们开发的时间,包括架构的设计时间会更长。往往开源的项目是属于那些有共用的,相对偏底层的一些偏基础的一些东西,所以这两者我觉得如果分开来看不会那么多矛盾了。我们当然响应业务的需求,怎么把上面的应用、产品做得更快,那我们的开源的大部分是有一些共用价值的东西,可以有更多的时间来做,而且要好好规划的,不光是为一个产品来做,要为更多的产品来做。InfoQ:有关自研的选择。一般来说团队去选择自研方案,首先可能是因为有一些开源的实现,但是不够成熟,而业务又马上需要。要么另一种原因就是说,我觉得我有信心,做的比现在的那些方案都好,才去这么做。但是如果业务不是马上需要的情况,其实也可以等他们过两年,然后开源项目就成熟,就变成可用的了。但是这个时机可能也是会比较早的,就是先进去做有可能就成炮灰了,所以到这种情况就有三个选择:第一个选择就是我立刻把所有兵力都投进去,然后搞自研,拼一把;第二个选择是我找一个看起来还不错的开源项目,我去投人进去,然后把它搞起来,以后如果这个项目发展起来,我就有主导权;第三个选择是我先观望两年再说,如果是你来选择的话,如果有一个领域你觉得挺有前景的,但是现在处在这个时间段,你会怎么选择?章文嵩:我会选择第二种。我会先看开源的解决方案,有哪些可能的方案存在。我们会去评估一下这些开源方案,它目前的所处的状态、成熟度怎么样,有哪些功能是我们期望拿到的,可能有哪一些目前还没有做到,也会评估我们能不能在这个基础上,在上面加东西。如果整个框架可以很容易去扩展,里面加东西也比较灵活方便的话,那至少跟我们定义想做的东西是匹配的。长远来说架构上面如果没什么大的冲突,那我们在上面发展,实际上是非常好的事情,一方面可以节约人力投入,自己可能少走一些弯路,将来还有机会可能参与到整个社区里面。社区的话,不光是我们一家公司在做,有可能很多家公司都在做,大家如果形成一个生态系统,每家公司的投入相对都会少。关键是这个开源的东西是不是服务我们的业务,如果服务我们的业务很好,我们投入的人少,那何乐而不为。我会倾向你所说的第二种;除非是评估了一圈没有合适的,但我们想做的东西又可能不远的将来马上要要,那我们有可能会选择自己去先投入去看一看,先尝试一下,这也是有可能的。InfoQ:现在有一种说法是,开源的发展促进了IT行业人才的流动。比如说这个人在一个公司搞内核,或者是搞OpenStack,或者是Ceph、Hadoop这样的,那么这个东西是通的。假设说他想去换一个公司,到了新公司如果也用一样的架构,他就可以经验立刻复用了。但是如果到了新公司,他的技术体系是另外一套,他不管有多少经验,先得把这套东西再学一遍,学个几星期、几个月,然后才能有真正的贡献。但是现在国内的情况,几个互联网巨头,包括像阿里也是有很多私有的项目或者分支,会造成上述的问题。你对这个问题是怎么看的?是觉得它不可避免,还是可以改进?章文嵩:你问的是很好的一个问题。我觉得要看这个产品上面获得的竞争力对整个公司的业务的重要程度来定。拿淘宝、天猫来说,我们真正是建一个大规模的交易平台,在上面的很多业务做的好坏就是靠数据,比如说信用模型,用户的交易记录,导致每一个商家都有相应的信用的数据,然后消费者也有信用的数据。实际上对整个淘宝、天猫来说,这个数据是最关键的,数据是日积月累,拿不走。所以数据是我们最关键的竞争力。软件当然是我们的一种能力。我们能实现这么大规模的一个平台的能力,我们把它开源出去,对我们核心的业务价值不会有什么损失,别人拿这个软件再建另一套淘宝、天猫,也很难与此竞争的。因为如果建一个软件的平台,要找到合适的人,大概花一些时间也能建出来,但建出来在这个平台上没有任何数据,那试问一个消费者,他愿意在淘宝、天猫的平台上做交易,还是跑到一个空空如也的平台上做交易?那显然应该是前者。当然阿里本身也很开放,所以淘宝、天猫的很多技术平台我们已经对外开源了。那是不是我们有产品是没开源的?当然有了。比如说我们目前的飞天平台是没对外开源的。飞天能处理五千台或者未来上万台的一个规模,是大规模的数据处理、存储,基本上是分布式的一个操作系统平台。对阿里来说,这也是非常大的一个竞争力,尤其在云计算上面。如果要保持这个竞争力,当然目前的状态,目前是没有开源。除非有一天,我自己个人的一个想法就是,如果将来我们的云计算的规模、优势已经非常大了,我们已经不再担心别人拿我们的软件再去搭一套平台跟我们竞争,我们竞争优势已经在别的方面了,那开源也是有可能的。所以我觉得这个是不是用开源不开源,是用不同的状态来看待这个问题的。InfoQ:最后一个问题是关于开源本身。开源模式的价值,其实它最大价值是说我可以在全球范围内去找到用户和贡献者,不分任何的国界。其实包括LVS项目的成功,其实很大一部分原因也是,它一开始就是以国际化的项目去做的,所以你认为有必要纠结于国产的开源项目,或者是由国人发起来的开源项目这种说法?开源项目是否都以国际化的思路去做会比较好?章文嵩:我觉得关键是看自己面对的客户群。如果我们的客户群都在国内,那没必要,如果整个网页都写成中文的,用户会更接近,更容易使用,这是最关键的。如果我们的客户群是全世界的,当然要让全世界的用户更容易的了解我们的项目,就要用英文来做。我觉得不存在国产的或者国际的开源项目,关键看我们的定位。1998年我做LVS项目的时候,说那时候也没有太多选择,因为那时候很多开源项目的邮件列表都是在海外,那肯定做了一样东西,要让全世界更多的人来了解,所以那时候一上来LVS的网站,一开始都是用英文写,做了哪个版本发布,哪些功能,都是跑到邮件列表里去发邮件,用英文发。回过头来,还是我们这个开源项目的客户群来决定的。
前阿里云CTO章文嵩:怎样做开源才有意义?的更多相关文章
- 章文嵩博士和他背后的负载均衡(LOAD BANLANCER)帝国
案首语: 阿里集团技术大牛,@正明,淘宝基础核心软件研发负责人.LVS创始人.阿里云首席科学家章文嵩博士从阿里离职,去追求技术人生另一段历程,让阿里像我一样的很多热爱技术的工程师都有一丝牵动和感触. ...
- 阿里云RDS与ECS服务器数据库做主从
阿里云RDS与ECS服务器数据库做主从 [精] 里云RDS(数据库)基于飞天大规模分布式计算和存储能力,提供超高性价比的单机版实例,同时利用读写分离横向扩展读能力,满足网站类的业务需求.提供稳定.高性 ...
- 《一马当先 O2O创业真人秀》阿里云创客+项目提交报名中
传统行业与互联网的相互融合,线上与线下的互通,正在掀起一股“互联网+”新风潮和创业热潮.支付宝钱包.快的打车.淘点点……这些耳熟能详的应用早已成为人们生活的一部分.而越来越多的“互联网+”创新项目,将 ...
- 【¥200代金券、iPad等您来拿】 阿里云9大产品免费公测#10月9日-11月6日#
#10.09-11.06#200元代金券.iPad大奖, 9大产品评测活动! 亲爱的阿里云小伙伴们: 云产品的多样性(更多的云产品)也是让用户深度使用云计算的关键.今年阿里云产品线越来越丰富,小云搜罗 ...
- 【IT名人堂】何云飞:阿里云数据库的架构演进之路
[IT名人堂]何云飞:阿里云数据库的架构演进之路 原文转载自:IT168 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了“云服务+数据”, ...
- nrf9160做主控连接阿里云——(mqtt_simple例程)
简介:基本每一个云都支持MQTT,这种轻量级协议在数据量不大的应用上是一个很好的选择.上一篇博客使用SLM例程去连接了阿里云,本次使用mqtt_simple去连接云进行测试,关于一些已近在前面文章中演 ...
- 阿里云视频点播 php开发
先购买开通阿里云的<视频点播>服务,视频点播 可以购买套餐 ,我在项目中使用的是299套餐 开发前在<用户信息管理>生成Access Key Secret,开发密钥使用 阿里云 ...
- 【阿里云-大数据】阿里云DataWorks学习视频汇总
阿里云DataWorks学习视频汇总 注意:本文档中引用的视频均来自阿里云官方的帮助文档,本文档仅仅是汇总整理,方便学习. 阿里云DataWorks帮助文档链接:https://help.aliyun ...
- 阿里云函数计算发布新功能,支持容器镜像,加速应用 Serverless 进程
我们先通过一段视频来看看函数计算和容器相结合后,在视频转码场景下的优秀表现.点击观看视频 >> FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维. ...
随机推荐
- 同门不同类—创新Aurvana Live2/Air简评(附随身视听设备心路历程)
(注,本文把live2/air并成一起写的,同时本人是木耳,请轻拍) 本命年各种坏东西,很是无语,终于坏到耳塞耳机了来了,之前用的拜亚DT235无缘无故就一边不响了,无奈只能扔了. 纠结了好几个月,终 ...
- Spring拦截器 /* 和 /** 的区别
SpringMVC 拦截器拦截 /* 和 /** 的区别: /* : 匹配一级,即 /add , /query 等 /** : 匹配多级,即 /add , /add/user, /add/user/u ...
- Activity 中的Toast在Activity销毁后报错,解决方法,把context改成应用的
ToastUtil.showShort(context, R.string.connection_fail); 改成 ToastUtil.showShort(BusinesslinkApplicati ...
- 《AndroidStudio每日一贴》11. 重构之提炼为常量
提炼为常量是从暂时变量高速提炼出静态常量,这也是我们经常使用的重构手段. 很多其它有用技巧请查看<AndroidStudio有用指南> 操作步骤: ➤ 菜单条: Refactor -> ...
- sass01
Chrome --流行的浏览器,及前端开发调试工具 WebStorm --强大的跨平台前端集成开发环境 Sublime Text --神器级别的代码编辑器,如vim般强大,而上手难度极低. ----- ...
- Linux系统的LOG日志文件及入侵后日志的清除
UNIX网管员主要是靠系统的LOG,来获得入侵的痕迹.当然也有第三方工具记录入侵系统的 痕迹,UNIX系统存放LOG文件,普通位置如下: /usr/adm - 早期版本的UNIX/var/adm - ...
- TwinCAT 3中基于UDP协议通讯的C++实现
因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函 ...
- ES6学习笔记(十)代理器Proxy
Java可以使用面向切面(AOP)的方法来实现某些统一的操作,比如某个操作的前置通知,后置通知等等,这种操作非常方便,其本质便是动态代理,JS的代理Proxy代理该如何使用呢? 某位大神的实现如下: ...
- 【Django】Cookie
目录 Cookie介绍 操作Cookie 获取Cookie 设置 Cookie 删除Cookie @ Cookie介绍 Cookie的由来 大家都知道==HTTP协议是无状态的==. ==无状态的的意 ...
- Comput_picture
import requestsfrom pyquery import PyQuerycount = 1url = "https://www.169tp.com/diannaobizhi/&q ...