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研发及架构经验。
本文为《程序员》原创文章