AWS 15 年(1):从 Serverful 到 Serverless


2006年,AWS发布了其第一个Serverless存储服务S3和第一个Serverful计算服务EC2,这也是AWS正式发布的前两个服务,开启了云计算波澜壮阔的旅程。2014年,AWS发布了业界第一个Serverless计算服务AWS Lambda。在今年(2021年)的AWS re:Invent大会上,AWS又发布三个Serverless新品:Redshift Serverless、EMR Serverless和MSK Serverless。AWS的15年发展史(2006到2021年),也是一部AWS创造和深耕Serverless的历史,一部从Serverful不断向Serverless演进的历史。

那么,为什么AWS服务要不断从Serverful演进到Serverless呢?在AWS心中到底Serverless是什么呢?为什么AWS一直不遗余力地推进Serverless呢?Serverless到底是一种技术模式还是商业模式呢?对云计算行业影响如何呢?以下内容是笔者和几个业界朋友讨论后的成果,总结后分享出来。

一、AWS Serverless是什么?

在看什么是Serverless之前,我们来看看典型的Serverful服务EC2。在笔者看来,EC2和在用户自己数据中心内的物理服务器或虚拟机没有本质区别,主要区别只是位置变了(从用户数据中心挪到了AWS数据中心),以及管理角色变了(用户自己管理变为AWS托管),而用户还是要负责EC2服务器的选型、确定规格、配置和运维,及其生命周期管理。

而Serverless则是一个全新物种。在AWS Serverless Q&A页面(https://aws.amazon.com/cn/serverless/faqs/)中,AWS是这么定义Serverless的:

  • no server management:用户不需要管理服务器

  • pay-for-value services:按价值付费

  • continuous scaling:能自动持续扩容

  • built-in fault tolerance:内置高可用和容错能力

这定义非常简洁。简而言之,AWS Serverless服务就是客户不需要自己管理服务器(Server)的服务。这不是说这些服务就不需要Server,而是AWS把这些服务与Server相关的事情都替客户干了。

AWS已有的Serverless服务如下表所列:

领域

Serverless 服务

计算

AWS Lambda,AWS Fargate

程序集成

Amazon EventBridge,Amazon SNS,AWS Step Functions, Amazon SQS, Amazon API Gateway, AWS AppSync

存储

AWS S3,Amazon DynamoDB,Amazon RDS,Amazon Aurora Serverless

分析

Redshift Serverless,EMR Serverless,MSK Serverless

实际上,AWS一直在做从Serverful到Serverless持续进化的过程:

(till 2019)

一服务被Serverless化后会带来什么变化呢?以EMR Serverless为例,AWS官网中的下图将其与托管EMR服务做了对比。用户在使用托管EMR服务时,首先需要确定实例的规格和集群规模,然后创建集群并配置集群参数,再提交job,任务处理完毕后销毁集群。而使用EMR Serverless服务时,用户只需要创建应用、提交job,集群的事情完全由AWS负责。

利用Serverless服务开发的应用就是Serverless架构的应用程序。在下面这个例子中:

  1. 每当一个新的帖子文本文件被添加到 S3 存储桶中,一个专用的 API 网关就会触发一个 Lambda 函数1,该函数负责初始化mp3文件生成的过程,并将信息的副本存储在 DynamoDB 中。

  2. 函数1还向 SNS 发布消息,触发 Lambda 函数3。这个函数调用 Amazon Polly 接口,将文本转换成与文本相同语言的mp3音频,并将音频文件保存在S3存储桶中,并将存储桶中的地址信息保存到DynamoDB的相应信息的记录中。

  3. 函数2则负责从Dynamodb中获取文本文件的完整信息,包括对应的mp3音频在S3存储桶中的地址。

二、Serverless对AWS客户的价值:节省成本、减少管理和技术负担、加快应用交付速度

  

(一)节省成本

国内某公有云厂商对其1000多云客户进行了资源利用情况分析,抽样超过一万计算节点发现,42%的节点资源利用率低于10%,72%的节点资源利用率低于20%。在AWS上,许多客户一直都只使用 EC2实例可用容量的10-20%。这说明,大部分公有云用户都存在一定程度的资源浪费,这一方面是在浪费用户自己的钱,另一方面云服务商的服务器空转导致不环保。

AWS Serverless服务能根据任务处理的需要而自动增减服务器资源,用户只需为所用资源付费。因为这些资源是真正为用户创造价值的资源,没有资源被浪费,因此,AWS将这种付费模式称为“按价值付费(Pay-for-value)”。此外,无服务器架构可以降低总体拥有成本(TCO) ,因为许多集群的网络、安全和配置调优等管理任务也不再需要了。

这是因为Serverless架构的服务和应用采用事件驱动(Event-driven)架构,只有在任务处理启动后,AWS才会创建必要的Server资源,并在处理过程中自动调整资源,处理完毕后就释放资源。

从这原理出发,我们能看出来,通常认为Serverless服务只适合于低频场景,因为每次Server的冷启动会带来一定的应用时延,这会带来不好的用户体验。但是,在特定场景中,体验要求可以稍微降低一点,而省钱是主要的需求。另一方面,Serverless免去了用户配置、优化、运维服务器集群的负担,简化了用户操作,这又提升了用户体验。

在https://www.simform.com/blog/aws-lambda-pricing/中,作者对比了两种场景下AWS Lambda和EC2的费用:

  • 在图1所示的低频场景中,每个月只进行2万次处理,此时Lambda大大节省成本。

  • 在图2所示的高频场景中,每个月要进行3千万次处理,Lambda成本远高于EC2。

(图1)

(图2)

(二)降低技术和管理负担

从企业管理者角度来看,使用Serverless服务,不需要创建、配置和管理服务器集群,也就不需要这方面的技术人员,这也能降低使用门槛、人力成本和管理负担。

从开发人员角度来看,Serverless让开发者不用关心繁琐的基础设施运维工作,使开发者可以把更多的精力放在核心业务的实现上。因此,无论是前端开发者,还是后端开发者,Serverless都可以帮助他们提升效率,降低交付时间。

可以说,Serverless是云计算的未来,是整个软件和应用架构的未来,符合“云计算让应用越来越简单”这个大方向。

(三)加快应用交付速度

有了Serverless后,云服务厂商底层架构承担的事情越多,业务层面需要关注的架构和运维工作就越少,应用交付的时间就越快。

在AWS官网中,AWS宣称使用Serverless服务能加快应用交付速度。其Coca-Cola的案例中,使用 AWS Lambda 等无服务器构建块,1 周内即开发出应用原型,在 150 天内将 Web 应用程序从原型扩展到 10000 台机器。

三、Serverless对AWS自己的价值:讨好用户、施压追随者、环保标杆

AWS为什么一直不遗余力地推广Serverless呢?可能有以下几个原因:

  1. AWS是在践行其“以客户为中心”的理念:一方面,Serverless是一种新型云资源使用模式,对低频场景的客户来说能切实降低云成本;另一方面,Serverless又能减轻用户负担、降低使用门槛、优化用户体验。

  2. Serverless架构下,服务器资源颗粒度会更细,更有利于填充其资源池的波峰,提高服务器使用率。而且,节省出来的服务器可以通过Spot Instance方式售卖给客户。这能提升AWS的毛利率。

  3. AWS服务价格比较贵,所以搞Serverless对低频客户的成本削减帮助会很大,效果会很显著,能收到更多客户点赞,俘虏更多用户的芳心,可收获更多成本敏感型新用户。

  4. AWS净利润超过20%,有足够的利润空间来承受可能的利润下降。

  5. Serverless能减少空闲服务器空转,这将能降低碳排放,这符合环保主义者的要求,有助于树立AWS的环保形象。

  6. 有助于施压追随者。

为什么说Serverless能帮助AWS施压追随者呢?

  1. AWS做Serverless的榜样在先,用户能得到切实的好处,追随者不得不跟进。

  2. 本来追随者为了追赶AWS,往往定价降低,或者折扣很大,大规模上Serverless后收入减少将对其财务带来很大压力。

  3. 追随者没有AWS那么大的规模和那么强的运营能力,大规模上Serverless后对其财务压力会进一步增大。

四、Serverless的路还很长

一方面,与其说Serverless是一种新技术模式,不如说它是一种新商业模式。AWS搞Serverless确实是一着好棋,既讨好了用户,又施压了追随者,还讨好了环保主义者,还还进一步强化了其创新引领者的形象。这既是AWS创新能力的体现,也是其以用户为中心的理念的体现。

另一方面,Serverless的路还很长,因为还有大量问题待解决,比如冷启动时间比较长、函数调试手段缺乏、适用场景有限、产品种类较少、应用尚未推广开来、尚未形成开发者大群体、缺乏业界统一标准等问题。这些问题还需要AWS和业界继续努力。

相信AWS会发布更多更好的Serverless服务,相信AWS会持续优化Serverless应用架构及模式,相信有越来越多用户采用Serverless,相信云上应用开发会变得越来越简单高效。

感谢您的阅读,欢迎关注我的微信公众号!

AWS