过去 10 年,阿里在开源圈做了什么?
以下文章来源于InfoQ ,作者赵钰莹
公众号关注 “GitHubDaily”
设为 “星标”,每天带你逛 GitHub!
在圈内,开源一度被称为 “集市”。相对封闭严格的传统企业 IT 文化,开源更强调自由开放的社区文化。InfoQ 追踪阿里巴巴多年,找到了阿里巴巴整个开源发展过程中的数位关键” 赶集人 “,试图了解这一中国近十年极具代表性的科技公司的开源历史。
过去十年,阿里巴巴经历了淘宝的壮大,阿里云计算的成立,上市,双 11 节节攀升的流量,每一个阶段都有其存在的意义和目标,开源也随着这些变化而在不同的时期表现出不一样的状态。不变的是,阿里这群 “赶集人” 探索出了一条自主开源的道路,一走就是十个年头。
2008 年 ——2010 年:Dubbo 初出茅庐,Fastjson 还在酝酿,一众有着开源精神的开发者加入
2008 年对中国人来说是复杂的一年,冰灾,大地震,奥运会接踵而至。这一年,Dubbo 项目诞生了,只是当时还没有叫 Dubbo 这个名字,还是阿里内部的一个系统,所有人恐怕都想象不到,这个项目日后可以成为阿里巴巴整个开源历史最好的 “见证者”,并在十年后得到了如此多开发者的欢迎。
Dubbo 初创团队
这一年,Ant Design 项目的核心推动者玉伯赶在奥运会排查临时人口之前,从北京中科院软件所离开,凭着自己几年来在程序开发上的经历和对新兴前端行业的看好,来到杭州加入了淘宝 UED —— 彼时中国最好的前端团队。
这一年,Fastjson 和 Druid 项目的核心推动者高铁还在金蝶用 Java 开发一些基础组件;而如今 Flink 项目的核心推动者莫问早已因为马云在校招宣讲会上一场激情满满的演讲而热血沸腾,随后选择加入这家在北京还没有多少人的公司;《Java 开发手册》的主要作者孤尽也还不知道自己会在毕业之时依靠 “霸面” 进入阿里巴巴。
2009 年,Dubbo 团队的主要工作就是修复 Bug。2010 年,整个团队觉得这套架构实在是不堪重负,于是决定重写。
行业技术领袖章文嵩博士的到来,为阿里带来了他深耕多年的开源理想。他认为开源不仅能让技术本身受益,也会帮助让技术人成长。在章文嵩博士的大力倡导和支持下,开源文化在阿里这片土壤上逐渐萌芽,并有了健壮的生命力。当时的淘宝和阿里 B2B,已经有很多团队在推动开源。阿里 B2B 决定先将 Dubbo 项目开源出去,于是在 2011 年,整个团队陆续对文档做了系统化的梳理,但并没有进行大规模的强推广。
总体来看,这一时期,阿里巴巴的整个开源还处于朦胧状态,但已经有了初步探索,一批有着开源精神的工程师陆续加入。马云也把王坚从微软亚洲研究院常务副院长的位置挖来,开始计划如何解决计算力的问题,这是当时整个公司面临的重大危机,而阿里云就在这个契机诞生了。
2009 年 9 月 10 日,阿里巴巴集团庆祝创立十周年,同时成立阿里云计算。这一年,还没有多少人认为云计算可以搞得起来,更别提推动开源的发展了。
2011 年 ——2012 年:Dubbo 的用户越来越多,Fastjson 正式开源,开始基于 Hadoop 和 HBase 构建大数据体系
“阿里云成立之后,我感受最深的就是自研技术体系(飞天)的建立,这是我第一次强烈感觉到阿里非常重视技术,这个阶段也培养了很多技术实力很强的人才,也让我感受到阿里的技术体系越来越开放”,大数据实时计算引擎 Flink 带头人的莫问如是说道。
玉伯、高铁、孤尽、莫问...... 这群有着技术实力的开发者,同时有着强烈的开源情怀,他们的加入让阿里巴巴内部自发掀起了一波开源的高潮。这段时间,阿里巴巴内部出现了一众不错的开源项目,Fastjson、Druid、Sea.js、Arale 等。
“最开始进行软件开发时,我没有参与到太多的开源工作中,但一直对 Linux 有所接触,受到开源精神的影响,当时就觉得开源是一件非常伟大的事情,阿里内部当时的开源项目主要来自于淘宝系和 B2B 系。当时的淘宝系选用 GPL 协议居多,而 B2B 系选用 Apache 协议的比较多,我当时也就给 Fastjson 选了 Apache 的协议,而做 Druid 的时候其实没想开源,刚好当时 B2B 平台有一个开源计划,就一起开源出去了。” 高铁如是说。
阿里第一代开源人、FastJson&Druid 创始人高铁
这个时期,另一边的支付宝也在试图逃离闭门造轮子的怪圈。技术环境的割裂造就了前端基础技术的风潮和大量岗位,与当时国内大多数的前端团队一样,支付宝也在闭门造自己的前端轮子,大量借鉴了 YUI 的组件架构体系,底层使用了 Java 生态里的 MVN 进行依赖管理和构建,所有的轮子和钉子都要内部自造,和前端社区越来越远,而解决方法就是开源。
2012 年 4 月 29 日,玉伯发了条微博,宣布要用开源的方式打造支付宝下一代前端框架,这在当时是非常激进的。
后来,Sea.js/Arale/spm 套件开始在支付宝内部和国内开源界发展起来。
与此同时,Dubbo 也迎来了发展的小高峰,用户越来越多,包括做汽车的、做证券的、搞水泥、电器,甚至有公司愿意为 Dubbo 付钱,希望出现问题可以请团队的开发人员帮忙。
这一时期不仅出现了很多优秀的开源项目,阿里巴巴的开发者也开始积极贡献开源。莫问回忆道:“最开始,我们整个团队做开源并不是从 Flink 才开始的,早在 2010 年,我们就开始用开源的 Hadoop 和 HBase 搭建大数据体系,用于处理搜索场景中的数据,并把我们实践成果贡献给社区。”
相较于开源事业进展得如火如荼,阿里云的进展却并不顺利。从 2010 年到 2012 年,阿里云经过了最艰苦的三年。由于没有成绩进展,阿里云整个部门连续几年都在集团拿最低分,辞职信和转岗书陆续出现在王坚的邮箱里,几乎所有人都认定阿里云不可能做出一套云计算系统。
整个国内此时对云计算都没有太多感觉,对移动互联网的发展倒是颇为上心。
2012 年的双 11,天猫淘宝的总交易额从 2011 年的 52 亿人民币上升到 191 亿,打破了全球网购单日交易额记录,阿里坐稳了中国电商时代的霸主位置。
这时,移动化的浪潮来了。
在很多人还没有回过神的时候,微信在 2013 年 3 月份实现了用户过亿。当时的淘宝也做了手机端,但定位更多是 “多端”,意思是主要在电脑上,只是附加了手机端可以实现一些简单的功能。所有人都感受到了移动化将带来的巨变,阿里也开始寻求改变。
2013 年,整个支付宝乃至阿里的所有业务平台都走到了十字路口,集团宣布:ALL IN 无线。
一场变革就此拉开序幕......
2013 年 ——2016 年 :支付宝前端解体,集团强化 One Company 开始进行架构调整,不少项目合并,开源进展缓慢。
在 “ALL IN 无线” 战略宣布之前,前端和业务的结合非常紧密,UED 和设计在公司拥有很高的话语权,每半年搞一次前端性能优化战役。在《那些年的体验设计部》系列文章中对这一时期的描述是:
这是个一行 JS 代码的错误就可以造成全站交易下跌的时代,也是 PC 前端们最后的黄金时代。
在 “ALL IN 无线” 战略宣布之后,很多人被从原有部门放到战场最前线,有人不适应走掉了,后续的再补上。60 个人左右的支付宝前端开发部面临解体,一半以上的人被抽调支持支付宝无线业务。面对巨大的变化,整个团队人心涣散,所有人都面对非常艰难的抉择:留下还是离开?
Ant Design、AntV、Egg 等前端开源项目带头人玉伯
最终,玉伯还是决定和剩下的 17 个人一起留在了这个团队,支持主要迭代是给各种页面加二维码的 PC 端业务和进入死胡同的自研前端技术体系。调整完的第一次周会,所有人都很沉默,比起鼓起勇气做抉择离开的人,留下的人的心态更多是未知和拥抱变化。
除了人员调整,当时的阿里巴巴集团要强化 One Company,开始进行架构调整。技术层面,整个公司大统一,就希望不要重复建设,但凡相同的项目都要合并。以 Dubbo 为例,当时的淘宝有一个项目叫做 HSF,也是一个中间件服务框架,跟 Dubbo 做的事情高度重合。
HSF 项目的作者林昊(毕玄),也是当时国内 Java 领域的知名技术领袖。在 OSGi 非常流行的时候,毕玄可能是国内能够把 OSGi 解释的最清楚的人之一。HSF 和 Dubbo,虽然做的事情高度重合,但是设计理念不怎么一样,虽然有些碰撞,但最终目的还是为了 “强强联合”。
不久之后,Dubbo 团队调整,去到了各个地方。从外面看来,Dubbo 项目从 2014 年之后就再也没有更新过。
整个公司的变动让很多开源项目的维护人员发生变化,有些项目在这个过程中进展缓慢,有些则停滞不前。
在这些调整之后,阿里巴巴迎来了里程碑式的一年。
2014 年 9 月 19 日,阿里巴巴集团于纽约证券交易所正式挂牌上市,股票代码 “BABA”。
在这之后的几年时间内,阿里巴巴的业务进入高速发展阶段:与蚂蚁金服集团完成重组,蚂蚁金服成为支付宝的母公司;阿里健康成为阿里巴巴集团的子公司;阿里巴巴集团与蚂蚁金融服务集团联合宣布成立 “口碑”;宣布成立阿里音乐集团;收购优酷土豆集团;正式成立阿里大文娱...... 大量开发者开始将精力投入到业务发展中,很难有时间和精力来做开源,尤其是当这个项目和个人的 KPI 毫无关系时。
与此同时,一直在北京办公的莫问也遇到了问题,业务做得不甚理想,于是决定拉上另一个小伙伴一起研究 Flink。当时,莫问身在阿里最核心的前线战场 —— 搜索团队,因为觉得 “快” 是未来很重要的趋势,所以坚定地投入到实时计算的研究中。如上文言,Flink 项目最早启动时,只有两个人。
莫问说道:“一个项目肯定要有资源,也就是人,但那会儿想在阿里找几个有实力还有时间的人实在太难了。阿里内部的竞争也非常激烈,业务发展很快,从写下 Blink(Flink 在阿里的内部版本)第一行代码开始算,也只有大半年的时间准备,然后就需要支持第二年的双 11。”
在 Flink 整个团队逐渐迭代,慢慢发展的过程中,孤尽也开始了《Java 开发手册》的漫漫推广路。
《JAVA 开发手册》主要作者孤尽
“2016 年 3 月,我在 ATA(注:阿里内部技术论坛)上发表了第一版《阿里巴巴集团 JAVA 技术规范》。觉得好的人有之,觉得不好的也很多。还有人觉得我胆子太大了,去知乎发帖,问孤尽是谁,怎么敢给整个阿里集团写技术规范?
每次被群嘲,晚饭我就让食堂阿姨多给我打两个鸡腿,安慰一下自己。有批评,证明有关注,有关注,就有希望。
那个时候,一个部门一个部门的去游说,失败了一次,就试第二次。失败了 99 次,那也还要再试一次,没别的,凑个整数呗。”
在这个过程中,阿里巴巴将开源从最早期的个人行为逐渐发展成组织行为,但还未在集团层面推出统一的规划。很多开源项目也在与商业价值的碰撞中渐渐迷失,找不到继续下去的动力。
与开源的低沉相对的,是阿里云的沸腾。2015 年,在计算界的奥运会 Sort Benchmark 中,阿里云计算 100TB 数据排序只用了不到 7 分钟,把 ApacheSpark 之前创造的 23 分钟世界纪录缩短了一多半。结果很明显,阿里云成为了国内第一家拥有完整云计算能力的企业。
2017 年至今:开源所幸,云之爆发
2017 年,阿里巴巴双 11 第一次启用交易大屏,并面向全球直播,看着屏幕上不停滚动的数字,莫问整个团队的工程师都紧张到不行,因为这是 Flink 第一次支撑阿里巴巴双 11 几乎所有的核心业务。
“双 11 之前,我们没有大肆宣扬这件事情,因为不知道结果如何。双 11 刚开始,各种战报就出来了,到一百亿用了多长时间,全球交易量是如何分布的,哪个类目排名第一等等,这些排名都是基于 Flink 做的,这就相当于我们的第一次大考。” 莫问回忆起当时的场景说道。
在双 11 之前的那个国庆节,整个团队的工程师七天都没有休假,自发来到公司,即便在家里也是各种调试,各种修改,这样的状态一直持续到双 11 的倒计时开始,整个团队才觉得已经达到稳定状态,不需要再调整了。
当平稳度过双 11 时,那一刻觉得一切都值了。—— 莫问
后面的故事,大家都知道了,阿里巴巴收购了 Flink 的母公司 Data Artisans,并决定将所有改动逐一推回到社区。
就在 Flink 整个团队为了双 11 奋战的同时,出身江南却自带东北大汉气质的北纬带着团队决定重启 Dubbo 项目,而 Dubbo 的转机在于阿里云的爆发。
唤醒沉睡狮子 “Dubbo” 的北纬
2017 年,阿里云发现有一批客户上云之后,想要用 Dubbo。因为他们 Dubbo 已经用的很熟了,不想因为上云而被迫改变自己的使用习惯。真正的客户提出要求了,提升客户对 Dubbo 的信心,成为了一件在公司层面有价值的事情。
吸取了之前的教训:开源这条路,一个人走得很好,一群人可以走的很远,必须依靠社区的力量共同维护。北纬整个团队下了一个重大决定:将 Dubbo 捐献给 Apache 基金会。
理想是丰满的,现实是骨感的。在孵化期间,整个团队遇到了很多问题:以往,团队成员习惯了通过钉钉沟通,而按照规定在基金会中需要通过邮件交流;对于新的功能和特性的加入,团队成员需要考虑并询问广大社区参与者的意见,而不是自行决定。这背后,本质上是从追求效率第一,转为以共识、透明、公开为重。
所幸,这不是阿里与 Apache 基金会的第一次触电。2016 年,分布式消息中间件 RocketMQ 首次顺利从 Apache 毕业,积累了丰富的经验。沿着” 前辈 “探出来的路,最终 Dubbo 仅仅用了 15 个月就成功毕业。
经过长时间的人员调整,玉伯所在的团队在 Ant Design 的推广上也迎来了曙光。Ant Design 的中后台设计语言的定位和推出时机是非常合适的,它开始在公司外部收获大量关注,GitHub 的 Star 数直线上升,2017 年 3 月突破了一万 Star,2018 年 3 月达到了两万的 Star 数。
玉伯回忆道,有次 Ant Design 团队在西湖边开了一场开发者沙龙,来了位高高帅帅的德国小哥,操着一口不甚流利的普通话。原来,在社区浸泡许久的他,不仅毕业论文选择了 Ant Design 做主题,更吭哧吭哧学起中文,毕业后一口气从德国跑到杭州来工作,爱上了这个千年古城。
另一方面,2017 年春天,《Java 开发手册》正式发布,已有超过 260 万位工程师下载及查阅手册,在数以千计的企业应用中,手册成为受业界认可的开发规范,配套的 P3C 插件在 GitHub 上的 Star 数接近两万。
今年初,InfoQ 统计了国内在 GitHub 上较活跃的 7 家一线互联网公司的 2800 多个项目。在 Star 数最多的项目前十名中,六个项目均由阿里巴巴贡献,所有项目的 Star 数更超过 66w,单从数字上来看,阿里也无愧是对开源贡献最大的中国公司之一。即便已经取得了很不错的开源成果,但依旧是靠开发者的自驱动。幸运的是,这些开发者在开源和商业价值之间找到了平衡,就像 Dubbo、Ant Design 一样。
2019 年 9 月 27 日,贾扬清正式成为阿里巴巴开源技术委员会负责人。贾扬清在采访中说表示,过去,这些开源项目的成长更多是依靠阿里巴巴内部员工与开源社区的沟通和交流。如今,阿里巴巴意识到这不能仅仅依靠开发者的一腔热血,而需要一套成熟的方法论帮助开发者更多地参与开源,贡献开源,并从组织上提供一系列支持与保障,这就是阿里巴巴成立开源委员会的初心。
Caffe 之父,TensorFlow、Tytorch 作者之一贾扬清
如今,阿里巴巴已经明确将开源升级为集团的技术战略之一,从拥抱开源、贡献开源、自主开源升级为持续赋能开源。开源所幸,云之爆发,开源的这波高潮也得益于云计算的全面发展。就像当初没有几个人坚信阿里云可以成功一样,也没有多少人想到了云计算会对开源有何影响。
云计算的爆发,让科技公司意识到生态和开发者的重要性,而与开发者打交道最好的方式也许就是开源,一个优秀的开源项目必然会存在一个优秀的社区,而社区可以轻易地将优秀的开发者聚集在一起;此外,开源也会增加开发者对项目的信任度...... 种种原因让开源成为现阶段各大云计算公司想做的事情。
这些科技公司的加入也让开源项目有了最好的落地场景,像双 11 这样的交易量和流量峰值是很难遇到的,经历了双 11 场景洗礼愈加成熟可靠的 Flink 充分验证了科技公司在推动开源上的重要作用。
但是,将一批真正有开源情怀并愿意为之坚持的开发者聚到一起是不容易的。高铁在采访最后说道:" 我经常在晚上和周末花时间在解决社区 issue。Fastjson 和 Druid 就像我的两个小孩,养了快 10 年,有幸得到很多人的支持和使用,这是大家对我的信任,我必须维护好。“
走到现在,开源陪伴着阿里这群工程师度过了十年之久。想到当初霸面进入阿里,孤尽还记得当时说了一句:“你们错过了我,就错过了一个时代。” 孤尽特别感激那个笑得好看的 HR 大哥,并没有因为他的不知天高地厚而生气,相反,他破例给了一次面试的机会。“虽然到现在,我还是没能改变一个时代,但我很开心,我给世界带来了一点点改变。”
是啊,一个 “赶集人” 给世界带来了一点点改变,一群 “赶集人” 又会给世界带来多大的能量呢?这是阿里开源史的重要缩影,这也是中国开源史不可或缺的一笔。幸运的是,一切正在进行中,结局还值得期待。