上一篇,讲了为什么会有分布式系统,以及什么时候需要用分布式系统。
这一篇,我想聊下,过去的分布式系统都是谁做出来的,又都是怎么做的。以及,更重要的,从分布式系统过去的发展历程中,我们能总结出什么比较好的经验。
1
先来看下 Hadoop 的诞生历程。
我们以时间为主线,梳理下重要事件:
2003 年 10 月,Google 发表论文《The Google File System》
2004 年初,Doug Cutting 领导的 Apache Nutch 项目为了满足自身需求,开始参考 Google 的 GFS 论文开发 NDFS 文件系统。
2004 年 10 月,Google 发表论文《MapReduce: Simplified Data Processing on Large Clusters》
2004 年底,Apache Nutch 项目开始基于 Google 的 MapReduce 论文实现自己的 MapReduce 框架。
2006 年 1 月,身在 Yahoo! 的 Doug Cutting 把 NDFS 和 MapReduce 从 Apache Nutch 中剥离出来成为独立的项目,并被命名为 Hadoop。
2007 年,Yahoo! 在生产环境部署了超过 1000 个节点的 Hadoop 集群。
2008 年,Hadoop 成为 Apache 顶级项目,开始得到广泛应用。Yahoo! 的节点数达到 2000 个。
2008 年,Cloudera 成立,致力于提供基于 Hadoop 的商业服务,推出了自己的 Hadoop 发行版 CDH。
2009 年,MapR 成立,致力于提供基于 Hadoop 的商业服务。
2011 年,Hortonworks 成立,致力于提供基于 Hadoop 的商业服务,推出了自己的 Hadoop 发行版 HDP。
2018 年 10 月,Cloudera 收购 Hortonworks。
2019 年,MapR 宣布如果无法获得投资,将关门大吉。
可以看到,Hadoop 早期脱胎于 Google 公开的两篇论文,然后被一个大牛照着设计给实现了出来,接着在另一家大公司 Yahoo! 得到广泛应用,经过大量生产检验后,开始传播开来。
Hadoop 走的路线,是工业界回馈开源界,开源界再反哺工业界。
2
再来看下 Spark 的诞生历程。
同样,以时间为角度,看下早期几个重要的事件:
2009 年,Spark 在 UC Berkeley 大学的 AMPLab 实验室诞生
2010 年,Spark 开源
2013 年,Spark 被捐献给 Apache 基金会
2014 年 2 月,Spark 孵化成功,成为 Apache 顶级项目,开始得到大量使用
2014 年 11 月,Spark 的创始人成立商业公司 Databricks,提供以 Spark 为核心的商业服务。同年,Spark 打破了由 Hadoop MapReduce 保持的 Daytona GraySort 100TB 数据排序记录。
Spark 走的路线,是从学术界到工业界,从闭源到开源再到商业化。
3
最后,看下 Flink 的诞生历程:
2010 年,一个叫 Stratosphere 的项目启动了,这个项目受 German Research Foundation 资助,由 Technical University of Berlin、Humboldt University of Berlin 和 Hasso Plattner Institute 联合推进。
2014 年 3 月,Stratosphere 进入 Apache 孵化器孵化并改名为 Flink,同年孵化成功,成为 Apache 顶级项目,开始得到广泛关注和应用。
2014 年,Flink 的 creators 创立了公司 Data Artisans,提供基于 Flink 的商业服务。
2015 年,阿里巴巴开始调研 Flink,逐渐开始应用在业务中,并做了大量的改进,形成了自己的内部分支,甚至取了个名字叫 Blink。
2019 年1 月,阿里巴巴收购 Data Artisan(已更名为 Ververica),并开始推进 Blink 像 Flink 主分支的合并。
Flink 走的路线,是从学术界到开源界,从开源界再到工业界和商业化。只不过学术界的组成更丰富了,包括了学校和一些不以盈利为目的的机构。
4
通过上面三节,我们梳理了大数据和分布式系统领域被提的最多的三个框架的发展历程。
不难看出,我重点关注了这么几个方面:
学术界和工业界
闭源、开源,以及基于开源的商业化
从这两个维度去分析,很容易发现一些共性,引出一些问题,最后得到一些结论。
5
为什么是 Google 首先实现了大规模的分布式系统?
搜索引擎的本质,是把全世界所有的网页都爬下来,做好索引,收到用户输入后,查出结果,排序后返回。这个业务模式,就导致 Google 作为全世界最大的搜索引擎公司,面临了海量的数据和计算量,率先碰到了我们上一篇讲到的「存不下」和「算的慢」的问题。
这两个问题,不解决公司就做不下去了,并且从来没有人碰到过类似的需求,一点参考都没有。于是,Google 自己设计并实现了 NFS 和 MapReduce 这两个框架(不只这两个,其他先按下不表),并在公司内部得到了大量应用,使得技术没有成为业务发展的阻碍。
6
为什么 Google 要公开自己的成果?
作为一家商业公司,首要目的是要赚钱。只有赚钱,公司才能活下去。也只有赚钱,对投资人才是负责的。
而 Google 是有竞争对手的,早期的 Yahoo!,后期的百度、Bing 等等。这些公司早晚也要遇到 Google 已经解决的技术难题。把这些技术开源出去,不是帮助竞争对手吗?
没法完全排除 Google 这么做可能也是有私心的,比如为了公司宣传,方便吸引技术人才;比如为了确保技术领域朝着自己已经在的方向发展,以此来维持领先地位,等等。
虽然 Google 已经把「Don't be evil」从公司的 code of conduct 里删掉,但至少,曾经有过超越金钱的追求(其实现在也不能否定)。
这种愿意贡献自己的一份力量,让这个世界更加美好的精神,即使会被讽刺、打压,甚至自己都会怀疑、动摇,但毕竟确实让这个世界变的更好了。
这足以让人脱帽致敬。
7
公司有赚钱的压力,学校图什么?
碰到技术难题,公司不解决,可能就挂了。但学校不一样,老师和学生不一样,解决不了,大不了换个课题。
钱太重要了。但人生不只有钱。
解决一个难题带来的成就感,是很难替代的。学术界向来是偏向理论研究的,尤其各大高校的博士和各种实验室,经常是解决前沿难题的主力。这个成就感,他们是不缺的。
而如果自己的成果能在工业界产生巨大的经济价值和社会价值,那这个成就感又会被无限放大。这也就促使学术界越来越关注工业界,和工业界一起站在了解决实际技术难题的前线。
一个终极问题:人生短短几十年,活着是为了什么?
是为了享乐,舒舒服服过一辈子?是为了青史留名,被后人尊崇,为家族争光?
我想,对成就感的追求,也足以驱动和满足人一辈子。而这种满足感和驱动力,是自给的,是精神层面的,因此也是更加持久和巨大的。
8
既然已经把自己的作品捐献给开源了,为什么又要成立商业公司?都开源了,商业化又怎么做?
上一节说了,钱很重要。
我们追求成就感,但不是只追求成就感,更不能否定其他追求。
底层物质需求得到满足后,才有可能追求高层的精神满足。「仓禀实而知礼节,衣食足而知荣辱」。
所以,既然其他公司都能用自己的作品帮助赚钱,为什么自己不能呢?
难的是怎么做商业化。
其他商业公司不存在这个问题,它们自有赚钱的业务,开源软件只是解决了阻碍它们继续赚钱的技术问题而已。
而以开源软件本身为核心的商业化又该怎么做呢?赚钱的业务模式在哪里呢?
一个是技术,一个是服务。
从技术的角度看,这类商业公司要么就是由开源软件的 creator 出来创立的,要么就招揽了很多项目的 commiter 和 PMC,保证了对核心技术的足够掌控力。这样一来,一个很好的发展思路就是推出自己的发行版,好的功能,优先在自己的版本实现,发现 bug,也优先在自己的版本解决。像 Cloudera、Hortonworks 都是这个思路。这样,就从技术的角度做出了差异化。
从服务的角度看,这类商业公司往往会提供全套解决方案类的服务。比如提供云平台支持,提供完整的机器学习套件等等。Databricks 就是走的这个路线,Cloudera 也在往这个方向发展。另一方面,7*24 响应的技术支持服务,也让企业客户能够放心的把自己交给这些公司。这样,就从服务的角度满足了客户的需求。
然而,话是没错,路却不好走。像 Hortonworks 的被合并,MapR 的经营不济,也说明了这条路不好走。可能像 Data Artisans 被阿里收购已经算是好结果了。
基于传统开源软件的商业公司,像 Oracle、Redhat,早已经摸索出了成熟的商业模式。而大数据背景下的开源软件,到底要怎样才能稳定地活下去,被商业公司收购后,又是否会对开源软件产生一些负面影响,让我们拭目以待吧。
9
为什么总是大公司或者名校和大机构在引领这些项目呢?
Hadoop 从 Google 公开的论文而来,在 Yahoo! 大放光彩,Yahoo! 默默退去,Facebook 又扛起了大旗,我们后面要提到的 Hive 就是在 Facebook 开发出来的。
AMPLab 除了鼓捣出 Spark,还孵化了 Alluxio、Mesos 等明星项目,每一个都可以说是光芒万丈。
哪怕最后项目开源出来,也很自然地形成了 Apache 基金会这样的非盈利机构,来组织协调社区资源,推动项目发展。
而工业界其他的公司,和学术界的其他学校、机构,更多是跟进和受益的角色。
这很正常,就像我们常说,历史的进程是不以个人意志为转移的,但英雄人物在其中的作用也是至关重要的。
大公司和名校,首先有足够的机会率先面对问题,也就有了足够的动力,而他们的财力和名气,又保证了他们有足够的能力去解决这些问题。
一切都理所应当。
对一个人个体而言,如果你致力于去解决这些通用型的难题,而不是具体的应用问题,那就应该努力进入这些大公司和名校。
对一个公司个体而言,如果你遇到了技术难题,又没有足够的财力和技术实力去解决,那到底是拥抱开源,还是商业付费,更大层面上就变成了成本上的考量了。
10
工业界和学术界的交通,使得理论和实践有了很好的结合,对双方都起到了很好的促进作用。
比如工业界现在也养成了发 paper 的学术习惯,而以往还是以产品文档为主。
比如直接而强烈的成就感,以及可能的经济收益,也让学术界现在能吸引更多人才去做面向实际问题的研究(当然,基础理论的研究也依然重要)。
而开源和商业化的选择,也成为了相辅相成的关系。
开源使得广大群众都能够参与进来,促进了项目发展,大大扩张了项目的应用规模。只有这样,才可能有人愿意使用商业版。
而商业化需要赚钱,就必须要和开源版本做差异化竞争,这就导致无论是功能、性能、稳定性等技术指标,还是定制性、响应性等服务指标,都把项目提升到了一个开源很难快速达到的水平。随后,无论是商业功能的主动开源,还是开源版本的自觉跟进,也都反过来促进了开源版本的发展。
所以,不得不说,工业界和学术界的往来交通,以及开源和商业化的相互成就,实在是人类发展史上的一桩美事。
TL;DR
大数据和分布式系统领域被提的最多的三个框架的发展历程:
Hadoop 走的路线,是工业界回馈开源界,开源界再反哺工业界。
Spark 走的路线,是从学术界到工业界,从闭源到开源再到商业。
由此总结,从学术&工业和开源&商业两个维度,可以得到一些思考:
Google 作为全世界最大的搜索引擎公司,率先面临了「存不下」和「算的慢」的问题,于是成了第一个解决问题的开创者。
Google 怀着善意公开了自己的成果。开源让世界变得美好。
对长期和直接成就感的追求,使得学校和机构加入到了这类分布式系统研究和开发的浪潮中。
赚钱是底层基础需求,商业化不可耻。商业化的模式是从技术和服务两个维度去差异化竞争。
大公司和名校,正如历史进程中的英雄人物,起到了至关重要的作用,有志之士大可跟随。
关联阅读
原创不易
关注/分享/赞赏
给我坚持的动力
点在看,给大家好看