追本溯源,详解Serverless架构及应用

Serverless相比PaaS的特点

相比PaaS,Serverless在以下几个方面更具优势:

开发者无需关注服务器程序设计,部署和运维管理,开代码重心从此转移到调用方而非服务器端。

更精细粒度的计费模式,真正实现了按需付费(Pay as you go)。使用PAAS托管应用,只要将应用部署上去,无论访问量或者负载高低,都需要计费。而使用Serverless,用户仅仅需要为函数真正调用到的次数和执行时间付费。

Serverless的适用场景

使用Serverless前,你需要了解的Serverless的适用场景特点

Serverless平台运行的是代码函数的片段,而不是整个程序。例如生成缩略图场景中,UGC仅仅运行的是用图形库处理图片这段代码。

代码必须做彻底的无状态改造。Serverless平台会自动为突发的流量自动扩展运行函数代码所需要的容器,但用户代码中无法得知其容器的部署环境情况。两次不同的Serverless调用必须是非耦合无关联的。

用户无需关注水平扩展,Serverless平台会自动根据调用量扩展运行代码所需要的容器,轻松做到高并发调用。

仅仅需要上传代码文件或者代码容器镜像即可完成应用部署。

代码运行的生命周期非常短暂。通常Serverless服务商,会限制代码的最大运行时间,例如AWS Lambda为5分钟。

每次Serverless调用,Serverless平台都会启动容器来运行对应代码,调用结束后将容器销毁。因为容器创建存在一定开销,所以Serverless不太适合对延迟要求及其苛刻的场景。

不是银弹

Serveless架构在某些场景下拥有明显的优势,但它不是解决一切架构问题的灵丹妙药,更不是传统架构的革命者和替代者。架构上说,Serverless更像是一种粘合剂。以下是一些常见的不适用Serverless的情况。

Serverless平台需要为每次FaaS调用创建一个容器运行对应代码。前面提到过,由于创建容器并初始化代码运行环境存在一定程序的开销和延时(通常在10ms级),Serverless架构难以胜任对延迟要求非常苛刻的场景。

同样的,由于启动容器进程开销较高,Serverless架构难以应对非常高的并发请求场景。通常云服务商会对用户的并发调用数做限制,比如AWS Lambda是1000。

通常FaaS平台会对代码运行时间做最大时间限制。如果你的代码需要运行较长时间才能返回结果,需要慎重考虑使用Serverless。例如刚才提到的,AWS Lambda对代码最大运行时间限制为5分钟。

由于代码容器在Serverless平台部署位置环境的不确定性,使用Serverless时,我们必须对代码做无状态改造。如果你两次调用存在关联偶合,同样请慎重考虑Serverless。

其他主流公有云服务商Serverless产品

除了众所周知的AWS Lambda,目前常见的Serverless产品还有刚才提到的UCloud的通用计算 (UGC)。

作为分布式大规模并行计算服务,UGC能够充分利用UCloud多个区域内的多个可用区的计算资源,提供基于云平台的高可用性和高并发性,同时满足图片处理、机器学习、大数据处理、生物数据分析等领域的计算需求。它具备以下特性:

1.Serverless属性。用户无需关心计算资源的的交付部署,以用户算法代码为中心;计算资源服务化,用户通过API使用计算资源。

2.按需付费(Pay As You Go)。用户仅需要为实际消耗的计算资源付费。

3.提供十万核级的海量计算资源,轻松支持高并发计算任务请求,自动实现资源分配和扩展。

4.具备高可用和跨可用区自动容灾能力。

作者简介:陈绥,UCloud 高级研发工程师,UCloud创新产品线通用计算(UGC)团队核心成员,负责UCloud通用计算(UGC)产品的研发和运营,具有多年Serverless研发及架构经验。

本文为《程序员》原创文章