AWS杀死了云计算:云计算四十年历史化蝶成茧
云计算领域里最不缺的就是远见。
早在大部分人还没听过计算机的 1961 年,已经有人预料到将来计算会成为公共服务,然而直到 2006 年 AWS 发布 S3 和 EC2,才算真正拉开云计算的大幕,其间四十多年风风雨雨,为什么最后做成的是网上卖货的 Amazon?
而且你很难说 Amazon 做的是不是四十年前大家想的那个云计算。
01 云计算极简史
云计算极简时间轴
1946 年,世界上第一台现代电子计算机 ENIAC 在宾夕法尼亚大学诞生。早期的计算机昂贵、巨大、稀有且同时只能让一个人使用。
1955 年,MIT 的 John McCarthy(人工智能之父、1971 年图灵奖获得者)想到了通过 time-sharing(分时)技术来满足多人同时使用一台计算机的诉求[1]。
1961 年,John McCarthy 在 MIT 的百周年纪念上第一次提出了公共计算服务的概念[2]:
如果我设想的那种计算机能够成真,那么计算或许某天会像电话一样被组织成公共服务…… 公共计算服务(Utility Computing)将是一种全新的重要工业的基础。
注:这里说的计算机便是分时计算机,即同时支持多人同时使用的计算机。
1963 年,受 McCarthy 的影响,MIT 跟 Licklider 负责的 IPTO 共同启动了 Project MAC(Multiple Access Computing)[3],致力于推动分时系统的发展,具体目标包括:1)分时系统 ;2)一个使用分时系统的群体;3)对用户的教育。
1964 年,大西洋月刊发表了一篇题为《The Computers of Tomorrow》的文章[4],细致的分析了公共计算服务与公共电网的异同点,指出了计算想像电网那样成为公共服务需要关注的三个问题:
-
接口——插上插座就能接入电力,而计算离大众还太远;
- 服务设备——专用设备将电力转化成人们所需的服务,如电灯、电机等,随开随用,而计算还需要复杂的编程才能使用;
-
产品同质性——电力是同质产品,不管水电火电还是风电,接上用起来没区别,同时电力是单向的,而计算的应用效果却取决于用户编程能力,这是一种与电力不同的双向交互方式。
1965 年,在《The Computers of Tomorrow》的影响下,MAC 项目组开始开发 Multics 操作系统[5]。在这个过程中,通用电器被选为硬件供应商,IBM 出局,贝尔实验室加入到 MAC 的软件开发中。
1965 年,从 MAC 中出局的 IBM 开始研发 CP-40/CMS[6] 分时操作系统,该系统于 1967 年发布,是历史上第一个虚拟机系统。
1969 年,受不了 Multics 缓慢进展的贝尔实验室从 MAC 项目退出,开始开发 Unix 操作系统[7]。
1969 年,在 Licklider 的推动下,ARPA(国防部高级研究计划局)研究的计算机网络 ARPANET[8] 诞生,其后来发展为 Internet。
自此,云计算所依赖的底层技术全部出现了:
- 管理物理计算资源——操作系统;
- 把资源分给多人同时使用——虚拟化技术;
- 远程接入——互联网;
醉里挑灯看剑,梦回吹角连营——技术的成熟需要时间,商业却不能等待,从计算机被发明以来,人们对计算的需求便没停止过。面对公共服务的远梦,企业家们退而求其次,大型机、小型机、x86 服务器,计算只能暂时被装到盒子里分发。
计算机商业一片繁荣,但 Utility Computing 却进入了休眠期。
计算资源的分布[9]
1990 年代,Utility Computing 概念又一次复苏,这次直接照搬了电网(Electric Power Grid)起名叫网格计算(Grid Computing),其目标是把大量机器整合成一个虚拟的超级机器,给分布在世界各地的人们使用,总之还是公共计算服务的[10]。
1996 年,康柏公司的一群技术主管在讨论计算业务的发展时首次使用了 Cloud Computing 这个词[11],他们认为商业计算会向 Cloud Computing 转移。
1996 年康柏公司关于 cloud computing 的商业计划
1997 年,美国教授 Ramnath Chellappa 对“Cloud Computing”这个词做出了定义:“计算边界由经济而并非完全由技术决定的计算模式”[12]。
接下来是一波小浪潮[13]。
1997 年,InsynQ 基于 HP 的设备上线了按需使用的应用和桌面服务。
1998 年,HP 成立公共计算部门。
2000 年,Sun 发布 Sun cloud。
2001 年,HP 发布公共数据中心产品。
2002 年,Amazon 上线 AWS(Amazon.com Web Service),本意是把自己的商品目录以 SOAP 接口的方式开放给开发者[14]。
2002 年,IBM 在自己的 E-business 基础上,综合网络服务(Web Service)、开放标准(Open Standard)、Grid Computing,进一步提出 E-business on-demand 的概念[15]。
到这里为止,云计算还看不到什么曙光。
2006 年,AWS 发布 S3(Simple Storage Service)和 EC2(Elastic Compute Cloud),从此便拉开了云计算真正的大幕,AWS 也一骑绝尘,成为了云计算市场的领导者和绝对统治者。
AWS 营收曲线[16]与市场份额
然而有意思的是到 2006 年 AWS 还没提过 Cloud Computing。
不过 Cloud Computing 这个词却随着 EC2 的发布迅速崛起,很快大家不再提 Grid Computing 和 Utility Computing。
Google Trends:cloud 概念
所以为什么是 AWS?
02 AWS 的崛起
历史未必能重演,但回看历史总能得到一些经验教训,抛开那些繁杂的概念,我们不妨看看 AWS 到底是如何作出 S3 和 EC2 的[17]。
时间回到 2000 年,当时 Amazon 正在开发电商服务平台 Merchant.com,旨在帮助第三方公司在 Amazon 上构建自己的在线购物网站。
不过这个项目进展没想象的顺利。
Amazon 1994 年成立,随后快速发展,但其技术架构在设计之初显然对未来一无所知,整个系统不过是随业务快速发展而不断修修补补搞起来的一团糟糕。
这意味着想把它解耦并抽离出一个公共服务平台是一个非常困难的问题。
难归难,这不过是工作量的事情,但关键是 Amazon 的管理层敏锐的意识到了技术问题在制约公司的发展。
于是整个公司的系统开始做服务化重构,把原来交织在一起的代码解耦成独立、设计良好并清晰描述的 API 服务,不过内部还是外部应用,大家都按照 API 的方式进行开发——也就是说大概从 2000 年开始,Amazon 已经悄悄的变成了服务化公司。
API 化提高了系统复用性和灵活性,对多变的互联网业务来讲,这种特性显然尤其珍贵。
这还没完。
随着公司业务发展,工程师的数量越来越多,Amazon 却发现虽然人数增加了,自己开发应用的速度似乎并没有加快。
或许我们很容易用《人月神话》来回答这个问题,但 Amazon 并没有满足于追求一个解释,他们想要的是解决方案。
当时的 Bezos 秘书长,现在 AWS 的 CEO,Andy Jassy 发现了一个活生生的例子:这是一个本来大家都以为三个月就会上线的项目,结果三个月过去了,项目组却仅仅完成了服务器、数据库和存储部分的开发——进一步调查,公司里大多数项目都是如此。
显然公司有太多的时间被浪费在了重复造轮子上。
2003 年,Jassy 在 Bezos 的家里召开了一次管理层会议,会上大家决定要把应用开发的通用部分抽离出来,做一个公共基础设施服务平台,不仅 Amazon,甚至其他开发者也可以基于这个平台开发自己的应用。
到这里他们才第一次意识到这可能是改变历史的东西。
随后他们整理了一系列可以成为公共服务的候选模块,并从中挑了服务器、存储和数据库三个部分开始。不仅仅是因为这三个需求最多,还因为 Amazon 最擅长这部分,毕竟低利润率商业模式让他在如何降低数据中心的运营成本上颇有积累。
再后来的故事,大家就都清楚了。
03 概念消失,产品的胜利
我前面的文章《从人类文明的两条法则看云计算》从工具的角度解释过为什么大的云厂商目前都是成功的应用开发公司:
公司业务覆盖越广,碰到的问题越多,曾经解决的问题越多,在云计算转型的过程中就越贴近客户需求,成本越低,总体就越有优势。
AWS 就是个活生生的例子,他能做成的第一个原因就是 Amazon 有这么多业务,这种快速的业务尝试让其内部环境像极了互联网创业的过程,所以他从自己需求出发找到的解决方案正是所有互联网业务都需要的银弹。
其次,AWS 仅仅抽离出了公共部分做成了服务,而不是创造了新的东西,开发者还在使用自己熟悉的东西,只不过是在云上。作为对比,我们看一下谷歌 2008 年推出的第一个云产品 Google App Engine,引用一段 wiki 对它的描述:
有些应用程序托管服务让用户安装、配置几乎所有 *NIX 兼容的软件,而 App Engine 则要求开发者使用 Python 或 Java 语言来编程,而且只能使用一套限定的 API。当前的 API 允许程序于一个 BigTable 非关系数据库上存储和检索数据、提出 HTTP 请求、发送E-mail、处理图像、还有缓存。大多数现存的 Web 应用程序,若未经修改,均不能直接在 App Engine 上运行,因为它们需要使用关系数据库。
我不怀疑 Google 的技术实力,相信 App Engine 这么设计一定让他在弹性方面具有巨大优势,但不知道他们有没有想过,这种对用户的“过度关爱”是否真是当时用户想要的。
最后从外部环境来看,AWS 正好赶上了互联网一波创业浪潮,举几个他的典型客户,Yelp 成立于 2004 年,Zynga 成立于 2007 年,Airbnb 成立于 2008 年,Slack 成立于 2009 年,Lyft 成立于 2012 年……或许从下面两张图片看这点更有统计意义,startups 的流行曲线与 AWS 早期具有非常高的相关度。
Google Trend :startups
Google Trend:AWS
内外几个因素叠加到一起,最终的结果就是 AWS 收割了互联网创业潮的红利,快速崛起。
抛开运气的成分,从这段历史来看,AWS 没有炒作概念——否则不至于 2006 年推出 S3 和 EC2 的时候都没提 Cloud Computing;AWS 也没有钻研技术——EC2 底层的虚拟化技术直接应用了开源的 Xen;但 AWS 却在做产品——剖析问题,抽象解决方案并最终收敛成了三个不起眼的产品。
再看一组有意思的曲线。
Google Trends:cloud computing
Google Trends:AWS
Google Trends:Azure
云计算在发展,AWS 和 Azure 等云厂商的热度在崛起,Cloud Computing 的概念却在衰落,抽象的概念被具体的产品所取代,或许这便是成熟的标志。
所以 AWS 们确实杀死了云计算,云计算从一个漂亮的蝴蝶概念蜕化成了一个茧——云主机与云存储,只不过这个茧太丑陋了,以至于很多人都说这不过是传统主机托管的概念封装。
但 AWS 在 2003 年是有远见和野心的,他们想的是如果大家都基于 AWS 做开发,或许 AWS 未来会成为网络操作系统[17],16 年后的今天再看 AWS “for builders” 的口号,诚如所思。