【六六互联】长期出售【美国抗投诉服务器】【欧洲抗投诉服务器】【亚洲抗投诉服务器】

Serverless计算简介及Serverless的形成

Serverless计算简介及Serverless的形成

早在2009年,伯克利曾针对当时兴起的云计算做过评论,并提出了以下6个潜在的优点:

(理论上)无限可用的计算资源

用户再也不需要承担服务器运维的工作和责任

服务的按需付费成为可能

超大型数据中心的使用成本显著降低

通过可视化资源管理,运维操作的难度大大降低

得益于分时复用,物理硬件的利用率大大提高

2009年至今的10年里,云计算领域已经有了很大的发展,上述的诸多优势已经成为现实,但最后两点目前的实现仍然不够优秀,使得大部分的云服务使用者不得不承受复杂的运维成本和较低的硬件使用率。

当时,市场上主流的两种云服务方案分别是亚马逊推出的EC2和谷歌推出的App Engine (GAE)。这两种方案分别代表了两种思路,EC2选择了提供底层基础,它的实例使用起来和一台物理服务器十分类似,没有任何的额外功能,你可以在上面运行任何类型、任何语言的服务;相反的,GAE则选择了提供高层抽象,包括令人印象深刻的自动缩扩容等能力,但同时对用户能够运行的代码做出了限制 —— 要想获得这些特性,就必须使用google提供的储存和计算服务,遵循相应的规范。

最终,市场选择了拥抱EC2这种底层硬件的虚拟方案,这主要是因为开发者们倾向于使用和自己本地开发环境相同的环境来运行服务,这样做,开发好的代码基本不需要什么改动就可以轻易部署到云实例上去。

但这样的决定也带来了负面影响,采用底层硬件虚拟的方案意味着所有的运维操作都要由开发人员自己来解决,并且为了保证运行在云上的服务具有足够的稳定性,需要解决很多的问题,比如下面列出的这些:

提供冗余容错能力,保证一台机器出现故障时不会影响到整个服务

异地容灾和备份机制

能够有效利用硬件资源的负载均衡方案

响应式地调整服务的规模,实现自动缩扩容

实时监控服务是否正常运行

记录足够的日志信息,方便debug和性能调优

系统升级问题,包括安全补丁

能够快速将服务迁移到新实例的能力

可以看到,上面的每一个问题复杂度都非常高,需要投入大量的人力物力资源才能解决,对于小规模的公司而言,全靠自己来解决这些问题显然是不可能的。

另一方面,使用基于底层硬件虚拟的方案导致单个服务的开发成本也非常高,打个比方,一个简单的业务功能,实际实现可能只有几十行代码,但却需要添加诸多体积庞大的库和框架(比如rpc、数据中心访问、缓存、监控...)才能够运行在云服务实例上,这是严重拖慢开发效率的。

注意到这些问题,亚马逊在2015年推出了AWS Lambda服务,提出了Cloud Function的概念,并引起了业界对于Serverless的广泛关注(Serverless这一词并不是说真的没有服务器了,只是开发人员不需要再关注服务器了,你的代码仍然是运行在真实存在的服务器上的)。

Cloud Function最终被平台打包成FaaS (Function as a Service, 函数即服务)的形式,它代表着Serverless的核心理念。当然,云平台也提供以BaaS (Backend as a Service)形式存在的Serverless服务框架。简单的说,Serverless Computing = FaaS + BaaS。

以我们的观点而言,一个serverless应用必须能够实现自动缩扩容和按使用量计费。cloud function做到了这一点,因此我们将其视为当今serverless计算的基本元素。在本文剩下的部分中,将会关注和论述cloud function的形成、演化以及未来;进一步会给serverless计算下一个定义,列举它所面临的挑战和机遇。尽管我们还不知道究竟哪种解决方案会取得最终的胜利,但我们相信所有困扰serverless的问题最终都将会被解决,让这一概念真正成为云计算的门面(become the face of cloud computing)。

2. Serverless的形成

对于任何一个serverless平台而言,用户都只需要使用高级语言编写一个cloud function,然后选择一个触发该函数运行的触发器 (trigger)(比如文件上传、数据库的改动等),其余的工作(实例选择、缩扩容、部署、容灾、监控、日志、安全补丁...)则全部由serverless系统托管。下面的表格总结了在serverless和传统云计算(我们称其为serverful)两种方式的一些区别:

接着我们给出一张serverless云的架构图:

从上图中可以看出serverless是如何简化应用的开发流程和资源使用方式的,在云平台的环境下,传统的serverful开发方式就像是在使用汇编这样的底层语言,而serverless则像是在使用python这样的高级语言。换言之,当今serverless带给我们的提升,正如当年高级语言替代汇编一样,是一种质的改变。

Serverless计算简介及Serverless的形成

准确的说,我们认为serverless相比serverful,有以下3个显著的改变:

弱化了储存和计算之间的联系。 服务的储存和计算被分开部署和收费,服务的储存不再是它本身的一部分,而是演变成了独立的云服务,这使得计算变得无状态化,更容易调度和缩扩容,同时也降低了数据丢失的风险。

代码的执行不再需要手动分配资源。 我们再也不需要为服务的运行指定需要的资源(比如使用几台机器、多大的带宽、多大的磁盘...),只需要提供一份代码,剩下的交由serverless平台去处理就行了

按使用量计费。 serverless按照服务的使用量(调用次数、时长等)进行计费,而不是像传统的serverful服务那样,按照使用的资源(ECS实例、VM的规格等)计费。

基于上述的三个改变,接下来我们将解释serverlss和一些相似的产品究竟有何不同。