第0章 从云计算到Serverless
自世界上第一台通用计算机ENIAC(Electronic Numerical Integrator And Computer)诞生以来,计算机科学与技术的发展就从未停止过前进的脚步,尤其是近些年计算机技术的发展更是日新月异,有不断取得突破的人工智能技术,有潜力无限的物联网技术和区块链技术,当然还有本书的主题——不断更新、不断迭代、已走进“寻常百姓家”的云计算。
提起云计算,不得不提效用计算(Utility Computing)。在1961年麻省理工学院百年纪念典礼上,人工智能之父、1971年图灵奖获得者约翰·麦卡锡第一次提出了效用计算的概念,这个概念可算是云计算的一个“最初的”“超前的”遐想模型。麦卡锡认为,计算资源在未来将变成一种公共资源,会像生活中的水、电、煤气一样被每个人使用。1984年,SUN公司联合创始人约翰·盖奇提出了“网络就是计算机”的重要猜想,认为分布式计算技术将会带来一个新世界。12年后,即1996年,康柏公司的一群技术主管在讨论计算业务的发展时,首次使用了“云计算”(Cloud Computing)这个词,并认为商业计算会向云计算的方向转移。这就是“云计算”从雏形到正式被提出的基本过程。
自被提出之后,云计算如同雨后春笋般蓬勃发展。2003年到2006年,谷歌先后发表了多篇文章,指明了HDFS(分布式文件系统)、MapReduce(并行计算)和HBase(分布式数据库)的技术基础以及未来机会,奠定了云计算的发展方向。2006年,Google首席执行官埃里克·施密特在搜索引擎大会上首次正式提出“云计算”的概念。同年,亚马逊第一次将其弹性计算能力作为云服务进行售卖,这也标志着云计算这种新的商业模式正式诞生。两年后,即2008年,微软发布云计算平台Windows Azure,尝试将技术和服务托管化、线上化。到了2009年,著名的《伯克利云计算白皮书》(Above the Clouds: A Berkeley View of Cloud Computing)发表,文中指出:云计算是一个即将实现的古老梦想,是计算作为基础设施这一长久以来梦想的新称谓,它在最近正快速变为商业现实。文中明确地为云计算下了定义:云计算包含互联网上的应用服务及在数据中心提供这些服务的软硬件设施。同时文中也提出了云计算所面临的问题和机遇,如表0-1所示。
表0-1 云计算面临的问题和机遇
在伯克利团队的这篇文章中,作者不仅对云计算下了一个比较明确的定义,提出了它面临的挑战和存在的机遇,更对云计算的未来发展方向等进行了大胆预测。同年,阿里巴巴在江苏南京建立首个“电子商务云计算中心”(即现在的阿里云)。至此,云计算进入了更快速的发展阶段。
在云计算飞速发展的阶段如图0-1所示,云计算的形态也在不断地演进,从IaaS到PaaS,再到SaaS,云计算逐渐“找到了正确的发展方向”。2012年在由Iron.io的副总裁Ken Form所写的一篇名为“Why The Future of Software and Apps is Serverless”的文章中,他提出了一个新的观点:即使云计算已经逐渐兴起,大家仍然在围绕着服务器转;不过,这不会持续太久,云应用正在朝着无服务器方向发展,这将对应用程序的创建和分发产生重大影响。2014年Amazon发布了AWS Lambda,让Serverless这一范式提高到一个全新的层面,为云中运行的应用程序提供了一种全新的系统体系结构,至此再也不需要在服务器上持续运行进程以等待HTTP请求或API调用,而是可以通过某种机制触发代码执行,通常这只需要在AWS的某台服务器上配置一个简单的功能。著名IT咨询顾问Ant Stanley在2015年7月发文解释他心目中的Serverless,认为“服务器已死”。
图0-1 云计算发展历程
Serverless概念进一步发酵。2016年10月在伦敦举办了第一届ServerlessConf大会,来自全世界的40多位演讲嘉宾与开发者分享了关于这个领域的进展,介绍了Serverless的发展机会以及所面临的挑战。这场大会是针对Serverless领域的第一场较大规模的会议,在Serverless的发展史上具有里程碑意义。
如图0-2所示,截至2017年,各大云厂商基本上都已经在Serverless方向进行了基础的布局,国内的几大云厂商也都在这一年先后迈入“Serverless时代”。从IaaS到PaaS再到SaaS的过程中,如图0-3所示,云计算所表现出的去服务器化越来越明显,那么Ken Form所提出来的Serverless又是什么?它在云计算发展的过程中在扮演什么角色呢?它的去服务器化又到了什么程度呢?
图0-2 部分Serverless产品发布时间
图0-3 IaaS、PaaS、SaaS的区别
Serverless翻译成中文是无服务器,所谓的无服务器并非是说不需要依靠服务器,而是说开发者再也不用过多考虑服务器的问题,可以更专注在产品代码上,同时计算资源也开始作为服务出现,而不是作为服务器的概念出现。Serverless是一种构建和管理基于微服务架构的完整流程,允许用户在服务部署级别而不是服务器部署级别来管理用户的应用部署。与传统架构的不同之处在于,它完全由第三方管理,由事件触发,暂存(可能只存在于一次调用的过程中)在计算容器内。Serverless部署应用时不涉及更多的基础设施建设,即可实现自动构建、部署并启动服务。
近些年来,微服务成为软件架构领域另一个热门的话题。如果说微服务以专注于单一责任与功能的小型功能块为基础,利用模块化的方式组合出复杂的大型应用程序,那么就可以认为Serverless是一种可以让代码更加碎片化的软件架构范式。Serverless的这一功能被称为“函数即服务(Faas,Function as a Services)。而所谓的“函数”提供的是相比微服务更加细小的程序单元。例如,微服务可以代表为某个客户执行所有CRUD操作所需的代码,而FaaS中的函数可以代表客户所要执行的每个操作。当触发“创建账户”事件后,将通过函数的方式执行相应的“函数”。单就这一层意思来说,可以简单地将Serverless架构与FaaS概念等同起来。但Serverless和FaaS还是不同的,Serverless和FaaS被广为接受的关系是:
Serverless = FaaS + BaaS(+ …)
可见,Serverless的组成除了FaaS和BaaS之外,还有一系列的省略号,其实这是Serverless给予大家的遐想空间,给予这个时代的一些期待。
随着各大厂商在Serverless领域布局的展开,Serverless也逐渐从启蒙阶段(市场教育阶段)进入到更深一步生产应用阶段(最佳实践阶段)。
2017年,CNCF Serverless工作组成立,开始以社区的力量推进Serverless布局,并进行相关的立项研究与探索。2017年年末,eWEEK的Chris J. Preimesberger发表文章“Predictions 2018: Why Serverless Processing May Be Wave of the Future”。在这篇文章中,多位来自知名团队以及公司的相关负责人对Serverless表达了自己的想法。
- Sumo Logic产品营销副总裁Kalyan Ramanathan: Serverless可能是继容器之后的未来。
- Avere Systems技术总监Dan Nydick:我们将看到更多Serverless技术和托管服务。
- Atlassian平台负责人Steve Deasy:2018年,软件的构建方式将改变。
- Evident.io的首席执行官Tim Prendergast和客户解决方案副总裁John Martinez:容器和Serverless正在兴起,但它们会带来安全问题。
- Contino美国总裁Jason McDonald:Serverless将继续扩大其影响力。
- 美国OVH布道师兼原理系统工程师Paul Stephenson:在2018年我们将会更清楚地认识到Serverless可以解决哪些问题。
- 数据探险首席执行官Seth Noble:Serverless将在2018年与其他技术进行集成。
- Platform9首席执行官Sirish Raghuram:Kubernetes将在Serverless产品AWS Lambda的部署中发挥更大的影响力。
- Accelerite首席执行官Nara Rajagopalan:Serverless将改变开发模式。
而到了2018年,Serverless的发展速度要比想象中的更快。在这一年,Google发布了Knative,一个基于Kubernetes的开源Serverless框架,具备构建容器、流量调配、弹性伸缩、零实例、函数事件等能力。AWS发布了Firecracker,一个开源的虚拟化技术,面向基于函数的服务,创建和管控安全的、多租户的容器。Firecracker的目标是把传统虚拟机的安全性和隔离性与容器的诉求和资源效率结合起来。在这一年,CNCF也正式发布了Serverless领域的白皮书CNCF Serverless Whitepaper V1.0,阐明Serverless技术概况、生态系统状态,为CNCF的下一步动作做指导。加州大学伯克利分校也在2018年发表文章“Serverless Computing: One Step Forward, Two Steps Back”,表达了对Serverless的担忧。伯克利团队认为Serverless会影响开源服务创新,它让FaaS产品在云编程方面迈出了一大步,提供了一种实际上可管理的、看似无限的计算平台,但是忽略了高效数据处理的重要性,并阻碍了分布式系统的开发。
任何一个新的技术和概念,都会遇到挑战、引发担忧,就如同当年云计算在出现时也被一些人(如Oracle公司总裁Larry Ellison、GNU发起人Richard Stallman)认为只是又一个商业炒作的概念,毫无新意。当然,事实也证明,任何一个新的事物,都只有在经历各种挑战和质疑之后,才能更茁壮地成长。Serverless也不例外。从2019年开始,Serverless进入到了一个真正意义上的生产应用、最佳实践快速发展阶段。2019年对Serverless而言是非常关键的一年,也是Serverless具有里程碑式发展的一年,被很多人定义为“Serverless正式发展的元年”。在这一年,国内最大的开源活动之一KubeCon + CloudNativeCon在上海举行,大量Serverless主题演讲在此次活动中发表。著名的伯克利断言“Cloud Programming Simplified: A Berkeley View on Serverless Computing也在这一年发表。伯克利的态度已从一年前的质疑与悲观转变成了自信与期待。伯克利断言Serverless将会在接下来的十年间被大量采用,将会得到飞速的发展,并且表达了以下观点。
- 新的BaaS存储服务会被发明,以扩展在Serverless计算上能够运行更加适配的应用程序类型。这样的存储能够与本地块存储的性能相匹配,而且具有临时和持久两个选项。
- 将出现比现有的x86微处理器更多的异构计算机。
- Serverless架构下的编程更安全、易用。Serverless架构不仅具有高级语言的抽象能力,还有很好的细粒度的隔离性。
- 基于Serverless计算的价格将低于Serverful计算,至少不会高于Serverful计算。
- Serverless将会接入更多的后台支撑服务,如OLTP数据库、消息队列服务等。
- Serverless计算一旦取得技术上的突破,将会导致Serverful服务下滑。
- Serverless将会成为云时代默认的计算范式,将会取代Serverful计算,因此也意味着服务器-客户端模式的终结。
在学术界,不仅仅加州大学伯克利分校针对Serverless发表过多篇论文,很多国内外高校也都已经在Serverless领域投入了大量精力。Serverless已经成为学术界的研究热点,从2017年开始,每年相关论文数呈2倍速增长。
如图0-4所示,从2012年Serverless概念被正式提出,2014年AWS Lambda的发布开启Serverless的商业化,到2017年各大厂商纷纷布局Serverless领域,再到2019年Serverless成为热点议题,Serverless正在逐渐朝着更完整、更清晰的方向发展。随着5G时代的到来,Serverless将会在更多领域发挥至关重要的作用。
图0-4 Serverless发展历程
从IaaS、FaaS到SaaS,再到如今的Serverless,云计算在十余年中发生了翻天覆地的变化,从虚拟空间到云主机,从自建数据库等业务到云数据库等服务,云计算发展迅速,没人知道云计算的终态是什么。有人说Serverless实现了当初云计算的目标,Serverless才是真正的云计算,但是没人可以肯定Serverless就是云计算的终态。或许Serverless也仅仅是一个过渡产物,这还需要时间来验证,但可以明确的是,技术可以改变世界,未来可期。