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