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