Serverless:云计算的标配(云计算 sla)

Serverless,字面意思就是不需要服务器,由Iron公司在2012年第一次提出。被大家熟知是2015年,AWS推出Lambda的时候,Lambda产品的推出开启了云计算时代,之后国内外云计算市场一片红火,微软、谷歌、IBM都推出了自己的Serverless产品,

国内的阿里云和腾讯云早在2017年也推出了Serverless平台,那个时候被称之为Faas(Function as a Service) 。国内2018年,Serverless的概念突然火了起来,更多的还是支付宝小程序和微信小程序的云开发平台,随后到2019年,国内包括华为、百度也都开始做Serverless,现在Serverless已经成了各大云厂商的标配。

2019年2月,加州大学伯克利分校发表了名为《Cloud Programming Simplified: A Berkerley View on Serverless Computing》的论文,对Serverless的形成、现状以及未来进行了全面的梳理和总结,并预言Serverless将成为云计算标配。

“We predict that serverless computing will grow to dominate the future of cloud computing” – Berkeley CS Dept

Serverless是什么?

早在2009年,伯克利曾对当时兴起的云计算做评论,帮助解释围绕云计算的兴奋点,提出运用云计算的6个潜在优势:

  1. 无限可用的计算资源
  2. 用户再也不需要承担服务器运维的工作和责任
  3. 服务的按需付费成为可能
  4. 超大型数据中心的使用成本显著降低
  5. 通过可视化资源管理,运维操作的难度大大降低
  6. 得益于分时复用,物理硬件的利用率大大提高

2019年伯克利发表对Serverless计算的观点时,认为这些优势基本实现,但云用户仍然承受着来自复杂操作和的负担,这些不足主要源于未能实现最后两个潜在优势。

虽然云计算减轻了用户对物理基础设施的管理,但他们却需要管理大量的虚拟资源,为了保障云上服务的稳定性,研发或运维团队需要解决很多问题,如:

  1. 提供冗余容错能力,保证一台机器出现故障时不会影响到整个服务
  2. 异地容灾和备份机制
  3. 能够有效利用硬件资源的负载均衡方案
  4. 响应式地调整服务的规模,实现自动扩容
  5. 实时监控服务器是否正常运行
  6. 记录足够的日志信息,方便debug和性能调优
  7. 系统升级问题,包括安全补丁
  8. 能够快速将服务迁移到新实例的能力

上面每一个问题复杂度都非常高,需要云用户投入大量的人力物力资源来解决,对小规模的公司而言,全靠自己来解决几乎不太可能;另一方面,基于底层硬件虚拟化的方案导致单个服务的开发成本非常高,如简单的业务功能,却需要添加庞大的框架和中间件,如RPC、缓存、数据库、监控、日志等,此案能在云实例上运行,这严重拖慢了开放效率。

为了解决这些问题,亚马逊在2015年推出了AWS Lambda服务,提出Cloud Function的概念,并引起业界对Serverless的广泛关注。Cloud Function最终被平台打包成FaaS(Function as a Service,函数即服务)的形式,它代表了Serverless的核心理念,当然云平台也提供以BaaS(Backend as a Service,后端即服务)形式的Serverless服务,简单来说,Serverless Computing = FaaS BaaS。

Serverless计算的架构图,如下所示:

Serverless:云计算的标配(云计算 sla)

Serverless应用通过Cloud Function及基础BaaS服务,如Object Storage、KV、DataBase、Messaging等,提高了应用交付的效率。Serverless 相对于 Serverful,对业务用户强调 noserver(serverless 并不是说没有服务器,只是业务人员无需关注服务器了,代码仍然是运行在真实存在的服务器上)的运维理念,业务人员只需要聚焦业务逻辑代码。

Serverless:云计算的标配(云计算 sla)

伯克利认为,Serverless相比Serverful,有三个显著的改变:

  • 弱化了存储和计算之间的联系,服务的存储和计算被分开部署和收费,服务的存储不再是它本身的一部分,而是演变成了独立的云服务,这使得计算变得无状态,更容易调度和扩缩容,同时降低了数据丢失的风险。
  • 代码的执行不再需要手动分配资源,我们再也不需要为服务器的运行指定所需的资源,如使用几台服务器、多大带宽、多大磁盘,只需要提交代码,剩下的由Serverless平台去处理就行了。
  • 按使用量计费,Serverless按照服务的使用量进行计费,如调用次数、时长等,而不像serverful服务那样,按照使用的资源计费,如ECS实例数量、规格等。

总结:Serverless让开发人员只需关注业务逻辑代码,不需要再关注服务器,Serverless应用可以自动扩缩容,按量计费,并由服务提供方托管运维职责。

Serverless的价值

对云用户来说,Serverless计算带来的主要收益是编程生产力的提高,以及许多场景下节省支出。开发者不需要完全理解云基础设施如何运作,也能快速编写出可用的代码,而且Serverless节省了他们部署和运维的时间,让开发者专注于解决和优化应用本身的问题。

对云服务商来说,Serverless计算简化了云端编程模型,能够吸引更多新客户,而对于已有客户,Serverless计算使得它们能够更好地利用云资源。伯克利的一项调查表明,serverless的使用群体中,24%是第一次接触云计算;另外,Serverless计算运算时间短、内存使用少以及无状态的特性让云服务商能够充分利用云资源,进一步提高资源利用率。云服务商甚至可以用一些已经“过保”的旧服务器来运行Serverless服务,增加服务器的折旧年限,从而减少成本。如果ARMRISC-V能够提供比x86更好的表现,服务商可以很方便地替换指令集,甚至针对特定的开发语言进行加速。

有云厂商说云服务是“超卖”的生意,但“超卖”提高资源利用率的同时也导致业务确定性降低,这对商业客户来说是致命的;而AWS通过Serverless服务给客户提供稳定的服务质量合同,同时提高了资源利用率,实现双赢。

Serverless计算最受欢迎的几个应用场景,如下:

Serverless:云计算的标配(云计算 sla)

虽然Serverless Cloud Function已经被成功应用于很多不同的场景,但仍然有许多场景无法使用Serverless计算,伯克利的报告也分析目前Serverless的一些局限,如云服务商提供的存储服务仍然存在很大限制(如内存存储成本高,对象存储吞吐量低),难以支撑需要共享精细状态的应用;云服务消息通知能力比较弱,如SQS延迟可能高达上百毫秒;缺乏标准的通信模式,基于函数的通信模型会导致通信泛滥;性能瓶颈,如冷启动、异构硬件性能的差异。

对于是否应该使用Serverless,可以参考Azure计算选型的示意图:

Serverless:云计算的标配(云计算 sla)

Serverless服务

2015年AWS推出Lambda服务,提出了Cloud Function概念,Serverless正式被业界接受,但Serverless服务形态并不局限于Cloud Function,只要符合Serverless三大特征的服务都可以视为Serverless服务

Lambda是一项计算服务,可使你无需预置或管理服务器即可运行代码,Lambda在高可用的计算基础设施上运行你的代码,执行计算资源的所有管理工作,其中包括服务器、操作系统维护、容量调配和弹性伸缩、代码监控和记录。除AWS Lambda外,还有其它Cloud Function服务,包括Azure Function、Google Cloud Function、Aliyun 函数计算、腾讯云函数等。

Serverless:云计算的标配(云计算 sla)

AWS Fargate是适用于容器的无服务器计算,其与ECS(Elastic Container Service)和EKS(Elastic Kubernetes Service)兼容,使客户可以专注于构建应用程序,为其指定资源付费,而无需预置和管理服务器。除AWS Fargate外,还有其他适用于容器的无服务器计算服务,包括Azure Container Apps、Google Cloud Run、Aliyun ASK等。

Serverless:云计算的标配(云计算 sla)

此外,AWS还提供了与Serverless计算相配合的其他服务,如EventBridge、Step Functions、SQS、API Gateway,以及数据存储服务,如S3、DynamoDB、Aurora Serverless等,当然其他云服务商也有类似服务。

Serverless:云计算的标配(云计算 sla)

权威咨询机构Forester发布2021年Q1 FaaS评估报告,将Alibaba、Amazon和Microsoft评为领导者。

Serverless:云计算的标配(云计算 sla)

Serverless的发展状况

# CNCF(Cloud Native Computing Foundation)调查报告

2021年CNCF调查报告表明,39%的受访者正在使用Serverless,其中75%的用户采用托管平台,比2020年增长了24%。

2021年DataDog容器调查报告表明,AWS ECS容器客户40%使用Fargate(无服务器容器)。

Serverless:云计算的标配(云计算 sla)

# State-of-Serverless报告

2021年DataDog发布Serverless研究报告表明,从云原生初创公司到大型企业都在关注Serverless,Serverless生态已经超越了FaaS,包含数十种服务,可以帮助开发人员构建更快、更动态的应用程序。

Lambda函数调用次数比2年前增长了3.5倍

Serverless:云计算的标配(云计算 sla)

AWS lambda是最成熟和使用最广泛的FaaS产品,50%以上的AWS用户使用了Lambda,同时Azure Functions的使用率从20%增长到36%,而Google Cloud Functions也有近四分之一的用户使用。

Serverless:云计算的标配(云计算 sla)

四分之一的CloudFront用户已采用边缘Serverless计算,如Lambda@Edge可以根据用户特征(如设备类型)动态转换图像,或者为不同版本的Web应用程序提供A/B测试。

Serverless:云计算的标配(云计算 sla)

尽管AWS提供了云开发工具包(CDK)、Serverless应用程序模型(SAM),开源的Serverless Framework是使用最广泛的Lambda部署工具,90%的组织使用它来管理他们使用的AWS CloudFormation的Serverless资源。

Serverless:云计算的标配(云计算 sla)

Python是最流行的Lambda运行时,尤其是在大型企业中,而小企业中Node.js应用更广泛。

Serverless:云计算的标配(云计算 sla)Serverless:云计算的标配(云计算 sla)

思考题

# Serverless服务锁定问题

通常来说,不同的Serverless服务商所提供的函数语义是不同的,而且Serverless应用还依赖一些非标准化的BaaS服务,如API网关、对象存储、KV数据库、认证等,因此Serverless应用一般都是针对特定平台。如果要实现可移植性,Serverless应用需要使用某种规范化的API,CNCF下Knative项目为开发人员提供了一套统一的、跨部署环境的API,可以作为一个选择。

服务商锁定你,顶多问你多要几分钱,如果不选择优秀服务商,各种服务都选择自建的话,你的产品可能没有竞争对手迭代快,而竞争对手会要你的命。

# SAM与Serverless

Serverless Application Model(SAM)是AWS提出的Serverless应用模型,Serverless应用包括函数(lambda)、事件源(event)以及共同执行任务的其他资源,其定义了Serverless应用相关的基础设施,以在AWS上准备、构建和部署Serverless应用,可以将SAM看作Serverless Infrastructure as a Code,一个简单的SAM示例如下:

Serverless:云计算的标配(云计算 sla)

基础架构即代码(IaC)是通过代码来管理和配置基础架构的方法,Serverless应用中服务提供商来负责基础架构管理,客户按SAM模型定义应用,SAM将相应的配置转换为AWS的CloudFormation语法,以控制相关的资源。

从上文DataDog的报告中,我们看到Serverless Framework是比SAM应用更广泛的交付工具。

# Kubernetes与Serverless

Kubernetes是一个容器调度平台,通过声明式配置自动管理容器负载,其本身并不是Serverless,目前一些K8S平台提供商基于Kubernetes平台提供了全托管Serverless计算服务,如Google Cloud Run 以容器和Knative开放式标准为基础构建,客户不需要关心基础架构的运维,并支持各种开发语言;阿里云提供ASK服务,客户不需要购买即可直接部署应用,也无需对集群进行节点和容量规划,根据应用配置的规格按需付费,并根据应用负载自动弹性伸缩。

# WebAssembly与Serverless

Serverless主流技术是采用沙箱容器来实现强隔离的安全执行环境,但也带来了更多的性能损耗。如AWS沙箱经过优化启动时间已经可以实现低于300ms的冷启动速度,但仍无法满足函数服务毫秒级的启动要求,目前需要投入通过调度策略,预留一定的“Warn-up”实例才能满足,但这样也引入了更多的资源消耗。

WebAssembly(WASM)是由W3C定义的全新的Web格式规范,是一个通用、开放、高效、安全的底层虚拟机抽象,它的设计初衷是为了解决JavaScript的性能问题,使得Web应用有接近本机原生应用的性能,可以将现有编程语言,如C/C 、Rust、Golang等,编译成WASM字节码,运行在浏览器的沙箱环境。2019年,Mozilla推出WebAssembly System Interface(WASI),它提供类似POSIX这样的标准API来标准化WebAssembly与系统资源的交互抽象,如文件系统、内存管理、GPU等,WASI的出现拓展了WASM的应用场景,可以让其作为一个虚拟机运行各种类型的服务器端应用。

WebAssembly所具备的安全、可移植、高效率、轻量化的特点,为应用沙箱的发展带来了全新的思路。WASM可以轻松实现毫秒级冷启动时间和极低的资源消耗,同时WASM字节码比原生机器码有更高的安全级别。此外WASM实现了细粒度基于能力的安全模型,遵循最小权限原则,在执行过程中,WASI应用只能访问由依赖注入的确切资源,相比传统的操作系统级别隔离,进一步是收敛了安全攻击面。

正因如此,WASM/WASI得到Serverless、Edge社区的广泛关注,Fastly、Cloudflare等厂商相继发布基于WebAssembly技术实现了更轻量级的Serverless服务器,如Fastly发布lucet 运行时支持WASM,冷启动时间只有几十微秒,Cloudflare的Workers采用V8 Engine支持WASM。

Docker创始人在2019年发推,回答WASM是否会代替Docker?

Serverless:云计算的标配(云计算 sla)

WebAssembly也许不会很快取代Docker,但它在有些方面会有很大的应用,包括需要高性能和轻量级的,如JamStack、Edge、Serverless等。

吐槽大会(国内云厂商的Serverless服务专场)

# 阿里云:“业内首发实例级别可观测性和调试” 骄傲了

2021年云栖大会,阿里云针对Serverless 聚焦行业规模化落地难点,发布7大技术突破,其中一条“业内首发实例级别可观测性和调试”。

为什么要引入实例级别指标?阿里云的说法是方便用户评估并发数,以及排查实例问题,实例指标包括hostname、cpuPercent、memoryUsageMB、concurrentRequest等,一瞬间感觉又回到了Serverful的监控场景,用户要怎么理解cpuPercent跟账单上的执行时间之间的关系。

Serverless:云计算的标配(云计算 sla)

我们看一下DataDog对WatchCloud做了哪些增强指标,阿里云的产品经理要不要反思一下?

Serverless:云计算的标配(云计算 sla)

# 腾讯云:云函数接口不全,难道要托关系?

腾讯云Serverless接口一团浆糊,触发器有Create没有Update,有List没有Get,异步事件管理中连Create都没有,却有Terminate,这样服务是面向开发人员的吗?已经上线的那些Serverless应用是不是都是托关系找到接口的?

Serverless:云计算的标配(云计算 sla)

本文介绍了Serverless及其价值,云服务商提供的Serverless服务,客户的使用状况,当然目前Serverless仍然有其局限性,具体业务场景是否适用于Serverless需要具体问题具体分析,希望本文对您理解Serverless及是否采用Serverless有些帮助。

相关新闻

联系我们
联系我们
公众号
公众号
在线咨询
分享本页
返回顶部