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架构的应用程序。在下面这个例子中:
- 每当一个新的帖子文本文件被添加到 S3 存储桶中,一个专用的 API 网关就会触发一个 Lambda 函数1,该函数负责初始化mp3文件生成的过程,并将信息的副本存储在 DynamoDB 中。
- 函数1还向 SNS 发布消息,触发 Lambda 函数3。这个函数调用 Amazon Polly 接口,将文本转换成与文本相同语言的mp3音频,并将音频文件保存在S3存储桶中,并将存储桶中的地址信息保存到DynamoDB的相应信息的记录中。
- 函数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呢?可能有以下几个原因:
- AWS是在践行其“以客户为中心”的理念:一方面,Serverless是一种新型云资源使用模式,对低频场景的客户来说能切实降低云成本;另一方面,Serverless又能减轻用户负担、降低使用门槛、优化用户体验。
- Serverless架构下,服务器资源颗粒度会更细,更有利于填充其资源池的波峰,提高服务器使用率。而且,节省出来的服务器可以通过Spot Instance方式售卖给客户。这能提升AWS的毛利率。
- AWS服务价格比较贵,所以搞Serverless对低频客户的成本削减帮助会很大,效果会很显著,能收到更多客户点赞,俘虏更多用户的芳心,可收获更多成本敏感型新用户。
- AWS净利润超过20%,有足够的利润空间来承受可能的利润下降。
- Serverless能减少空闲服务器空转,这将能降低碳排放,这符合环保主义者的要求,有助于树立AWS的环保形象。
- 有助于施压追随者。
为什么说Serverless能帮助AWS施压追随者呢?
- AWS做Serverless的榜样在先,用户能得到切实的好处,追随者不得不跟进。
- 本来追随者为了追赶AWS,往往定价降低,或者折扣很大,大规模上Serverless后收入减少将对其财务带来很大压力。
- 追随者没有AWS那么大的规模和那么强的运营能力,大规模上Serverless后对其财务压力会进一步增大。
四、Serverless的路还很长
一方面,与其说Serverless是一种新技术模式,不如说它是一种新商业模式。AWS搞Serverless确实是一着好棋,既讨好了用户,又施压了追随者,还讨好了环保主义者,还还进一步强化了其创新引领者的形象。这既是AWS创新能力的体现,也是其以用户为中心的理念的体现。
另一方面,Serverless的路还很长,因为还有大量问题待解决,比如冷启动时间比较长、函数调试手段缺乏、适用场景有限、产品种类较少、应用尚未推广开来、尚未形成开发者大群体、缺乏业界统一标准等问题。这些问题还需要AWS和业界继续努力。
相信AWS会发布更多更好的Serverless服务,相信AWS会持续优化Serverless应用架构及模式,相信有越来越多用户采用Serverless,相信云上应用开发会变得越来越简单高效。